コード例 #1
0
        public void UndoMove(Position origin, Position destination, Piece captured)
        {
            Piece piece = Board.RemovePiece(destination);

            piece.DecrementMovimentsQuantity();
            if (captured != null)
            {
                Board.InsertPiece(captured, destination);
                _capturedPieces.Remove(captured);
            }
            Board.InsertPiece(piece, origin);

            // #SpecialMove Castling Short
            if (piece is King && destination.Column == origin.Column + 2)
            {
                Position RookOrigin      = new Position(origin.Line, origin.Column + 3);
                Position RookDestination = new Position(origin.Line, origin.Column + 1);
                Piece    Rook            = Board.RemovePiece(RookDestination);
                Rook.DecrementMovimentsQuantity();
                Board.InsertPiece(Rook, RookOrigin);
            }

            // #SpecialMove Castling Long
            if (piece is King && destination.Column == origin.Column - 2)
            {
                Position RookOrigin      = new Position(origin.Line, origin.Column - 4);
                Position RookDestination = new Position(origin.Line, origin.Column - 1);
                Piece    Rook            = Board.RemovePiece(RookDestination);
                Rook.DecrementMovimentsQuantity();
                Board.InsertPiece(Rook, RookOrigin);
            }

            // #SpecialMove En Passant
            if (piece is Pawn)
            {
                if (origin.Column != destination.Column && captured == EnPassantVulnerable)
                {
                    Piece    pawn = Board.RemovePiece(destination);
                    Position pawnPosition;
                    if (piece.Color == Color.White)
                    {
                        pawnPosition = new Position(3, destination.Column);
                    }
                    else
                    {
                        pawnPosition = new Position(4, destination.Column);
                    }
                    Board.InsertPiece(pawn, pawnPosition);
                }
            }
        }