private void UndoMove(Position source, Position target, Piece capturedPiece) { Piece p = Board.RemovePiece(target); p.DecreaseMoveCount(); if (capturedPiece != null) { Board.PlacePiece(capturedPiece, target); Captured.Remove(capturedPiece); } Board.PlacePiece(p, source); // #Special move - Castling - Kingside Rook if (p is King && target.Column == source.Column + 2) { Position rookSource = new Position(source.Row, source.Column + 3); Position rookTarget = new Position(source.Row, source.Column + 1); Piece rook = Board.RemovePiece(rookTarget); rook.DecreaseMoveCount(); Board.PlacePiece(rook, rookSource); } // #Special move - Castling - Queenside Rook if (p is King && target.Column == source.Column - 2) { Position rookSource = new Position(source.Row, source.Column - 4); Position rookTarget = new Position(source.Row, source.Column - 1); Piece rook = Board.RemovePiece(rookTarget); rook.DecreaseMoveCount(); Board.PlacePiece(rook, rookSource); } // #Special move - En Passant if (p is Pawn) { if (source.Column != target.Column && capturedPiece == EnPassantVulnerable) { Piece pawn = Board.RemovePiece(target); Position pawnPosition; if (p.Color == Color.White) { pawnPosition = new Position(3, target.Column); } else { pawnPosition = new Position(4, target.Column); } Board.PlacePiece(pawn, pawnPosition); } } }