Example #1
0
        public override List <Move> getLegalMovesWithoutCheck(Board board)
        {
            List <Move> knightMoves       = new List <Move>();
            pieceColor  currentPieceColor = board.getBoardPieces()[this.getPiecePosition().Item1, this.getPiecePosition().Item2].getPieceColor();

            for (int i = 0; i < knightMovment.Length; i += 2)
            {
                int DestinationRow = this.getPiecePosition().Item1 + knightMovment[i];
                int DestinationCol = this.getPiecePosition().Item2 + knightMovment[i + 1];

                if (Utility.isValidMove(DestinationRow, DestinationCol))
                {
                    if (board.isEmptyCell(DestinationRow, DestinationCol))
                    {
                        knightMoves.Add(new NormalMove(Tuple.Create(DestinationRow, DestinationCol)));
                    }
                    else
                    {
                        pieceColor destinationPieceColor = board.getBoardPieces()[DestinationRow, DestinationCol].getPieceColor();
                        if (currentPieceColor != destinationPieceColor)
                        {
                            knightMoves.Add(new AttackMove(Tuple.Create(DestinationRow, DestinationCol)));
                        }
                    }
                }
            }
            return(knightMoves);
        }
Example #2
0
        public override List <Move> getLegalMovesWithCheck(Board board)
        {
            List <Move> pawnMoves         = new List <Move>();
            pieceColor  currentPieceColor = board.getBoardPieces()[this.getPiecePosition().Item1, this.getPiecePosition().Item2].getPieceColor();

            for (int i = 0; i < pawnMovement.Length; i += 2)
            {
                int DestinationRow = this.getPiecePosition().Item1 + (int)this.getPieceColor() * pawnMovement[i];
                int DestinationCol = this.getPiecePosition().Item2 + pawnMovement[i + 1];
                if (!Utility.isValidMove(DestinationRow, DestinationCol) ||
                    !Utility.kingStillSafe(board, this.getPiecePosition(), Tuple.Create(DestinationRow, DestinationCol)))
                {
                    continue;
                }

                if (i == 2 && this.firstMove)
                {
                    //checking if the next row is empty or not
                    int nextRow = this.getPiecePosition().Item1 + (int)this.getPieceColor();
                    int nextCol = this.getPiecePosition().Item2 + pawnMovement[i + 1];;
                    if (board.isEmptyCell(nextRow, nextCol) && board.isEmptyCell(DestinationRow, DestinationCol))
                    {
                        pawnMoves.Add(new NormalMove(Tuple.Create(DestinationRow, DestinationCol)));
                    }
                }
                else if (i == 0 && board.isEmptyCell(DestinationRow, DestinationCol))
                {
                    pawnMoves.Add(new NormalMove(Tuple.Create(DestinationRow, DestinationCol)));
                    //this.isFirstMove = false;
                }

                else if (i == 4 || i == 6)
                {
                    if (board.isEmptyCell(DestinationRow, DestinationCol))
                    {
                        continue;
                    }
                    else
                    {
                        pieceColor destinationPieceColor = board.getBoardPieces()[DestinationRow, DestinationCol].getPieceColor();
                        if (currentPieceColor != destinationPieceColor)
                        {
                            pawnMoves.Add(new AttackMove(Tuple.Create(DestinationRow, DestinationCol)));
                        }
                        else
                        {
                            continue;
                        }
                    }
                }
            }
            return(pawnMoves);
        }
Example #3
0
    public void randomize()
    {
        int i = Random.Range(0, 5);

        pc = (pieceColor)i;
        setAlpha(1f);
        img.sprite  = sprites[i];
        isMatched   = false;
        isDestroyed = false;
        matchedWith = null;
        bonus       = (Bonus)0;
    }
Example #4
0
        public static List <Move> getPlayerLegalMove(Board board, pieceColor color)
        {
            List <Move> legalMoves = new List <Move>();

            for (int i = 0; i < 8; ++i)
            {
                for (int j = 0; j < 8; ++j)
                {
                    if (!board.isEmptyCell(i, j) && board.getBoardPieces()[i, j].getPieceColor() == color)
                    {
                        legalMoves.AddRange(board.getBoardPieces()[i, j].getLegalMovesWithoutCheck(board));
                    }
                }
            }
            return(legalMoves);
        }
