Exemplo n.º 1
0
        public void UndoMove(Position origin, Position destiny, Piece capturedPiece)
        {
            Piece p = Board.RemovePiece(destiny);

            p.DecrementMoves();
            if (capturedPiece != null)
            {
                Board.PutPiece(capturedPiece, destiny);
                Captured.Remove(capturedPiece);
            }
            Board.PutPiece(p, origin);

            //Little Castle
            if (p is King && destiny.Column == origin.Column + 2)
            {
                Position rookOrigin  = new Position(origin.Row, origin.Column + 3);
                Position rookDestiny = new Position(origin.Row, origin.Column + 1);
                Piece    R           = Board.RemovePiece(rookDestiny);
                R.DecrementMoves();
                Board.PutPiece(R, rookOrigin);
            }
            //Big Castle
            if (p is King && destiny.Column == origin.Column - 2)
            {
                Position rookOrigin  = new Position(origin.Row, origin.Column - 4);
                Position rookDestiny = new Position(origin.Row, origin.Column - 1);
                Piece    R           = Board.RemovePiece(rookDestiny);
                R.DecrementMoves();
                Board.PutPiece(R, rookOrigin);
            }
            //En Passant
            if (p is Pawn)
            {
                if (origin.Column != destiny.Column && capturedPiece == vulnerableEnPassant)
                {
                    Position posP;
                    Piece    pawn = Board.RemovePiece(destiny);
                    if (p.Color == Color.White)
                    {
                        posP = new Position(3, destiny.Column);
                    }
                    else
                    {
                        posP = new Position(4, destiny.Column);
                    }
                    Board.PutPiece(pawn, posP);
                }
            }
        }