Пример #1
0
        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)));
        }
Пример #2
0
        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);
        }