/// <summary> /// ************************************************************************************************************************ /// 1手進む /// ************************************************************************************************************************ /// /// <棋譜読込用><マウス入力非対応> /// /// 「棋譜並べモード」と「vsコンピューター対局」でも、これを使いますが、 /// 「棋譜並べモード」では送られてくる SFEN が「position startpos moves 8c8d」とフルであるのに対し、 /// 「vsコンピューター対局」では、送られてくる SFEN が「8c8d」だけです。 /// /// それにより、処理の流れが異なります。 /// /// </summary> public static bool ReadLine_TuginoItteSusumu_Srv( ref string inputLine, Model_Taikyoku model_Taikyoku,//SetCurNodeがある。[コマ送り][再生]などで使用。 Model_Manual model_Manual, out bool toBreak, string hint , [CallerMemberName] string memberName = "", [CallerFilePath] string sourceFilePath = "", [CallerLineNumber] int sourceLineNumber = 0 ) { //IErrorController logTag = OwataMinister.SERVER_KIFU_YOMITORI; bool successful = false; KifuParserA_Impl kifuParserA_Impl = new KifuParserA_Impl(); KifuParserA_Result result = new KifuParserA_ResultImpl(); KifuParserA_Genjo genjo = new KifuParserA_GenjoImpl(inputLine); try { if (kifuParserA_Impl.State is KifuParserA_StateA0_Document) { // 最初はここ #if DEBUG Logger.Trace("(^o^)... ..."); Logger.Trace($"サイショハココ☆ : {memberName}.{sourceFilePath}.{sourceLineNumber}"); #endif inputLine = kifuParserA_Impl.Execute_Step( ref result, model_Taikyoku, genjo ); Debug.Assert(result.Out_newNode_OrNull == null, "ここでノードに変化があるのはおかしい。"); if (genjo.IsBreak()) { goto gt_EndMethod; } // (1)position コマンドを処理しました。→startpos // (2)日本式棋譜で、何もしませんでした。→moves } if (kifuParserA_Impl.State is KifuParserA_StateA1_SfenPosition) { //------------------------------------------------------------ // このブロックでは「position ~ moves 」まで一気に(*1)を処理します。 //------------------------------------------------------------ // // *1…初期配置を作るということです。 // { #if DEBUG string message = $"(^o^)ツギハ ヒラテ マタハ シテイキョクメン ヲ ショリシタイ☆ inputLine=[{inputLine}]"; Logger.Trace(message); #endif inputLine = kifuParserA_Impl.Execute_Step( ref result, model_Taikyoku, genjo ); Debug.Assert(result.Out_newNode_OrNull == null, "ここでノードに変化があるのはおかしい。"); if (genjo.IsBreak()) { goto gt_EndMethod; } } { #if DEBUG Logger.Trace("(^o^)ツギハ ムーブス ヲ ショリシタイ☆"); #endif inputLine = kifuParserA_Impl.Execute_Step( ref result, model_Taikyoku, genjo ); Debug.Assert(result.Out_newNode_OrNull == null, "ここでノードに変化があるのはおかしい。"); if (genjo.IsBreak()) { goto gt_EndMethod; } // moves を処理しました。 // ここまでで、「position ~ moves 」といった記述が入力されていたとすれば、入力欄から削除済みです。 } // →moves } // // 対COMP戦で関係があるのはここです。 // if (kifuParserA_Impl.State is KifuParserA_StateA2_SfenMoves) { #if DEBUG Logger.Trace("ツギハ イッテ ショリシタイ☆"); #endif inputLine = kifuParserA_Impl.Execute_Step( ref result, model_Taikyoku, genjo ); if (null != result.Out_newNode_OrNull) { string jsaFugoStr; Util_Functions_Server.SetCurNode_Srv(model_Taikyoku, model_Manual, result.Out_newNode_OrNull, out jsaFugoStr); } if (genjo.IsBreak()) { goto gt_EndMethod; } // 1手を処理した☆? } if (null != genjo.StartposImporter_OrNull) { // 初期配置が平手でないとき。 // ************************************************************************************************************************ // SFENの初期配置の書き方(*1)を元に、駒を並べます。 // ************************************************************************************************************************ // // *1…「position startpos moves 7g7f 3c3d 2g2f」といった書き方。 // ParsedKyokumen parsedKyokumen = Conv_StartposImporter.ToParsedKyokumen( model_Manual, genjo.StartposImporter_OrNull,//指定されているはず。 genjo ); //------------------------------ // 駒の配置 //------------------------------ string jsaFugoStr; Util_Functions_Server.SetCurNode_Srv(model_Taikyoku, model_Manual, parsedKyokumen.KifuNode, out jsaFugoStr);// GUIに通知するだけ。 ////------------------------------ //// 駒を、駒袋から駒台に移動させます。 ////------------------------------ //model_Operating.Manual.SetGuiSky( // SkyConst.NewInstance( // parsedKyokumen.buffer_Sky, // -1//そのまま // ) //); } successful = true; } catch (Exception ex) { Util_Message.Show($"{ex}"); toBreak = true; successful = false; } gt_EndMethod: toBreak = genjo.IsBreak(); return(successful); }