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); }
/// <summary> /// 対局終了 /// </summary> public static void DoTejun5_SyuryoTaikyoku1(IPlaying playing, Kyokumen ky, StringBuilder syuturyoku) { // 表示(コンソール・ゲーム用) { playing.Result(ky, syuturyoku, CommandMode.NingenYoConsoleGame); syuturyoku.AppendLine("終わったぜ☆(^▽^)"); Logger.Flush(syuturyoku.ToString()); syuturyoku.Clear(); } Util_Application.Begin_SeisekiKosin(syuturyoku); // 決着から初期局面まで、逆順で戻しながら棋譜を記録するぜ☆(^▽^) Med_Kyokumen.TukuruKifu(Option_Application.Optionlist.USI, ky, syuturyoku); // 棋譜の初期局面を更新☆ { StringBuilder kyFen_temp = new StringBuilder(); ky.AppendFenTo(Option_Application.Optionlist.USI, kyFen_temp); Option_Application.Kifu.SyokiKyokumenFen = kyFen_temp.ToString(); } Util_Application.End_SeisekiKosin(syuturyoku); string kigoComment = ""; // TODO: 成績は保存しないにしても、棋譜は欲しいときもあるぜ☆(^~^) // 棋譜を作ろうぜ☆ syuturyoku.AppendLine($@"{kigoComment}感想戦を行う場合は kansosen と打てだぜ☆(^▽^) そのあと kifu 1 とか打て☆(^▽^) {kigoComment}終わるときは hirate な☆(^▽^)"); Logger.Flush(syuturyoku.ToString()); syuturyoku.Clear(); // 保存していないものを保存だぜ☆(^▽^) Util_Application.FlushAll1(syuturyoku); // 初期局面に戻すぜ☆(^▽^) Util_Taikyoku.Clear(); Util_Application.ResetHirate(Option_Application.Optionlist.USI, ky, syuturyoku); if (Option_Application.Optionlist.RandomStart) { playing.Ky(Option_Application.Optionlist.USI, "ky mazeru", ky, syuturyoku); } if (Option_Application.Optionlist.RandomStartTaikyokusya) { playing.Taikyokusya_cmd("taikyokusya mazeru", ky, syuturyoku); } if (Util_Machine.IsRenzokuTaikyokuStop()) { // 連続対局を止めるぜ☆(^▽^) Option_Application.Optionlist.RenzokuTaikyoku = false; syuturyoku.AppendLine($"{Logger.RenzokuTaikyokuStopFile }> done"); } if (!Option_Application.Optionlist.RenzokuTaikyoku) { // ゲームモードを解除するぜ☆(^~^) if (GameMode.Game == Util_Application.GameMode)// 感想戦での発動防止☆ { Util_Application.GameMode = GameMode.Karappo; } } else { // 連続対局中☆(^~^) if (Option_Application.Optionlist.RenzokuRandomRule && // 連続対局中、ルールをランダムに変える設定で 0 == Option_Application.Random.Next(2) && // ランダムに Util_Application.IsTimeOver_RenzokuRandomRule() // 変更間隔が空いているとき ) { // ルールを変えるぜ☆(^▽^) string commandline_2 = $"set SagareruHiyoko {!Option_Application.Optionlist.SagareruHiyoko}"; syuturyoku.AppendLine($"RenzokuRandomRule> {commandline_2}"); Logger.Flush(syuturyoku.ToString()); syuturyoku.Clear(); // 表示してから実行しようぜ☆(^~^) Util_Application.Set(commandline_2, ky, syuturyoku); Util_Application.Restart_RenzokuRandomRuleTimeSpan();// 変更間隔の再調整だぜ☆(^▽^) } } if (Option_Application.Optionlist.RandomCharacter) { // コンピューター対局者の性格は ころころ変えるぜ☆(^▽^) for (int iPhase = 0; iPhase < Conv_Taikyokusya.AllOptionalPhaseList.Length; iPhase++) { Option_Application.Optionlist.PNChar[iPhase] = AbstractConvMoveCharacter.Items[Option_Application.Random.Next(AbstractConvMoveCharacter.Items.Length)]; } } // コマンドの誤発動防止 Util_Commandline.CommentCommandline(); }