public void WhitePawns_CannotTakeMoveDiagonally_IfEnPassantIsNoLongerActive() { var board = new Board(); var pawn = new Pawn(Player.White); board.AddPiece(Square.At(5, 1), pawn); var enemyPawn = new Pawn(Player.Black); board.AddPiece(Square.At(1, 0), enemyPawn); var enemyPiece = new Rook(Player.Black); board.AddPiece(Square.At(1, 7), enemyPiece); pawn.MoveTo(board, Square.At(4, 1)); enemyPawn.MoveTo(board, Square.At(3, 0)); pawn.MoveTo(board, Square.At(3, 1)); enemyPiece.MoveTo(board, Square.At(7, 7)); var moves = pawn.GetAvailableMoves(board).ToList(); moves.Should().NotContain(Square.At(2, 0)); }
public void Whether_Piece_UpdatesPosition_On_MoveTo() { var board = new Board(); var newPos = new Square(1, 6); var rook = new Rook(new Square(1, 1), board, PieceColor.White); rook.MoveTo(newPos); Assert.That(rook.Position.Equals(newPos)); }
public void Kings_WithARookWhichHasAlreadyMoved_CannotCastle() { var board = new Board(); var king = new King(Player.White); board.AddPiece(Square.At(7, 4), king); var rook = new Rook(Player.White); board.AddPiece(Square.At(7, 7), rook); var pawn = new Rook(Player.Black); board.AddPiece(Square.At(0, 3), pawn); rook.MoveTo(board, Square.At(6, 7)); pawn.MoveTo(board, Square.At(1, 3)); rook.MoveTo(board, Square.At(7, 7)); var moves = king.GetAvailableMoves(board); moves.Should().NotContain(Square.At(7, 6)); }
public void Black_CannotMoveKing_IntoCheck() { var board = new Board(); var king = new King(Player.Black); board.AddPiece(Square.At(4, 4), king); var rook = new Rook(Player.White); board.AddPiece(Square.At(5, 5), rook); rook.MoveTo(board, Square.At(5, 6)); king.MoveTo(board, Square.At(5, 4)); }
public void Whether_Piece_CantMoveWhenIsWhiteMove_On_MoveTo() { var board = new Board(); var newPos = new Square(1, 6); var oldPos = new Square(1, 1); var rook = new Rook(oldPos, board, PieceColor.Black); var hasMoved = rook.MoveTo(newPos); Assert.That(board.IsWhiteMove); Assert.That(rook.Position.Equals(oldPos)); Assert.That(!hasMoved); }
public void Whether_Board_UpdatesIsWhiteMove_On_MoveTo() { var board = new Board(); var newPos = new Square(1, 6); var oldPos = new Square(1, 1); var rook = new Rook(oldPos, board, PieceColor.White); var hasMoved = rook.MoveTo(newPos); Assert.That(rook.Position.Equals(newPos)); Assert.IsFalse(board.IsWhiteMove); Assert.That(hasMoved); }
public void MoveTo_should_ignore_squares_that_are_not_allowed() { // Arrange const string currentSquare = "f1"; const string targetSquare = "g8"; ChessmenBase rook = new Rook(Color.Black, currentSquare); // Act rook.MoveTo(targetSquare); // Assert Assert.That(rook.Square, Is.EqualTo(currentSquare)); }
public void Rook_CannotCastle_IfMoved() { var board = new Board(); var rook = new Rook(Player.White); var king = new King(Player.White); board.AddPiece(Square.At(6, 0), rook); board.AddPiece(Square.At(7, 4), king); rook.MoveTo(board, Square.At(7, 0)); var moves = rook.GetAvailableMoves(board); moves.Should().NotContain(Square.At(7, 3)); }
public void MoveTo_should_set_square_to_target_square() { // Arrange const string currentSquare = "f1"; const string targetSquare = "b1"; ChessmenBase rook = new Rook(Color.Black, currentSquare); // Act rook.MoveTo(targetSquare); // Assert Assert.That(rook.Square, Is.EqualTo(targetSquare)); }
public void Whether_Piece_PositionUpdatedRaised_On_PieceMoved() { var board = new Board(); var newPos = new Square(1, 6); var moved = false; var rook = new Rook(new Square(1, 1), board, PieceColor.White); rook.PositionUpdated += (s, p) => moved = true; rook.MoveTo(newPos); Assert.That(moved, Is.True); }
public void Kings_CannotCastleRook_IfRookHasMovedBefore() { var board = new Board(); var king = new King(Player.White); board.AddPiece(Square.At(7, 5), king); var rook = new Rook(Player.White); board.AddPiece(Square.At(4, 0), rook); rook.MoveTo(board, new Square(7, 0)); var moves = king.GetAvailableMoves(board); moves.Should().NotContain(Square.At(7, 3)); }
void AddCastling(King from, GridIndex to) { var castlingSeq = from.QueryCastling(board, out var bQueenSide, out var bKingSide); castlingSeq.Build(board, MoveType.StandardMove); if (castlingSeq.ContainsMove(to)) { var kingX = from.CellIndex.X; var kingY = from.CellIndex.Y; Rook rook = null; GridIndex rookFrom; GridIndex rookTo; if (to.X > kingX && bKingSide) { rookFrom = new GridIndex(7, kingY); rook = board[rookFrom] as Rook; rookTo = to + new GridIndex(-1, 0); } else if (to.X < kingX && bQueenSide) { rookFrom = new GridIndex(0, kingY); rook = board[rookFrom] as Rook; rookTo = to + new GridIndex(+1, 0); } else { throw new Exception("Unspecified exception"); } if (rook != null) { var fromIndex = from.CellIndex; var kingAction = from.MoveTo(to); var rookAction = rook.MoveTo(rookTo); undoStack.Push(ActionCommand.SimpleMove(kingAction, rookAction)); redoStack.Clear(); GenericAction(); board.Turnover(); } } }
public void BlackPawns_CanNotEnPassant_IfPieceIsNotPawn() { var board = new Board(); var pawn = new Pawn(Player.Black); board.AddPiece(Square.At(4, 3), pawn); var enemyUnit = new Rook(Player.White); board.AddPiece(Square.At(5, 4), enemyUnit); enemyUnit.MoveTo(board, Square.At(4, 4)); var moves = pawn.GetAvailableMoves(board).ToList(); moves.Should().NotContain(Square.At(5, 4)); moves.Should().NotContain(Square.At(5, 6)); }
public void BlackPawn_CannotTakeEnPassant_IfWhitePawnHasNotJustMovedToPosition() { var board = new Board(); var whitePawn = new Pawn(Player.White); var whiteRook = new Rook(Player.White); var blackPawn = new Pawn(Player.Black); var blackRook = new Rook(Player.Black); board.AddPiece(Square.At(6, 3), whitePawn); board.AddPiece(Square.At(2, 3), whiteRook); board.AddPiece(Square.At(4, 4), blackPawn); board.AddPiece(Square.At(4, 0), blackRook); whitePawn.MoveTo(board, Square.At(4, 3)); blackRook.MoveTo(board, Square.At(0, 0)); whiteRook.MoveTo(board, Square.At(0, 3)); var moves = blackPawn.GetAvailableMoves(board).ToList(); moves.Should().NotContain(Square.At(5, 3)); }