public string Execute( ref KifuParserA_Result result, Model_Taikyoku model_Taikyoku, out KifuParserA_State nextState, KifuParserA owner, KifuParserA_Genjo genjo ) { nextState = this; if (genjo.InputLine.StartsWith("startpos")) { // 平手の初期配置です。 //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> #if DEBUG Logger.Trace($"(^△^)「{genjo.InputLine}」vs【{this.GetType().Name}】 : 平手のようなんだぜ☆"); #endif genjo.InputLine = genjo.InputLine.Substring("startpos".Length); genjo.InputLine = genjo.InputLine.Trim(); //---------------------------------------- // 棋譜を空っぽにし、平手初期局面を与えます。 //---------------------------------------- { model_Taikyoku.Kifu.Clear();// 棋譜を空っぽにします。 model_Taikyoku.Kifu.GetRoot().Value.SetKyokumen( SkyConst.NewInstance(Util_SkyWriter.New_Hirate(Playerside.P1), 0 //初期配置は 0手目済み。) )); //SFENのstartpos解析時 model_Taikyoku.Kifu.SetProperty(Word_KifuTree.PropName_Startpos, "startpos"); //平手の初期局面 } nextState = KifuParserA_StateA1a_SfenStartpos.GetInstance(); } else { //#if DEBUG // : 局面の指定のようなんだぜ☆ 対応していない☆? Logger.Error($"(^△^)ここはスルーして次に状態遷移するんだぜ☆\n「{genjo.InputLine}」vs【{this.GetType().Name}】"); //#endif nextState = KifuParserA_StateA1b_SfenLnsgkgsnl.GetInstance(); } return(genjo.InputLine); }
/// <summary> /// 棋譜データを元に、符号リスト1(*1)を出力します。 /// /// *1…「▲2六歩△8四歩▲7六歩」といった書き方。 /// /// /// FIXME: 将棋GUII には要るものの、将棋エンジンには要らないはず。 /// /// </summary> /// <param name="fugoList"></param> public static string ToJsaFugoListString( KifuTree src_kifu, string hint ) { StringBuilder sb = new StringBuilder(); sb.Append("position "); sb.Append(src_kifu.GetProperty(Word_KifuTree.PropName_Startpos)); sb.Append(" moves "); // 採譜用に、新しい対局を用意します。 KifuTree saifuKifu; { saifuKifu = new KifuTreeImpl( new KifuNodeImpl( Util_Sky258A.RootMove, new KyokumenWrapper(Util_SkyWriter.New_Hirate(Playerside.P1)) //日本の符号読取時 ) ); saifuKifu.Clear(); // 棋譜を空っぽにします。 saifuKifu.SetProperty(Word_KifuTree.PropName_Startpos, "startpos"); //平手の初期局面 // FIXME:平手とは限らないのでは? } src_kifu.ForeachHonpu(src_kifu.CurNode, (int temezumi, KyokumenWrapper kWrap, Node <IMove, KyokumenWrapper> node, ref bool toBreak) => { if (0 == temezumi) { // 初期局面はスキップします。 goto gt_EndLoop; } //------------------------------ // 符号の追加(記録係) //------------------------------ KyokumenWrapper saifu_kWrap = saifuKifu.CurNode.Value; // 採譜用新ノード KifuNode saifu_newChild = new KifuNodeImpl( node.Key, new KyokumenWrapper(SkyConst.NewInstance_ReversePside( saifu_kWrap.KyokumenConst, temezumi//FIXME:合ってるのかどうか。 )) ); // 記録係り用棋譜(採譜) UtilKifuTree282.AppendChild_And_ChangeCurrentToChild(saifuKifu, saifu_newChild, $"{hint}/ToJsaKifuText");// 新しい次ノードを追加。次ノードを、これからカレントとする。 // 後手の符号がまだ含まれていない。 string jsaFugoStr = ConvMoveStrJsa.ToMoveStrJsa(saifu_newChild //saifu_newChild.Value, ); //sb.Append(Conv_MoveStr_Jsa.ToMoveStr_Jsa(node, saifu_kWrap)); sb.Append(jsaFugoStr); gt_EndLoop: ; }); return(sb.ToString()); }