public static CastlingEvaluationResult EvaluateCastling(Board board, PieceMovement pieceMovement) { Square rookSquare = FindRookSquare(board, pieceMovement); int fileOffset = rookSquare.Position.File == "H" ? -2 : 3; return(CastlingEvaluationResult.Create(rookSquare.Piece, Position.Create(rookSquare.Position.Id), Position.Create(rookSquare.Position.FileIndex + fileOffset, rookSquare.Position.RankIndex))); }
private void CheckForCastlingAndMove(TurnLog turnLog, PieceMovement pieceMovement) { CastlingMovementSpecification castlingMovementSpecification = CastlingMovementSpecification.Create(this); if (castlingMovementSpecification.IsSatisfied(pieceMovement)) { CastlingEvaluationResult castlingEvaluationResult = CastlingEvaluator.EvaluateCastling(this, pieceMovement); MovePiece(turnLog, PieceMovement.Create(castlingEvaluationResult.Rook, castlingEvaluationResult.From, castlingEvaluationResult.To)); } }
public void Castling_To_Left_Rook_Should_Return_Rook_Movement() { Board board = Board.Create(); Piece whiteKing = Piece.Create(PieceType.King, PieceColor.White); board.AddPiece(whiteKing, "E1"); board.AddPiece(Piece.Create(PieceType.Rook, PieceColor.White), "A1"); CastlingEvaluationResult result = CastlingEvaluator.EvaluateCastling(board, PieceMovement.Create(whiteKing, Position.Create("E1"), Position.Create("C1"))); Assert.IsNotNull(result.Rook); Assert.AreEqual("A1", result.From.Id); Assert.AreEqual("D1", result.To.Id); }