Example #1
0
        public void TestInvalidMoves()
        {
            var rook = new Rook(board, Color.White);

            board.AddPieceToTheGame(rook, board[4, 4]);

            for (int i = 0; i < ChessBoard.ChessboardSize; i++)
            {
                for (int j = 0; j < ChessBoard.ChessboardSize; j++)
                {
                    if (i != 4 && j != 4)
                    {
                        Assert.IsFalse(rook.Move(board[i, j]));
                        Assert.IsTrue(board[i, j].Empty);
                    }
                }
            }

            Assert.IsFalse(board[4, 4].Empty);

            var otherRook = new Rook(board, Color.Black);

            board.AddPieceToTheGame(otherRook, board[4, 6]);

            Assert.IsFalse(rook.Move(board[4, 7]));
            Assert.IsTrue(rook.Move(board[4, 6]));
        }
Example #2
0
 public void _02_making_a_legal_move_by_placing_the_black_rook_on_X_equals_7_and_Y_eqauls_7_and_moving_to_X_equals_7_and_Y_eqauls_4_should_move_the_rook()
 {
     _chessBoard.Add(_blackRook, 7, 7);
     _blackRook.Move(7, 4);
     Assert.That(_blackRook.XCoordinate, Is.EqualTo(7));
     Assert.That(_blackRook.YCoordinate, Is.EqualTo(4));
     Assert.That(_chessBoard.IsPieceAt(7, 4, _blackRook), Is.True);
 }
Example #3
0
 public void _12_black_king_at_X_equals_4_and_Y_equals_7_long_castles_but_the_rook_has_moved()
 {
     _chessBoard.Add(_blackKing, 4, 7);
     _chessBoard.Add(_blackRook, 0, 6);
     _blackRook.Move(0, 7);
     _blackKing.LongCastle();
     Assert.That(!_chessBoard.IsPieceAt(2, 7, _blackKing));
     Assert.That(!_chessBoard.IsPieceAt(3, 7, _blackRook));
 }
Example #4
0
 public void _12_is_at_X_equals_4_and_Y_equals_0_long_castles_but_the_rook_has_moved()
 {
     _chessBoard.Add(_whiteKing, 4, 0);
     _chessBoard.Add(_whiteRook, 0, 1);
     _whiteRook.Move(0, 0);
     _whiteKing.LongCastle();
     Assert.That(!_chessBoard.IsPieceAt(2, 0, _whiteKing));
     Assert.That(!_chessBoard.IsPieceAt(3, 0, _whiteRook));
 }
Example #5
0
        public void TestValidMoves()
        {
            var rook = new Rook(board, Color.White);

            board.AddPieceToTheGame(rook, board[4, 4]);

            Assert.IsTrue(rook.Move(board[7, 4]));
            Assert.IsTrue(board[4, 4].Empty);
            Assert.IsFalse(board[7, 4].Empty);

            Assert.IsTrue(rook.Move(board[7, 7]));
            Assert.IsTrue(rook.Move(board[0, 7]));
            Assert.IsTrue(rook.Move(board[0, 0]));
            Assert.IsTrue(rook.Move(board[0, 1]));
        }
Example #6
0
        public void DetectCheckmate()
        {
            var king = new King(board, Color.White);

            board.AddPieceToTheGame(king, board[0, 0]);

            var enemyRook = new Rook(board, Color.Black);

            board.AddPieceToTheGame(enemyRook, board[7, 0]);
            Assert.IsFalse(board.Checkmate(Color.White, board.GetPossibleMovesFor(Color.White)));

            var otherRook = new Rook(board, Color.Black);

            board.AddPieceToTheGame(otherRook, board[7, 1]);
            Assert.IsTrue(board.Checkmate(Color.White, board.GetPossibleMovesFor(Color.White)));

            var whiteRook = new Rook(board, Color.White);

            board.AddPieceToTheGame(whiteRook, board[4, 4]);
            Assert.IsFalse(board.Checkmate(Color.White, board.GetPossibleMovesFor(Color.White)));

            whiteRook.Move(board[0, 4]);
            enemyRook.Move(board[0, 4]);
            Assert.IsTrue(board.Checkmate(Color.White, board.GetPossibleMovesFor(Color.White)));

            board.AddPieceToTheGame(whiteRook, board[4, 4]);
            Assert.IsFalse(board.Checkmate(Color.White, board.GetPossibleMovesFor(Color.White)));
        }
