Ejemplo n.º 1
0
        public void UndoMove(Position source, Position target, Piece capturedPiece)
        {
            Piece p = Board.RemovePiece(target);

            p.DecreaseMove();
            if (capturedPiece != null)
            {
                Board.PlacePiece(capturedPiece, target);
                CapturedPieces.Remove(capturedPiece);
            }
            Board.PlacePiece(p, source);

            // #specialMove kingside Castling
            if (p is King && target.Column == source.Column + 2)
            {
                Position sourceR = new Position(source.Row, source.Column + 3);
                Position targetR = new Position(source.Row, source.Column + 1);

                Piece R = Board.RemovePiece(targetR);
                R.DecreaseMove();
                Board.PlacePiece(R, sourceR);
            }

            // #specialMove queenside Castling
            if (p is King && target.Column == source.Column - 2)
            {
                Position sourceR = new Position(source.Row, source.Column - 4);
                Position targetR = new Position(source.Row, source.Column - 1);

                Piece R = Board.RemovePiece(targetR);
                R.DecreaseMove();
                Board.PlacePiece(R, sourceR);
            }

            // #specialMove EnPassant
            {
                if (p is Pawn && source.Column != target.Column && capturedPiece == EnPassantVulnerable)
                {
                    Piece    pawn = Board.RemovePiece(target);
                    Position posP;
                    if (p.Color == Color.White)
                    {
                        posP = new Position(3, target.Column);
                    }
                    else
                    {
                        posP = new Position(4, target.Column);
                    }

                    Board.PlacePiece(pawn, posP);
                    //CapturedPieces.Remove(capturedPiece);
                }
            }
        }