예제 #1
0
        public void UndoMovement(Position origin, Position destination, Piece capturedPiece)
        {
            Piece p = Gameboard.RemovePiece(destination);

            p.DecrementMovementsQty();
            if (capturedPiece != null)
            {
                Gameboard.PlacePiece(capturedPiece, destination);
                captures.Remove(capturedPiece);
            }
            Gameboard.PlacePiece(p, origin);


            // Special Movement Castling Short
            if (p is King && destination.Column == origin.Column + 2)
            {
                Position originT      = new Position(origin.Row, origin.Column + 3);
                Position destinationT = new Position(origin.Row, origin.Column + 1);
                Piece    T            = Gameboard.RemovePiece(destinationT);
                T.DecrementMovementsQty();
                Gameboard.PlacePiece(T, originT);
            }

            // Special Movement Castling Long
            if (p is King && destination.Column == origin.Column - 2)
            {
                Position originT      = new Position(origin.Row, origin.Column - 4);
                Position destinationT = new Position(origin.Row, origin.Column - 1);
                Piece    T            = Gameboard.RemovePiece(destinationT);
                T.DecrementMovementsQty();
                Gameboard.PlacePiece(T, originT);
            }

            // Special Movement En passant
            if (p is Pawn)
            {
                if (origin.Column != destination.Column && capturedPiece == enPassantVulnerable)
                {
                    Piece    pawn = Gameboard.RemovePiece(destination);
                    Position posP;
                    if (p.Color == Color.White)
                    {
                        posP = new Position(3, destination.Column);
                    }
                    else
                    {
                        posP = new Position(4, destination.Column);
                    }
                    Gameboard.PlacePiece(pawn, posP);
                }
            }
        }