Example #7
0
        private bool IsValidMove(pieceName sourcePieceType, int destinationY, int destinationX) // determine if the piece is able to move to its target square
        {
            int sourceY = PieceDetails.FindCoordinate(selectedpiece.Location.Y);
            int sourceX = PieceDetails.FindCoordinate(selectedpiece.Location.X);

            switch (sourcePieceType)
            {
            case pieceName.Pawn:
                Pawn pawn = new Pawn(board, sourceY, sourceX, destinationY, destinationX, History, turn);
                return(pawn.Move(board));

            case pieceName.Rook:
                Rook rook = new Rook(board, sourceY, sourceX, destinationY, destinationX, History, turn);
                return(rook.Move(board));

            case pieceName.Knight:
                Knight knight = new Knight(board, sourceY, sourceX, destinationY, destinationX, History, turn);
                return(knight.Move(board));

            case pieceName.Bishop:
                Bishop bishop = new Bishop(board, sourceY, sourceX, destinationY, destinationX, History, turn);
                return(bishop.Move(board));

            case pieceName.Queen:
                Queen queen = new Queen(board, sourceY, sourceX, destinationY, destinationX, History, turn);
                return(queen.Move(board));

            default:
                King king = new King(board, sourceY, sourceX, destinationY, destinationX, History, turn);
                return(king.Move(board));
            }
        }
Example #8
0
 protected override void Move()
 {
     if (PossibleMoves.Count > 0)
     {
         Color currentPlayerColor = this.Game.CurrentPlayer.Color;
         Rook  rook             = (Rook)Game.Figures.First(f => f.Color == currentPlayerColor && f is Rook);
         King  king             = (King)Game.Figures.First(f => f.Color == currentPlayerColor && f is King);
         var   pole             = CalculateRestrictedField(rook.Field.Horizontal, rook.Field.Vertical);
         var   restrictionMoves = FindSmallerRestrictedFields();
         if (restrictionMoves.Count > 0)
         {
             rook.Move(restrictionMoves.Last());
             return;
         }
         var oppositions = FindOppositions();
         if (oppositions.Count > 0)
         {
             king.Move(oppositions.First());
             return;
         }
         else
         {
             MoveKingCloser();
         }
     }
 }
Example #9
0
        public void Move_InvalidPosition_ReturnsStartingPosition(int finalDestinationColumn, int finalDestinationRow)
        {
            IChessPiece rook = new Rook(0, 5, 5);

            rook.Move(finalDestinationColumn, finalDestinationRow);
            Assert.Equal(5, rook.Position.ColumnPosition);
            Assert.Equal(5, rook.Position.RowPosition);
        }
Example #10
0
 public void _26_it_is_at_X_equals_4_and_Y_equals_0_and_a_piece_tries_to_capture_it_should_not_move_either_piece()
 {
     _chessBoard.Add(_whiteKing, 4, 0);
     _chessBoard.Add(_blackRook, 4, 4);
     _blackRook.Move(4, 0);
     Assert.That(_chessBoard.IsPieceAt(4, 0, _whiteKing));
     Assert.That(_chessBoard.IsPieceAt(4, 4, _blackRook));
 }
Example #11
0
 public void _06_and_is_captured_by_a_white_rook()
 {
     _chessBoard.Add(_blackKnight, 3, 7);
     _chessBoard.Add(_whiteRook, 3, 4);
     _whiteRook.Move(3, 7);
     Assert.That(_chessBoard.CapturedBlackPieces.Contains(_blackKnight));
     Assert.That(_chessBoard.IsPieceAt(3, 7, _whiteRook));
     Assert.That(_whiteRook.XCoordinate, Is.EqualTo(3));
     Assert.That(_whiteRook.YCoordinate, Is.EqualTo(7));
 }
        public void RookIsMoved()
        {
            var rook  = new Rook(2, 2, PieceColor.White);
            var board = new Board();

            Board.Occupy(board[2, 2], rook);

            Assert.IsTrue(rook.Move(7, 2, board, out _, false));
            Assert.IsTrue(rook.Move(7, 5, board, out _, false));
            Assert.IsTrue(rook.Move(7, 3, board, out _, false));
            Assert.IsTrue(rook.Move(3, 3, board, out _, false));

            Assert.IsFalse(rook.Move(4, 4, board, out _, false));
            Assert.IsFalse(rook.Move(2, 5, board, out _, false));
            Assert.IsFalse(rook.Move(8, 3, board, out _, false));
            Assert.IsFalse(rook.Move(3, 1, board, out _, false));
            Assert.IsFalse(rook.Move(3, 7, board, out _, false));

            Assert.IsTrue(rook.Move(3, 6, board, out _, false));

            Assert.IsTrue(board[3, 6].OccupiedBy.Color == PieceColor.White);
            Assert.IsNull(board[2, 2].OccupiedBy);
        }
