Exemple #1
0
        public Game()
        {
            this.Kifu = new KifuTreeImpl(
                new KifuNodeImpl(
                    Util_Sky.NullObjectMove,
                    new KyokumenWrapper(new SkyConst(Util_Sky.New_Hirate())),// きふわらべ起動時 // FIXME:平手とは限らないが。
                    Playerside.P2
                    )
                );

            this.Kifu.SetProperty(KifuTreeImpl.PropName_FirstPside, Playerside.P1);
            this.Kifu.SetProperty(KifuTreeImpl.PropName_Startpos, "startpos"); // 平手 // FIXME:平手とは限らないが。

            this.TesumiCount = 0;                                              // n手目
            this.GoPonderNow = false;                                          // go ponderを将棋所に伝えたなら真
        }
Exemple #2
0
        /// <summary>
        /// [初期配置]ボタン
        /// </summary>
        public static void Perform_SyokiHaichi(
            Ui_PnlMain ui_PnlMain
            )
        {
            ui_PnlMain.ShogiGui.GameViewModel.Kifu.Clear();                                                 // 棋譜を空っぽにします。
            ui_PnlMain.ShogiGui.GameViewModel.Kifu.SetProperty(KifuTreeImpl.PropName_Startpos, "startpos"); //平手の初期局面

            KifuNode newNode = new KifuNodeImpl(
                Util_Sky.NullObjectMove,                        //ルートなので
                new KyokumenWrapper(Util_Sky.New_Hirate()),     //[初期配置]ボタン押下時
                KifuNodeImpl.GetReverseTebanside(((KifuNode)ui_PnlMain.ShogiGui.GameViewModel.Kifu.CurNode).Tebanside)
                );

            // ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
            // ここで棋譜の変更をします。
            // ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
            Util_InServer.SetCurNode_Srv(ui_PnlMain.ShogiGui, newNode);
            ui_PnlMain.ShogiGui.ResponseData.ToRedraw();

            ui_PnlMain.ShogiGui.ResponseData.RedrawStarlights();// 駒の再描画要求
            ui_PnlMain.ShogiGui.ResponseData.OutputTxt = ResponseGedanTxt.Clear;
            ui_PnlMain.ShogiGui.ResponseData.ToRedraw();
        }
Exemple #3
0
        public string Execute(
            ref KifuParserA_Result result,
            IRoomViewModel roomViewModel,
            out KifuParserA_State nextState,
            KifuParserA owner,
            KifuParserA_Genjo genjo
            )
        {
            nextState = this;

            if (genjo.InputLine.StartsWith("startpos"))
            {
                // 平手の初期配置です。
                //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

                Logger.Trace("(^△^)「" + genjo.InputLine + "」vs【" + this.GetType().Name + "】 : 平手のようなんだぜ☆");

                genjo.InputLine = genjo.InputLine.Substring("startpos".Length);
                genjo.InputLine = genjo.InputLine.Trim();

                {
                    roomViewModel.GameViewModel.Kifu.Clear();                                                          // 棋譜を空っぽにします。

                    roomViewModel.GameViewModel.Kifu.GetRoot().Value.SetKyokumen(new SkyConst(Util_Sky.New_Hirate())); //SFENのstartpos解析時
                    roomViewModel.GameViewModel.Kifu.SetProperty(KifuTreeImpl.PropName_Startpos, "startpos");          //平手の初期局面
                }

                nextState = KifuParserA_StateA1a_SfenStartpos.GetInstance();
            }
            else
            {
                Logger.Trace("(^△^)「" + genjo.InputLine + "」vs【" + this.GetType().Name + "】 : 局面の指定のようなんだぜ☆");
                nextState = KifuParserA_StateA1b_SfenLnsgkgsnl.GetInstance();
            }

            return(genjo.InputLine);
        }
