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