Example #13
0
        static void Main(string[] args)
        {
            Rook r = new Rook('a', 1);

            Console.WriteLine("Rook on a1");
            Console.WriteLine("Move {0}{1} - {2}", 'b', 4, r.Move('b', 4));
            Console.WriteLine("Move {0}{1} - {2}", 'f', 2, r.Move('f', 2));
            Console.WriteLine("Move {0}{1} - {2}", 'b', 4, r.Move('c', 3));
            Console.WriteLine("Move {0}{1} - {2}", 'a', 8, r.Move('a', 8));
            Console.WriteLine("Move {0}{1} - {2}", 'b', 8, r.Move('b', 8));
            Console.WriteLine("Move {0}{1} - {2}", 'b', 0, r.Move('b', 0));

            Knight k = new Knight('d', 4);

            Console.WriteLine("Knight on d4");
            Console.WriteLine("Move {0}{1} - {2}", 'e', 6, k.Move('e', 6));
            Console.WriteLine("Move {0}{1} - {2}", 'f', 5, k.Move('f', 5));
            Console.WriteLine("Move {0}{1} - {2}", 'b', 3, k.Move('b', 3));
            Console.WriteLine("Move {0}{1} - {2}", 'b', 5, k.Move('b', 5));
            Console.WriteLine("Move {0}{1} - {2}", 'c', 2, k.Move('c', 2));
            Console.WriteLine("Move {0}{1} - {2}", 'b', 0, k.Move('b', 0));

            Bishop b = new Bishop('d', 4);

            Console.WriteLine("Bishop on d4");
            Console.WriteLine("Move {0}{1} - {2}", 'c', 3, b.Move('c', 3));
            Console.WriteLine("Move {0}{1} - {2}", 'a', 1, b.Move('a', 1));
            Console.WriteLine("Move {0}{1} - {2}", 'b', 3, b.Move('b', 3));
            Console.WriteLine("Move {0}{1} - {2}", 'b', 5, b.Move('b', 5));
            Console.WriteLine("Move {0}{1} - {2}", 'c', 2, b.Move('c', 2));
            Console.WriteLine("Move {0}{1} - {2}", 'a', 8, b.Move('a', 8));

            Queen q = new Queen('d', 4);

            Console.WriteLine("Queen on d4");
            Console.WriteLine("Move {0}{1} - {2}", 'c', 3, q.Move('c', 3));
            Console.WriteLine("Move {0}{1} - {2}", 'a', 1, q.Move('a', 1));
            Console.WriteLine("Move {0}{1} - {2}", 'b', 3, q.Move('b', 3));
            Console.WriteLine("Move {0}{1} - {2}", 'b', 5, q.Move('b', 5));
            Console.WriteLine("Move {0}{1} - {2}", 'c', 2, q.Move('c', 2));
            Console.WriteLine("Move {0}{1} - {2}", 'd', 8, q.Move('d', 8));

            King kg = new King('h', 1);

            Console.WriteLine("King on h1");
            Console.WriteLine("Move {0}{1} - {2}", 'g', 2, kg.Move('g', 2));
            Console.WriteLine("Move {0}{1} - {2}", 'g', 1, kg.Move('g', 1));
            Console.WriteLine("Move {0}{1} - {2}", 'c', 4, kg.Move('c', 4));
            Console.WriteLine("Move {0}{1} - {2}", 'd', 5, kg.Move('d', 5));
            Console.WriteLine("Move {0}{1} - {2}", 'd', 3, kg.Move('d', 3));
            Console.WriteLine("Move {0}{1} - {2}", 'e', 5, kg.Move('e', 5));
            Console.WriteLine("Move {0}{1} - {2}", 'e', 4, kg.Move('e', 4));
            Console.WriteLine("Move {0}{1} - {2}", 'e', 3, kg.Move('e', 3));
        }
