Ejemplo n.º 1
0
 /// <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);
     }
 }
Ejemplo n.º 2
0
        /// <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");
        }