public static bool ParseDoMove(Kyokumen ky, out Move out_sasite) { // コンソールからのキー入力を解析するぜ☆(^▽^) int caret = Util_Commandline.Caret; int oldCaret = Util_Commandline.Caret; Util_String.TobasuTangoToMatubiKuhaku(Util_Commandline.Commandline, ref caret, "do "); // うしろに続く文字は☆(^▽^) if (!Med_Parser.TryFenMove(Option_Application.Optionlist.USI, Util_Commandline.Commandline, ref caret, ky.Sindan, out out_sasite)) { Util_Commandline.Caret = oldCaret; //String2 str = new String2Impl(); //str.Append("指し手のパースに失敗だぜ☆(^~^)! #鷺 commandline=["); //str.Append(commandline); //str.Append("] caret=["); //str.Append(caret); //str.Append("]"); //syuturyoku.AppendLine(str.ToString()); //Logger.Flush(); //throw new Exception(str.ToString()); return(false); } // do コマンドだった場合☆ Util_Commandline.Caret = caret; Util_Commandline.CommentCommandline();// コマンドの誤発動防止 return(true); }
public static void Undo(string commandline, Kyokumen ky, StringBuilder syuturyoku) { // うしろに続く文字は☆(^▽^) int caret = 0; Util_String.TobasuTangoToMatubiKuhaku(commandline, ref caret, "undo "); if (!Med_Parser.TryFenMove(Option_Application.Optionlist.USI, commandline, ref caret, ky.Sindan, out Move ss)) { throw new Exception($"パースエラー [{ commandline }]"); } ky.UndoMove(Option_Application.Optionlist.USI, ss, syuturyoku); // このムーブには取った駒は含まれないのでは。 }
/// <summary> /// moves 以降の符号を指定しろだぜ☆(^~^) /// </summary> /// <param name="moves"></param> public void AddMoves(bool isSfen, string moves, Kyokumen.Sindanyo kys) { string[] fugoItiran = moves.Split(' '); foreach (string fugo in fugoItiran) { int caret = 0; if (!Med_Parser.TryFenMove(isSfen, fugo, ref caret, kys, out Move move)) { throw new System.Exception($"指し手のパースエラー fugo=[{ fugo }]"); } SsList.Add(move); } }
public static bool TryParse(Kyokumen ky, string commandline, ref int caret, out SeisekiMove out_result, SeisekiKyokumen owner, StringBuilder syuturyoku) { bool successfule = true; // 指し手☆ if (!Med_Parser.TryFenMove(Option_Application.Optionlist.USI, commandline, ref caret, ky.Sindan, out Move ss)) { successfule = false; } // 応手☆ if (!Med_Parser.TryFenMove(Option_Application.Optionlist.USI, commandline, ref caret, ky.Sindan, out Move ss2)) { successfule = false; } // バージョン(これは無いこともある☆ 評価値のパーサーを使いまわし) if (!Conv_Hyokati.TryParse(commandline, ref caret, out int version, syuturyoku)) { version = 0; //successfule = false; } // 勝った回数(評価値のパーサーを使いまわし) if (!Conv_Hyokati.TryParse(commandline, ref caret, out int kati, syuturyoku)) { successfule = false; } // 引き分けた回数 if (!Conv_Hyokati.TryParse(commandline, ref caret, out int hikiwake, syuturyoku)) { successfule = false; } // 負けた回数 if (!Conv_Hyokati.TryParse(commandline, ref caret, out int make, syuturyoku)) { successfule = false; } out_result = new SeisekiMove(ss, ss2, version, kati, hikiwake, make, owner); return(successfule); }
public static bool MoveCmd(string commandline, Kyokumen.Sindanyo kys, out Move out_sasite) { // うしろに続く文字は☆(^▽^) int caret = 0; Util_String.TobasuTangoToMatubiKuhaku(commandline, ref caret, "move "); string line = commandline.Substring(caret).Trim(); // move 912 といった数字かどうか☆(^~^) if (int.TryParse(line, out int ssSuji)) { out_sasite = (Move)ssSuji; return(true); } // 数字でなければ、 move B2B3 といった文字列か☆(^~^) if (Med_Parser.TryFenMove(Option_Application.Optionlist.USI, commandline, ref caret, kys, out out_sasite)) { return(true); } out_sasite = Move.Toryo; return(false); }