Beispiel #1
0
        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);
        }
Beispiel #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());
        }