/// <summary> /// Parses a move string from a specified starting position /// (either algebraic or SAN format is accepted). /// </summary> /// <param name="pos"></param> /// <param name="moveStr"></param> /// <returns></returns> public static MGMove ParseMove(MGPosition pos, string moveStr) { if (!TryParseMoveCoordinateOrAlgebraic(pos, moveStr, out MGMove move)) { Position position = MGChessPositionConverter.PositionFromMGChessPosition(in pos); PositionWithMove mfp = SANParser.FromSAN(moveStr, in position); return(MGMoveConverter.MGMoveFromPosAndMove(in position, mfp.Move)); } else { return(move); } }
/// <summary> /// Returns the MGMove corresponding to a given Move. /// </summary> /// <param name="pos"></param> /// <param name="move"></param> /// <returns></returns> public static MGMove MGMoveFromPosAndMove(Position pos, Move move) { PositionWithMove moveAndPos = new PositionWithMove(pos, move); MGPosition mgPos = MGPosition.FromPosition(in moveAndPos.Position); MGMoveList moves = new MGMoveList(); MGMoveGen.GenerateMoves(in mgPos, moves); for (int i = 0; i < moves.NumMovesUsed; i++) { if (moves.MovesArray[i].EqualsMove(move)) { return(moves.MovesArray[i]); } } throw new Exception("Move not found"); }