Example #14
0
        public static void Main(String[] args)
        {
            //while (true)
            //{
            //int X = ShowMenu();
            //switch (X)
            //    {
            //        case 1:
            //        PlayGame(new CheckersFactory());
            //    break;
            //    case 2:
            //    PlayGame(new ChessFactory());
            //    break;
            //}
            //Position p = new Position(2, 3);
            //Pawn pp = new Pawn(FigureColor.White, FigureType.Pawn, p);

            //-------------------------Test figures
            //King is ok
            //Queen is ok
            //Rook is ok
            //Knight is ok
            //Bishop is ok
            //Pawn is ok

            Console.WriteLine("Create new rook at (5, 7)");
            Console.WriteLine("Valid moves are:");
            Rook myRook = new Rook(FigureColor.White, FigureType.Rook, new Position(5, 7));
            foreach (Position pos in myRook.ValidMoves)
            {
                Console.WriteLine("{0}, {1}", pos.X, pos.Y);
            }
            Console.WriteLine("Move to new position (5,5)");
            Console.WriteLine("New Valid moves are:");
            myRook.Move(new Position(5,5));
            foreach (Position pos in myRook.ValidMoves)
            {
                Console.WriteLine("{0}, {1}", pos.X, pos.Y);
            }

            //-------------------------Test figures
        }
Example #15
0
    static void Main()
    {
        string figure = Console.ReadLine();
        int    x      = Convert.ToInt32(Console.ReadLine());
        int    y      = Convert.ToInt32(Console.ReadLine());
        int    x1     = Convert.ToInt32(Console.ReadLine());
        int    y1     = Convert.ToInt32(Console.ReadLine());

        switch (figure)
        {
        case "K":
            King king = new King(x, y);
            Console.WriteLine($"King: {king.Move(x1, y1)}");
            break;

        case "Q":
            Queen queen = new Queen(x, y);
            Console.WriteLine($"Queen: {queen.Move(x1, y1)}");
            break;

        case "B":
            Bishop bishop = new Bishop(x, y);
            Console.WriteLine($"Bishop: {bishop.Move(x1, y1)}");
            break;

        case "N":
            Knight knight = new Knight(x, y);
            Console.WriteLine($"Knight: {knight.Move(x1, y1)}");
            break;

        case "R":
            Rook rook = new Rook(x, y);
            Console.WriteLine($"Rook: {rook.Move(x1, y1)}");
            break;

        default:
            Console.WriteLine("Unknown piece code. Try again.");
            break;
        }
    }
Example #16
0
        public bool CanMove(string move)
        {
            //pt ce piesa se aplica mutarea
            var startX = Int32.Parse(move[1].ToString()) - 1;
            //Console.WriteLine("startx board: " + startX);
            var startY = move[0] - 'a';
            //Console.WriteLine("starty board: " + startY);

            var endY = move[3] - 'a';
            //Console.WriteLine("Endy board: " + endY);
            var endX = Int32.Parse(move[4].ToString()) - 1;

            //Console.WriteLine("Endx board: " + endX);

            if (TablaSah[startX, startY] == null)
            {
                //Console.WriteLine("Nu exista piesa pe aceasta pozitie");
                return(false);
            }
            else
            {
                if (TablaSah[startX, startY].Name == "K")
                {
                    Piece king = new King();
                    return(king.Move(TablaSah, move));
                }

                if (TablaSah[startX, startY].Name == "Q")
                {
                    Piece queen = new Queen();
                    if (queen.Move(TablaSah, move) == true && queen.CheckIfMove(TablaSah, move) == false)
                    {
                        return(true);
                    }
                    else
                    {
                        return(false);
                    }
                }

                if (TablaSah[startX, startY].Name == "B")
                {
                    Piece bishop = new Bishop();
                    if (bishop.Move(TablaSah, move) == true && bishop.CheckIfMove(TablaSah, move) == false)
                    {
                        return(true);
                    }
                    else
                    {
                        return(false);
                    }
                }

                if (TablaSah[startX, startY].Name == "N")
                {
                    Piece knight = new Knight();
                    if (knight.Move(TablaSah, move) == true && knight.CheckIfMove(TablaSah, move) == false)
                    {
                        return(true);
                    }
                    else
                    {
                        return(false);
                    }
                }

                if (TablaSah[startX, startY].Name == "P")
                {
                    Piece pawn = new Pawn();
                    if (pawn.Move(TablaSah, move) == true && pawn.CheckIfMove(TablaSah, move) == false)
                    {
                        return(true);
                    }
                    else
                    {
                        return(false);
                    }
                }

                if (TablaSah[startX, startY].Name == "R")
                {
                    Piece rook = new Rook();
                    if (rook.Move(TablaSah, move) == true && rook.CheckIfMove(TablaSah, move) == false)
                    {
                        return(true);
                    }
                    else
                    {
                        return(false);
                    }
                }
            }

            return(false);
        }
