示例#1
0
        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);
        }
示例#2
0
        /// <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());
        }