public Json_Val ToJsonVal(NodeImpl <T1, T2> node) { Json_Obj obj = new Json_Obj(); KyokumenWrapper kWrap = node.Value as KyokumenWrapper; if (null != kWrap) { // TODO: ログが大きくなるので、1行で出力したあとに改行にします。 Json_Prop prop = new Json_Prop("kyokumen", Util_Sky307.ToJsonVal(kWrap.KyokumenConst)); obj.Add(prop); } else { Debug.Fail("this.Value as KyokumenWrapper じゃなかった。"); } return(obj); }
/// <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()); }