Exemple #4
0
        /// <summary>
        /// 棋譜データを元に、符号リスト1(*1)を出力します。
        ///
        ///     *1…「▲2六歩△8四歩▲7六歩」といった書き方。
        ///
        /// </summary>
        /// <param name="fugoList"></param>
        public static string ToJapaneseKifuText(
            KifuTree kifu
            )
        {
            StringBuilder sb = new StringBuilder();

            sb.Append("position ");

            sb.Append(kifu.GetProperty(KifuTreeImpl.PropName_Startpos));
            sb.Append(" moves ");

            // 採譜用に、新しい対局を用意します。
            KifuTree saifuKifu;

            {
                saifuKifu = new KifuTreeImpl(
                    new KifuNodeImpl(
                        Util_Sky.NullObjectMove,
                        new KyokumenWrapper(new SkyConst(Util_Sky.New_Hirate())),    //日本の符号読取時
                        Playerside.P2
                        )
                    );
                saifuKifu.Clear();// 棋譜を空っぽにします。

                saifuKifu.SetProperty(KifuTreeImpl.PropName_FirstPside, Playerside.P1);
                saifuKifu.SetProperty(KifuTreeImpl.PropName_Startpos, "startpos");//平手の初期局面 // FIXME:平手とは限らないのでは?
            }


            kifu.ForeachHonpu(kifu.CurNode, (int tesumi, KyokumenWrapper kWrap, Node <ShootingStarlightable, KyokumenWrapper> node6, ref bool toBreak) =>
            {
                if (0 == tesumi)
                {
                    goto gt_EndLoop;
                }


                FugoJ fugo;

                //------------------------------
                // 符号の追加(記録係)
                //------------------------------
                KyokumenWrapper saifu_kWrap = saifuKifu.CurNode.Value;

                KifuNode newNode = new KifuNodeImpl(
                    node6.Key,
                    new KyokumenWrapper(saifu_kWrap.ToKyokumenConst),
                    KifuNodeImpl.GetReverseTebanside(((KifuNode)saifuKifu.CurNode).Tebanside)
                    );

                // TODO: ↓?
                ((KifuNode)saifuKifu.CurNode).AppendChildA_New(newNode);
                saifuKifu.CurNode = newNode;

                RO_Star_Koma koma = Util_Koma.AsKoma(((ShootingStarlightable)node6.Key).LongTimeAgo);

                fugo = JFugoCreator15Array.ItemMethods[(int)Haiyaku184Array.Syurui(koma.Haiyaku)](node6.Key, saifu_kWrap);//「▲2二角成」なら、馬(dst)ではなくて角(src)。

                sb.Append(fugo.ToText_UseDou(node6));

                gt_EndLoop:
                ;
            });

            return(sb.ToString());
        }
Exemple #5
0
        /// <summary>
        /// 起動直後の流れです。
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Ui_PnlMain_Load(object sender, EventArgs e)
        {
            this.setteiFile = new SetteiFile();
            if (!this.SetteiFile.Exists())
            {
                // ファイルが存在しませんでした。

                // 作ります。
                this.SetteiFile.Write();
            }

            if (!this.SetteiFile.Read())
            {
                // 読取に失敗しました。
            }

            // デバッグ
            this.SetteiFile.DebugWrite();


            //----------
            // 棋譜
            //----------
            //
            //      先後や駒など、対局に用いられる事柄、物を事前準備しておきます。
            //

            //----------
            // 駒の並べ方
            //----------
            //
            //      平手に並べます。
            //
            {
                this.ShogiGui.GameViewModel.Kifu.Clear();                                                 // 棋譜を空っぽにします。
                this.ShogiGui.GameViewModel.Kifu.SetProperty(KifuTreeImpl.PropName_Startpos, "startpos"); //平手の初期局面
                this.ShogiGui.GameViewModel.SetGuiSky(
                    Util_Sky.New_Hirate()                                                                 //起動直後
                    );
            }


            this.ShogiGui.GameViewModel.Kifu.SetProperty(KifuTreeImpl.PropName_FirstPside, Playerside.P1);



            // 全駒の再描画
            this.ShogiGui.ResponseData = new ResponseImpl();
            this.ShogiGui.ResponseData.RedrawStarlights();

            //----------
            // フェーズ
            //----------
            this.ShogiGui.SetScene(SceneName.SceneB_1TumamitaiKoma);

            //----------
            // 監視
            //----------
            this.gameEngineTimer1.Start();

            //----------
            // 将棋エンジンが、コンソールの振りをします。
            //----------
            //
            //      このメインパネルに、コンソールの振りをさせます。
            //      将棋エンジンがあれば、将棋エンジンの入出力を返すように内部を改造してください。
            //
            TextboxListener.SetTextboxListener(this.ReadLine1, this.WriteLine_Syuturyoku);


            //----------
            // 画面の出力欄
            //----------
            //
            //      出力欄(上下段)を空っぽにします。
            //
            this.WriteLine_Syuturyoku("");



            this.ShogiGui.Response("Launch");

            // これで、最初に見える画面の準備は終えました。
            // あとは、操作者の入力を待ちます。
        }