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); } } }