Example #5
0
        public override List <Move> getLegalMovesWithCheck(Board board)
        {
            List <Move> rookMoves         = new List <Move>();
            pieceColor  currentPieceColor = board.getBoardPieces()[this.getPiecePosition().Item1, this.getPiecePosition().Item2].getPieceColor();

            for (int i = 0; i < rookMovement.Length; i += 2)
            {
                int DestinationRow = this.getPiecePosition().Item1;
                int DestinationCol = this.getPiecePosition().Item2;

                while (Utility.isValidMove(DestinationRow, DestinationCol))
                {
                    DestinationRow += rookMovement[i];
                    DestinationCol += rookMovement[i + 1];
                    if (!Utility.isValidMove(DestinationRow, DestinationCol))
                    {
                        break;
                    }

                    if (board.isEmptyCell(DestinationRow, DestinationCol))
                    {
                        if (Utility.kingStillSafe(board, this.getPiecePosition(), Tuple.Create(DestinationRow, DestinationCol)))
                        {
                            rookMoves.Add(new NormalMove(Tuple.Create(DestinationRow, DestinationCol)));
                        }
                    }
                    else
                    {
                        pieceColor destinationPieceColor = board.getBoardPieces()[DestinationRow, DestinationCol].getPieceColor();
                        if (currentPieceColor != destinationPieceColor)
                        {
                            if (Utility.kingStillSafe(board, this.getPiecePosition(), Tuple.Create(DestinationRow, DestinationCol)))
                            {
                                rookMoves.Add(new AttackMove(Tuple.Create(DestinationRow, DestinationCol)));
                            }
                            break;
                        }
                        else
                        {
                            break;
                        }
                    }
                }
            }
            return(rookMoves);
        }
        public List <Button> GetAllPossibleCheckMovesForColor(pieceColor color, Button[,] board)
        {
            List <Button> locations = new List <Button>();

            for (int i = 0; i < 8; ++i)
            {
                for (int j = 0; j < 8; ++j)
                {
                    if (GetPieceOnSquare(i, j, board).Color == color)
                    {
                        GetPossibleCheckedMovesForPiece(board[i, j], board);
                    }
                }
            }

            return(locations);
        }
Example #7
0
        public override List <Move> getLegalMovesWithCheck(Board board)
        {
            List <Move> kingMoves         = new List <Move>();
            pieceColor  currentPieceColor = board.getBoardPieces()[this.getPiecePosition().Item1, this.getPiecePosition().Item2].getPieceColor();

            for (int i = 0; i < kingMovement.Length; i += 2)
            {
                int DestinationRow = this.getPiecePosition().Item1 + kingMovement[i];
                int DestinationCol = this.getPiecePosition().Item2 + kingMovement[i + 1];
                if (i == 0)
                {
                    if (Utility.canPerformLongCastling(board, this))
                    {
                        kingMoves.Add(new NormalMove(Tuple.Create(DestinationRow, DestinationCol)));
                    }
                }
                else if (i == 2)
                {
                    if (Utility.canPerformShortCastling(board, this))
                    {
                        kingMoves.Add(new NormalMove(Tuple.Create(DestinationRow, DestinationCol)));
                    }
                }
                else
                {
                    if (Utility.isValidMove(DestinationRow, DestinationCol) &&
                        Utility.kingStillSafe(board, this.getPiecePosition(), Tuple.Create(DestinationRow, DestinationCol)))
                    {
                        if (board.isEmptyCell(DestinationRow, DestinationCol))
                        {
                            kingMoves.Add(new NormalMove(Tuple.Create(DestinationRow, DestinationCol)));
                        }
                        else
                        {
                            pieceColor destinationPieceColor = board.getBoardPieces()[DestinationRow, DestinationCol].getPieceColor();
                            if (currentPieceColor != destinationPieceColor)
                            {
                                kingMoves.Add(new AttackMove(Tuple.Create(DestinationRow, DestinationCol)));
                            }
                        }
                    }
                }
            }
            return(kingMoves);
        }
Example #8
0
 public Tuple <int, int> getPlayerKingPosition(pieceColor kingColor)
 {
     for (int i = 0; i < 8; ++i)
     {
         for (int j = 0; j < 8; ++j)
         {
             if (!isEmptyCell(i, j) && kingColor == pieceColor.White && boardPieces[i, j].getPieceType() == (int)pieceType.whiteKing)
             {
                 return(Tuple.Create(i, j));
             }
             else if (!isEmptyCell(i, j) && kingColor == pieceColor.BLack && boardPieces[i, j].getPieceType() == (int)pieceType.blackKing)
             {
                 return(Tuple.Create(i, j));
             }
         }
     }
     return(Tuple.Create(1, 1));
 }
        public List <Button> GetAllAvailableMovesForColor(pieceColor color, Button[,] board)
        {
            List <Button> locations = new List <Button>();

            for (int i = 0; i < 8; ++i)
            {
                for (int j = 0; j < 8; ++j)
                {
                    Piece piece = GetPieceOnSquare(i, j, board);
                    if (piece.Color == color)
                    {
                        switch (piece.Name)
                        {
                        case "Pawn":
                            PawnAttackLogic(piece, locations, board);
                            PawnAttackLogic(piece, locations, board);
                            break;

                        case "Knight":
                            KnightMoveLogic(piece, locations, board);
                            break;

                        case "Bishop":
                            BishopMoveLogic(piece, locations, board);
                            break;

                        case "Rook":
                            RookMoveLogic(piece, locations, board);
                            break;

                        case "Queen":
                            QueenMoveLogic(piece, locations, board);
                            break;

                        case "King":
                            KingMoveLogic(piece, locations, board);
                            break;
                        }
                    }
                }
            }
            return(locations);
        }
Example #10
0
 public Knight(Tuple <int, int> piecePosition, pieceType type, pieceColor color) : base(piecePosition, type, color)
 {
 }
Example #11
0
 public Piece(Tuple <int, int> piecePosition, pieceType type, pieceColor color)
 {
     this.piecePosition = piecePosition;
     this.type          = type;
     this.color         = color;
 }
Example #12
0
 public Pawn(Tuple <int, int> piecePosition, pieceType type, pieceColor color) : base(piecePosition, type, color)
 {
     this.firstMove = true;
 }