Example #17
0
    public void CastlingRound(Square[,] b, Player otherPlayer)
    {
        bool canDoCastling = true;

        Square[,] board = null;
        if (b == null)
        {
            board = Board.Instance.SquareMatrix;
        }
        else
        {
            board = b;
        }



        if (!isMoved && otherPlayer != null && !otherPlayer.CheckIfSquareIsInMoves(this.actualSquare)) //Si no es jaque ahora
        {
            for (int i = actualSquare.X + 1; i < 7; i++)
            {
                if (board[actualSquare.Y, i].PieceContainer != null || otherPlayer.CheckIfSquareIsInMoves(board[actualSquare.Y, i]))
                {
                    canDoCastling = false;
                    break;
                }
            }


            if (!isMoved && canDoCastling && board[actualSquare.Y, 7].PieceContainer != null && board[actualSquare.Y, 7].PieceContainer is Rook)
            {
                Rook rook = board[actualSquare.Y, 7].PieceContainer as Rook;
                if (!rook.IsMoved)
                {
                    Move move      = new Move(board[actualSquare.Y, actualSquare.X + 2]);
                    int  y         = ActualSquare.Y;
                    int  x         = ActualSquare.X + 1;
                    int  previousX = rook.ActualSquare.X;
                    int  previousY = rook.ActualSquare.Y;
                    move.RegisterCallback(() =>
                    {
                        if (b != null)
                        {
                            rook.Move(board[y, x]);
                        }
                        else
                        {
                            rook.Move(board[y, x].RelatedBehaviour);
                        }
                    });
                    move.RegisterCallbackToReset(() =>
                    {
                        rook.Move(board[previousY, previousX]);
                    });
                    possibleMoves.Add(move);
                }
            }


            canDoCastling = true;

            for (int i = actualSquare.X - 1; i > 0; i--)
            {
                if (board[actualSquare.Y, i].PieceContainer != null || otherPlayer.CheckIfSquareIsInMoves(board[actualSquare.Y, i]))
                {
                    canDoCastling = false;
                    break;
                }
            }

            if (!isMoved && canDoCastling && board[actualSquare.Y, 0].PieceContainer != null && board[actualSquare.Y, 0].PieceContainer is Rook)
            {
                Rook rook = board[actualSquare.Y, 0].PieceContainer as Rook;
                if (!rook.IsMoved)
                {
                    Move move      = new Move(board[actualSquare.Y, actualSquare.X - 2]);
                    int  y         = ActualSquare.Y;
                    int  x         = ActualSquare.X - 1;
                    int  previousX = rook.ActualSquare.X;
                    int  previousY = rook.ActualSquare.Y;
                    move.RegisterCallback(() =>
                    {
                        if (b != null)
                        {
                            rook.Move(board[y, x]);
                        }
                        else
                        {
                            rook.Move(board[y, x].RelatedBehaviour);
                        }
                    });
                    move.RegisterCallbackToReset(() =>
                    {
                        rook.Move(board[previousY, previousX]);
                    });


                    possibleMoves.Add(move);
                }
            }
        }
    }
Example #18
0
 public void Rook_WhenMoveBothRankAndFile_ThrowsInvalidMoveException(char file, char rank)
 {
     mockNewSquare.Setup(s => s.Position).Returns((file, rank));
     Assert.Throws <InvalidMoveException>(() => rook.Move(mockNewSquare.Object));
 }
Example #19
0
        public bool TestMoveRook(string fromPostiton, string toPosition, bool isWhite)
        {
            var rook = new Rook(isWhite);

            return(rook.Move(fromPostiton, toPosition, isWhite));
        }