Ejemplo n.º 1
0
        public bool IsValidMove(Move move)
        {
            var tempMove = ActiveBlock.Clone();

            tempMove.Move(move);

            return(!CheckBlock(tempMove));
        }
Ejemplo n.º 2
0
	private void CreateNewBlock()
	{
		activeBlock = new ActiveBlock(board);
		if (activeBlock.cannotBeSpawned)
		{
			board.SetAllBlocksColor(Square.deadColor);
			activeBlock.ForcePlace();
			SoundManager.PlayBoofSound();
			board.Reset();
			activeBlock = null;
		}
	}
Ejemplo n.º 3
0
    void setBounds(int x, int z, ActiveBlock b)
    {
        bool up, down, left, right;

        up = (z == 0) ? true : (path[x, (z - 1)]);

        down = (z == 1) ? true : (path[x, (z + 1)]);

        left = (x == 0) ? true : (path[(x - 1), z]);

        right = (x == 1) ? true : (path[(x + 1), z]);

        b.putBounds(up, down, left, right);
    }
Ejemplo n.º 4
0
	private void MoveActiveBlockDown()
	{
		bool hasMovedDown = activeBlock.Move(0, 1);
		if (hasMovedDown)
		{
			blockFreezeMovesCtr = 0;
		}
		else
		{
			blockFreezeMovesCtr++;

			if (blockFreezeMovesCtr >= numMovesBeforeBlockFreeze)
			{
				activeBlock.Freeze();
				board.ClearFilledRows();
				KeyListener.keyQueue.Clear();
				blockFreezeMovesCtr = 0;
				activeBlock = null;
				SoundManager.PlayBoofSound();
			}
		}
	}
Ejemplo n.º 5
0
 public void PopIndent()
 {
     ActiveBlock.PopIndent();
 }
Ejemplo n.º 6
0
 public void PushIndent(uint indent = 4u)
 {
     ActiveBlock.PushIndent(indent);
 }
Ejemplo n.º 7
0
 public void ResetNewLine()
 {
     ActiveBlock.ResetNewLine();
 }
Ejemplo n.º 8
0
 public void NeedNewLine()
 {
     ActiveBlock.NeedNewLine();
 }
Ejemplo n.º 9
0
 public void NewLineIfNeeded()
 {
     ActiveBlock.NewLineIfNeeded();
 }
Ejemplo n.º 10
0
 public void WriteLineIndent(string msg, params object[] args)
 {
     ActiveBlock.WriteLineIndent(msg, args);
 }
Ejemplo n.º 11
0
 public void PushBlock(Block block)
 {
     block.Parent = ActiveBlock;
     ActiveBlock.AddBlock(block);
     ActiveBlock = block;
 }
Ejemplo n.º 12
0
 public void AddBlock(Block block)
 {
     ActiveBlock.AddBlock(block);
 }
Ejemplo n.º 13
0
    public override void checkPath()
    {
        int         count       = 0;
        bool        playerFound = false;
        int         boundX      = -1;
        int         boundZ      = -1;
        ActiveBlock current     = null;

        for (int i = 0; i < blocks.Length; i++)
        {
            int x = -1;
            int z = -1;

            if (blocks[i].isOnTop())
            {
                count++;
                float posX = blocks[i].getPos().x;
                if (posX < 0)
                {
                    x = 0;
                }
                else
                {
                    x = 1;
                }

                float posZ = blocks[i].getPos().z;
                if (posZ < 0)
                {
                    z = 1;
                }
                else
                {
                    z = 0;
                }

                if (x >= 0 && z >= 0)
                {
                    path[x, z] = blocks[i].active;
                }

                if (blocks[i].isPlayer())
                {
                    playerFound = true;
                    playerPos.x = x;
                    playerPos.y = z;
                    char f = '0';
                    char s = '0';
                    switch (x)
                    {
                    case 0:
                        f = 'L';
                        break;

                    case 1:
                        f = 'R';
                        break;
                    }
                    switch (z)
                    {
                    case 0:
                        s = 'B';
                        break;

                    case 1:
                        s = 'F';
                        break;
                    }

                    playerLayers = "" + f + ":" + s;
                    boundX       = x;
                    boundZ       = z;
                    current      = blocks[i];
                }
            }
        }
        if (!playerFound)
        {
            playerLayers = "0:0";
            playerPos.x  = -1;
            playerPos.y  = -1;
        }
        else
        {
            setBounds(boundX, boundZ, current);
        }
    }
Ejemplo n.º 14
0
 public void WriteStartBraceIndent()
 {
     ActiveBlock.WriteStartBraceIndent();
 }
Ejemplo n.º 15
0
 public void Write(string msg, params object[] args)
 {
     ActiveBlock.Write(msg, args);
 }
Ejemplo n.º 16
0
 public void WriteCloseBraceIndent()
 {
     ActiveBlock.WriteCloseBraceIndent();
 }
Ejemplo n.º 17
0
        public bool Move(Move move)
        {
            // move must be set
            if (move == Engine.Move.None)
            {
                return(true);
            }

            // must have active block
            if (ActiveBlock == null)
            {
                return(false);
            }

            // implement fall
            if (move == Engine.Move.Fall)
            {
                var collisionHeight = int.MaxValue;
                foreach (var coord in ActiveBlock.GetCoords())
                {
                    var steps = 0;
                    for (var y = coord.Row - 1; y >= 0; y--)
                    {
                        if (GameBoard[y][coord.Column] == false)
                        {
                            steps++;
                        }
                        else
                        {
                            break;
                        }
                    }

                    collisionHeight = Math.Min(steps, collisionHeight);
                }
                ActiveBlock.Position.Row -= collisionHeight;

                EventHandler?.OnMove(ActiveBlock, move);

                LockBlock();
                CheckBoard();
                IsSoftDrop = false;
                return(true);
            }

            var tempMove  = ActiveBlock.Clone().Move(move);
            var validMove = CheckBlock(tempMove);

            // try to solve rotation offset
            if (validMove == false && (move == Engine.Move.RotateLeft || move == Engine.Move.RotateRight))
            {
                var solved = _TrySolveRotation(ref tempMove);
                if (solved != null)
                {
                    tempMove  = solved;
                    validMove = true;
                }
            }

            // if un valid move down lock block
            if (validMove == false && move == Engine.Move.Down)
            {
                LockBlock();
                CheckBoard();
                IsSoftDrop = false;
                return(true);
            }

            // move is un valid
            if (validMove == false)
            {
                EventHandler?.OnUnvalidMove(move);
                return(false);
            }

            // apply move
            ActiveBlock = tempMove;
            IsSoftDrop  = _IsSoftDrop(ActiveBlock);

            EventHandler?.OnMove(ActiveBlock, move);
            return(true);
        }