示例#1
0
        public override void Step()
        {
            // 将棋エンジンからの入力が、input99 に溜まるものとします。
            if (0 < this.mainGui.ConsoleWindowGui.InputString99.Length)
            {
#if DEBUG
                string message = $"(^o^)timer入力 input99=[{this.mainGui.ConsoleWindowGui.InputString99}]";
                Logger.Trace(message);
#endif

                //
                // 棋譜入力テキストボックスに、指し手「(例)6a6b」を入力するための一連の流れです。
                //
                {
                    this.mainGui.RepaintRequest = new RepaintRequestImpl();
                    this.mainGui.RepaintRequest.SetNyuryokuTextTail(this.mainGui.ConsoleWindowGui.InputString99); // 受信文字列を、上部テキストボックスに入れるよう、依頼します。
                    this.mainGui.Response("Timer");                                                               // テキストボックスに、受信文字列を入れます。
                    this.mainGui.ConsoleWindowGui.ClearInputString99();                                           // 受信文字列の要求を空っぽにします。
                }

                //
                // コマ送り
                //
                {
                    string restText = Util_Function_Csharp.ReadLine_FromTextbox();

                    //if ("noop" == restText)
                    //{
                    //    this.mainGui.Link_Server.EngineClient.ShogiEngineProcessWrapper.Send_Ok();
                    //    restText = "";
                    //}

                    Util_Functions_Server.Komaokuri_Srv(
                        ref restText,
                        this.mainGui.Link_Server.Model_Taikyoku,
                        this.mainGui.Model_Manual);                             // 棋譜の[コマ送り]を実行します。
                    Util_Function_Csharp.Komaokuri_Gui(restText, this.mainGui); //追加
                    // ↑チェンジターン済み
                    Util_Menace.Menace((MainGui_Csharp)this.mainGui);           // メナス
                }

                //
                // ここで、テキストボックスには「(例)6a6b」が入っています。
                //

                //
                // 駒を動かす一連の流れです。
                //
                {
                    //this.ShogiGui.ResponseData.InputTextString = "";//空っぽにすることを要求する。
                    this.mainGui.Response("Timer");// GUIに反映させます。
                }
            }
        }
示例#2
0
        public void LaunchForm_AsBody()
        {
            ((Form1_Shogiable)this.OwnerForm).Delegate_Form1_Load = (MainGui_Csharp shogiGui, object sender, EventArgs e) =>
            {
                //
                // ボタンのプロパティを外部ファイルから設定
                //
                foreach (WidgetsLoader widgetsLoader in this.WidgetLoaders)
                {
                    widgetsLoader.Step1_ReadFile();//shogiGui.Shape_PnlTaikyoku
                }

                foreach (WidgetsLoader widgetsLoader in this.WidgetLoaders)
                {
                    widgetsLoader.Step2_Compile_AllWidget(shogiGui);
                }

                foreach (WidgetsLoader widgetsLoader in this.WidgetLoaders)
                {
                    widgetsLoader.Step3_SetEvent(shogiGui);
                }
            };

            this.ReadStyle_ToForm((Form1_Shogiable)this.OwnerForm);

            //
            // FIXME: [初期配置]を1回やっておかないと、[コマ送り]ボタン等で不具合が出てしまう。
            //
            {
                Util_Function_Csharp.Perform_SyokiHaichi(
                    ((Form1_Shogiable)this.OwnerForm).Uc_Form1Main.MainGui
                    );
            }


            Application.Run(this.OwnerForm);
        }
示例#3
0
        /// <summary>
        /// ************************************************************************************************************************
        /// 入力欄の表示・出力欄の表示・再描画
        /// ************************************************************************************************************************
        ///
        /// このメインパネルに何かして欲しいことがあれば、
        /// RequestForMain に要望を入れて、この関数を呼び出してください。
        ///
        /// 同時には処理できない項目もあります。
        /// </summary>
        /// <param name="response"></param>
        public void Solute_RepaintRequest(
            Form1_Mutex mutex, MainGui_Csharp mainGui)
        {
            Uc_Form2Main form2 = ((Form1_Shogi)this.ParentForm).Form2_Console.Uc_Form2Main;

            //------------------------------------------------------------
            // 駒の座標再計算
            //------------------------------------------------------------
            if (mainGui.RepaintRequest.Is_StarlightsRecalculateRequested())
            {
                this.MainGui.Model_Manual.GuiSkyConst.Foreach_Starlights((Finger finger, IMoveHalf light, ref bool toBreak) =>
                {
                    Util_Function_Csharp.Redraw_KomaLocation(finger, this.MainGui);
                });
            }
            mainGui.RepaintRequest.Clear_StarlightsRecalculateRequested();


            //------------------------------
            // 入力欄の表示
            //------------------------------
            if (mainGui.RepaintRequest.IsRequested_RepaintNyuryokuText)
            {
                // 指定のテキストで上書きします。
                form2.SetInputareaText(mainGui.RepaintRequest.NyuryokuText);
            }
            else if (mainGui.RepaintRequest.IsRequested_NyuryokuTextTail)
            {
                // 指定のテキストを後ろに足します。
                form2.AppendInputareaText(mainGui.RepaintRequest.NyuryokuTextTail);
                mainGui.RepaintRequest.SetNyuryokuTextTail("");//要求の解除
            }

            //------------------------------
            // 出力欄(上・下段)の表示
            //------------------------------
            switch (mainGui.RepaintRequest.SyuturyokuRequest)
            {
            case RepaintRequestGedanTxt.Clear:
            {
                // 出力欄(上下段)を空っぽにします。
                form2.WriteLine_Syuturyoku("");

                // ログ
                //Logger.Trace( "");
                //Logger.Trace( "");
            }
            break;

            case RepaintRequestGedanTxt.Kifu:
            {
                // 出力欄(上下段)に、棋譜を出力します。
                switch (this.MainGui.SyuturyokuKirikae)
                {
                case SyuturyokuKirikae.Japanese:
                    form2.WriteLine_Syuturyoku(Util_KirokuGakari.ToJsaFugoListString(this.MainGui.Link_Server.Model_Taikyoku.Kifu, "Ui_PnlMain.Response"));
                    break;

                case SyuturyokuKirikae.Sfen:
                    form2.WriteLine_Syuturyoku(Util_KirokuGakari.ToSfen_PositionCommand(this.MainGui.Link_Server.Model_Taikyoku.Kifu));
                    break;

                case SyuturyokuKirikae.Html:
                    form2.WriteLine_Syuturyoku(Uc_Form1Main.CreateHtml(this.MainGui));
                    break;
                }

#if DEBUG
                // ログ
                Logger.Trace(form2.GetOutputareaText());
#endif
            }
            break;

            default:
                // スルー
                break;
            }

            //------------------------------
            // 再描画
            //------------------------------
            if (mainGui.RepaintRequest.IsRefreshRequested())
            {
                this.Refresh();

                mainGui.RepaintRequest.ClearRefreshRequest();
            }
        }
示例#4
0
        public override void Step()
        {
            // 入っているマウス操作イベントは、全部捨てていきます。
            SaiseiEventState[] queue = this.SaiseiEventQueue.ToArray();
            this.SaiseiEventQueue.Clear();
            foreach (SaiseiEventState eventState in queue)
            {
                switch (eventState.Name2)
                {
                case SaiseiEventStateName.Start:
                {
                    //MessageBox.Show("再生を実行します2。");

                    mainGui.RepaintRequest = new RepaintRequestImpl();

                    this.restText = Util_Function_Csharp.ReadLine_FromTextbox();
                    this.SaiseiEventQueue.Enqueue(new SaiseiEventState(SaiseiEventStateName.Step));
                }
                break;

                case SaiseiEventStateName.Step:
                {
                    bool toBreak = false;
                    if ("" == restText)
                    {
                        toBreak = true;
                    }
                    else
                    {
                        // [コマ送り]に成功している間、コマ送りし続けます。
                        Util_Functions_Server.ReadLine_TuginoItteSusumu_Srv(
                            ref restText,
                            this.mainGui.Link_Server.Model_Taikyoku,
                            this.mainGui.Model_Manual,
                            out toBreak,
                            "再生ボタン"
                            );

                        //TimedC.Saisei_Step(restText, shogiGui);// 再描画(ループが1回も実行されなかったとき用)
                        // 他のアプリが固まらないようにします。
                        Application.DoEvents();

                        // 早すぎると描画されないので、ウェイトを入れます。
                        System.Threading.Thread.Sleep(90);        //45


                        //------------------------------
                        // 再描画
                        //------------------------------
                        Util_Function_Csharp.Komaokuri_Gui(restText, mainGui);        //追加

                        //------------------------------
                        // メナス
                        //------------------------------
                        Util_Menace.Menace(mainGui);

                        mainGui.Response("Saisei");        // 再描画
                    }

                    if (toBreak)
                    {
                        // 終了
                        this.SaiseiEventQueue.Enqueue(new SaiseiEventState(SaiseiEventStateName.Finished));
                    }
                    else
                    {
                        // 続行
                        this.SaiseiEventQueue.Enqueue(new SaiseiEventState(SaiseiEventStateName.Step));
                    }
                }
                break;
                }
            }
        }
示例#5
0
        /// <summary>
        /// 成る/成らない
        /// </summary>
        /// <param name="mainGui"></param>
        /// <param name="btnTumandeiruKoma"></param>
        /// <param name="logTag"></param>
        private void After_NaruNaranai_ButtonPushed(
            MainGui_Csharp mainGui
            , Shape_BtnKoma btnTumandeiruKoma
            )
        {
            // 駒を動かします。
            {
                // GuiからServerへ渡す情報
                PieceType syurui;
                IMoveHalf dst;
                Util_Function_Csharp.Komamove1a_49Gui(out syurui, out dst, btnTumandeiruKoma, mainGui.Shape_PnlTaikyoku.NaruBtnMasu, mainGui);

                // ServerからGuiへ渡す情報
                bool    torareruKomaAri;
                RO_Star koma_Food_after;
                Util_Functions_Server.Komamove1a_50Srv(out torareruKomaAri, out koma_Food_after, dst, btnTumandeiruKoma.Koma, Util_Starlightable.AsKoma(dst.Now), mainGui.Model_Manual);

                Util_Function_Csharp.Komamove1a_51Gui(torareruKomaAri, koma_Food_after, mainGui);
            }

            {
                //----------
                // 移動済表示
                //----------
                mainGui.Shape_PnlTaikyoku.SetHMovedKoma(btnTumandeiruKoma.Finger);

                //------------------------------
                // 棋譜に符号を追加(マウスボタンが放されたとき)TODO:まだ早い。駒が成るかもしれない。
                //------------------------------
                // 棋譜

                IMove move = new RO_Starbeam(
                    //btnTumandeiruKoma.Finger,
                    mainGui.Shape_PnlTaikyoku.MouseStarlightOrNull2.Now,

                    mainGui.Model_Manual.GuiSkyConst.StarlightIndexOf(btnTumandeiruKoma.Finger).Now,

                    mainGui.Shape_PnlTaikyoku.MousePos_FoodKoma != null ? mainGui.Shape_PnlTaikyoku.MousePos_FoodKoma.Komasyurui : PieceType.None
                    );// 選択している駒の元の場所と、移動先

                KifuNode newNode;
                {
                    //
                    // 成ったので、指し手データ差替え。
                    //
                    StartposImporter.Assert_HirateHonsyogi(new SkyBuffer(mainGui.Model_Manual.GuiSkyConst), "newNode作成前");
                    newNode = new KifuNodeImpl(
                        move,
                        new KyokumenWrapper(SkyConst.NewInstance_ReversePside(                // 先後を反転させます。
                                                mainGui.Model_Manual.GuiSkyConst,
                                                mainGui.Model_Manual.GuiSkyConst.Temezumi + 1 //1手進める
                                                ))
                        );
                    StartposImporter.Assert_HirateHonsyogi(new SkyBuffer(newNode.Value.KyokumenConst), "newNode作成後");


                    //「成る/成らない」ボタンを押したときです。
                    {
                        //----------------------------------------
                        // 次ノード追加
                        //----------------------------------------
                        mainGui.Link_Server.Model_Taikyoku.Kifu.GetSennititeCounter().CountUp_New(Conv_Sky.ToKyokumenHash(newNode.Value.KyokumenConst), "After_NaruNaranai");
                        ((KifuNode)mainGui.Link_Server.Model_Taikyoku.Kifu.CurNode).PutTuginoitte_New(newNode);
                    }

                    // ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
                    // ここで棋譜の変更をします。
                    // ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
                    string jsaFugoStr;
                    Util_Functions_Server.SetCurNode_Srv(
                        mainGui.Link_Server.Model_Taikyoku,
                        mainGui.Model_Manual,
                        newNode, out jsaFugoStr);
                    mainGui.RepaintRequest.SetFlag_RefreshRequest();

                    //------------------------------
                    // 符号表示
                    //------------------------------
                    // 成る/成らないボタンを押したとき。
                    mainGui.Shape_PnlTaikyoku.SetFugo(jsaFugoStr);
                }



                //------------------------------
                // チェンジターン
                //------------------------------
                if (!mainGui.Shape_PnlTaikyoku.Requested_NaruDialogToShow)
                {
                    //Logger.Trace("マウス左ボタンを押したのでチェンジターンします。");
                    mainGui.ChangedTurn();
                }
            }


            mainGui.RepaintRequest.SetFlag_RecalculateRequested();// 駒の再描画要求

            //Logger.Trace("つまんでいる駒を放します。(6)");
            mainGui.SetFigTumandeiruKoma(-1);//駒を放した扱いです。

            mainGui.Shape_PnlTaikyoku.SetNaruMasu(null);

            mainGui.RepaintRequest.SyuturyokuRequest = RepaintRequestGedanTxt.Kifu;
            mainGui.RepaintRequest.SetFlag_RefreshRequest();

            IMove last;

            {
                Node <IMove, KyokumenWrapper> kifuElement = mainGui.Link_Server.Model_Taikyoku.Kifu.CurNode;

                last = (IMove)kifuElement.Key;
            }
            mainGui.ChangedTurn();//マウス左ボタンを押したのでチェンジターンします。

            mainGui.Shape_PnlTaikyoku.Request_NaruDialogToShow(false);
            mainGui.GetWidget("BtnNaru").Visible    = false;
            mainGui.GetWidget("BtnNaranai").Visible = false;
            mainGui.SetScene(SceneName.SceneB_1TumamitaiKoma);
        }
示例#6
0
        /// <summary>
        /// シングルトン。
        /// </summary>
        /// <returns></returns>
        public static Event_CsharpImpl GetInstance()
        {
            if (null == Event_CsharpImpl.instance)
            {
                Event_CsharpImpl ins = new Event_CsharpImpl();
                Event_CsharpImpl.instance = ins;

                //
                // [成る]ボタンのイベント。
                //
                ins.delegate_BtnNaru = (
                    object obj_shogiGui2
                    , object userWidget2 // UerWidget
                    , object btnKoma_Selected2
                    ) =>
                {
                    Shape_BtnKoma  btnKoma_Selected = (Shape_BtnKoma)btnKoma_Selected2;
                    MainGui_Csharp shogibanGui2     = (MainGui_Csharp)obj_shogiGui2;

                    shogibanGui2.SetNaruFlag(true);
                    ins.After_NaruNaranai_ButtonPushed(
                        shogibanGui2
                        , btnKoma_Selected
                        );
                };

                //
                // [成らない]ボタンのイベント。
                //
                ins.delegate_BtnNaranai = (
                    object obj_shogiGui2
                    , object userWidget2 // UerWidget
                    , object btnKoma_Selected2
                    ) =>
                {
                    Shape_BtnKoma  btnKoma_Selected = (Shape_BtnKoma)btnKoma_Selected2;
                    MainGui_Csharp shogibanGui2     = (MainGui_Csharp)obj_shogiGui2;

                    shogibanGui2.SetNaruFlag(false);
                    ins.After_NaruNaranai_ButtonPushed(
                        shogibanGui2
                        , btnKoma_Selected
                        );
                };

                //
                // [クリアー]ボタンのイベント。
                //
                ins.delegate_BtnClear = (
                    object obj_shogiGui2
                    , object userWidget2 // UerWidget
                    , object btnKoma_Selected2
                    ) =>
                {
                    Shape_BtnKoma  btnKoma_Selected = (Shape_BtnKoma)btnKoma_Selected2;
                    MainGui_Csharp shogibanGui2     = (MainGui_Csharp)obj_shogiGui2;

                    Util_Lua_Csharp.ShogiGui = shogibanGui2;
                    Util_Lua_Csharp.Perform("click_clearButton");
                };

                //
                // [再生]ボタンのイベント。
                //
                ins.delegate_BtnPlay = (
                    object obj_shogiGui2
                    , object userWidget2 // UerWidget
                    , object btnKoma_Selected2
                    ) =>
                {
                    Shape_BtnKoma  btnKoma_Selected = (Shape_BtnKoma)btnKoma_Selected2;
                    MainGui_Csharp shogibanGui2     = (MainGui_Csharp)obj_shogiGui2;

                    Util_Lua_Csharp.ShogiGui = shogibanGui2;
                    Util_Lua_Csharp.Perform("click_playButton");
                };

                //
                // [コマ送り]ボタンのイベント。
                //
                ins.delegate_BtnForward = (
                    object obj_shogiGui2
                    , object userWidget2 // UerWidget
                    , object btnKoma_Selected2
                    ) =>
                {
                    Shape_BtnKoma  btnKoma_Selected = (Shape_BtnKoma)btnKoma_Selected2;
                    MainGui_Csharp mainGui3         = (MainGui_Csharp)obj_shogiGui2;

                    string restText = Util_Function_Csharp.ReadLine_FromTextbox();
                    Util_Functions_Server.Komaokuri_Srv(
                        ref restText,
                        mainGui3.Link_Server.Model_Taikyoku,
                        mainGui3.Model_Manual);
                    Util_Function_Csharp.Komaokuri_Gui(restText, mainGui3);
                    Util_Menace.Menace(mainGui3);// メナス
                };

                //
                // [巻き戻し]ボタンのイベント。
                //
                ins.delegate_BtnBackward = (
                    object obj_shogiGui2
                    , object userWidget2 // UerWidget
                    , object btnKoma_Selected2
                    ) =>
                {
                    Shape_BtnKoma  btnKoma_Selected = (Shape_BtnKoma)btnKoma_Selected2;
                    MainGui_Csharp shogibanGui2     = (MainGui_Csharp)obj_shogiGui2;

                    Finger movedKoma;
                    Finger foodKoma;//取られた駒
                    string fugoJStr;

                    if (!Util_Functions_Server.Makimodosi_Srv(out movedKoma, out foodKoma, out fugoJStr, shogibanGui2.Link_Server.Model_Taikyoku))
                    {
                        goto gt_EndBlock;
                    }

                    Util_Function_Csharp.Makimodosi_Gui(shogibanGui2, movedKoma, foodKoma, fugoJStr, Util_Function_Csharp.ReadLine_FromTextbox());
                    Util_Menace.Menace(shogibanGui2);//メナス

gt_EndBlock:
                    ;
                };

                //
                // [ログ出せ]ボタンのイベント。
                //
                ins.delegate_BtnLogdase = (
                    object obj_shogiGui2
                    , object userWidget2 // UerWidget
                    , object btnKoma_Selected2
                    ) =>
                {
                    MainGui_Csharp shogibanGui2     = (MainGui_Csharp)obj_shogiGui2;
                    Shape_BtnKoma  btnKoma_Selected = (Shape_BtnKoma)btnKoma_Selected2;

                    shogibanGui2.Logdase();
                };

                //
                // [壁置く]ボタンのイベント。
                //
                ins.delegate_BtnKabeOku = (
                    object obj_shogiGui2
                    , object userWidget2 // UerWidget
                    , object btnKoma_Selected2
                    ) =>
                {
                    MainGui_Csharp shogibanGui2     = (MainGui_Csharp)obj_shogiGui2;
                    Shape_BtnKoma  btnKoma_Selected = (Shape_BtnKoma)btnKoma_Selected2;
                    UserWidget     widget           = shogibanGui2.GetWidget("BtnKabeOku");

                    // [壁置く]←→[駒動かす]切替
                    switch (widget.Text)
                    {
                    case "壁置く":
                        widget.Text = "駒動かす";
                        break;

                    default:
                        widget.Text = "壁置く";
                        break;
                    }

                    shogibanGui2.RepaintRequest.SetFlag_RefreshRequest();
                };

                //
                // [出力切替]ボタンのイベント。
                //
                ins.delegate_BtnSyuturyokuKirikae = (
                    object obj_shogiGui2
                    , object userWidget2 // UerWidget
                    , object btnKoma_Selected2
                    ) =>
                {
                    Shape_BtnKoma  btnKoma_Selected = (Shape_BtnKoma)btnKoma_Selected2;
                    MainGui_Csharp shogibanGui2     = (MainGui_Csharp)obj_shogiGui2;

                    switch (shogibanGui2.SyuturyokuKirikae)
                    {
                    case SyuturyokuKirikae.Japanese:
                        shogibanGui2.SetSyuturyokuKirikae(SyuturyokuKirikae.Sfen);
                        break;

                    case SyuturyokuKirikae.Sfen:
                        shogibanGui2.SetSyuturyokuKirikae(SyuturyokuKirikae.Html);
                        break;

                    case SyuturyokuKirikae.Html:
                        shogibanGui2.SetSyuturyokuKirikae(SyuturyokuKirikae.Japanese);
                        break;
                    }

                    shogibanGui2.RepaintRequest.SyuturyokuRequest = RepaintRequestGedanTxt.Kifu;
                };

                //
                // [各種符号]ボタンのイベント。
                //
                ins.delegate_BtnKakusyuFugo = (
                    object obj_shogiGui2
                    , object userWidget2     // UerWidget
                    , object btnKoma_Selected2
                    ) =>
                {
                    Shape_BtnKoma  btnKoma_Selected = (Shape_BtnKoma)btnKoma_Selected2;
                    UserWidget     userWidget       = (UserWidget)userWidget2;
                    MainGui_Csharp shogibanGui2     = (MainGui_Csharp)obj_shogiGui2;
                    UserWidget     widget           = shogibanGui2.GetWidget(userWidget.Name);

                    shogibanGui2.RepaintRequest.SetNyuryokuTextTail(widget.Fugo);
                };

                //
                // [全消]ボタンのイベント。
                //
                ins.delegate_BtnZenkesi = (
                    object obj_shogiGui2
                    , object userWidget2 // UerWidget
                    , object btnKoma_Selected2
                    ) =>
                {
                    Shape_BtnKoma  btnKoma_Selected = (Shape_BtnKoma)btnKoma_Selected2;
                    MainGui_Csharp shogibanGui2     = (MainGui_Csharp)obj_shogiGui2;

                    shogibanGui2.RepaintRequest.NyuryokuText = "";
                };

                //
                // [ここから採譜]ボタンのイベント。
                //
                ins.delegate_BtnKokokaraSaifu = (
                    object obj_shogiGui2
                    , object userWidget2 // UerWidget
                    , object btnKoma_Selected2
                    ) =>
                {
                    Shape_BtnKoma  btnKoma_Selected = (Shape_BtnKoma)btnKoma_Selected2;
                    MainGui_Csharp shogibanGui2     = (MainGui_Csharp)obj_shogiGui2;

                    UtilKifuTree282.SetStartpos_KokokaraSaifu(shogibanGui2.Link_Server.Model_Taikyoku.Kifu, shogibanGui2.Link_Server.Model_Taikyoku.Kifu.CurNode.Value.KyokumenConst.KaisiPside);
                    shogibanGui2.RepaintRequest.SyuturyokuRequest = RepaintRequestGedanTxt.Kifu;
                };

                //
                // [初期配置]ボタンのイベント。
                //
                ins.delegate_BtnSyokihaichi = (
                    object obj_shogiGui2
                    , object userWidget2 // UerWidget
                    , object btnKoma_Selected2
                    ) =>
                {
                    Shape_BtnKoma  btnKoma_Selected = (Shape_BtnKoma)btnKoma_Selected2;
                    MainGui_Csharp shogibanGui2     = (MainGui_Csharp)obj_shogiGui2;

                    Util_Function_Csharp.Perform_SyokiHaichi(shogibanGui2);
                };

                //
                // [向き]ボタンのイベント。
                //
                ins.delegate_BtnMuki = (
                    object obj_shogiGui2
                    , object userWidget2 // UerWidget
                    , object btnKoma_Selected2
                    ) =>
                {
                    Shape_BtnKoma  btnKoma_Selected = (Shape_BtnKoma)btnKoma_Selected2;
                    MainGui_Csharp mainGui3         = (MainGui_Csharp)obj_shogiGui2;

                    Shape_BtnKoma movedKoma = mainGui3.Shape_PnlTaikyoku.Btn_MovedKoma();

                    RO_Star koma;
                    Finger  figKoma = Fingers.Error_1;

                    if (null != movedKoma)
                    {
                        //>>>>> 移動直後の駒があるとき
                        koma    = Util_Starlightable.AsKoma(mainGui3.Model_Manual.GuiSkyConst.StarlightIndexOf(movedKoma.Finger).Now);
                        figKoma = movedKoma.Finger;
                    }
                    else if (null != btnKoma_Selected)
                    {
                        //>>>>> 選択されている駒があるとき
                        koma    = Util_Starlightable.AsKoma(mainGui3.Model_Manual.GuiSkyConst.StarlightIndexOf(btnKoma_Selected.Koma).Now);
                        figKoma = btnKoma_Selected.Koma;
                    }
                    else
                    {
                        koma = null;
                    }

                    if (null != koma)
                    {
                        KifuNode modifyNode = new KifuNodeImpl(
                            mainGui3.Link_Server.Model_Taikyoku.Kifu.CurNode.Key,//現在の局面を流用
                            new KyokumenWrapper(
                                SkyConst.NewInstance_OverwriteOrAdd_Light(
                                    mainGui3.Model_Manual.GuiSkyConst,
                                    -1,//そのまま
                                    figKoma,
                                    new RO_Starlight(
                                        new RO_Star(
                                            Conv_Playerside.Reverse(koma.Pside),//向きを逆さにします。
                                            koma.Masu,
                                            koma.Komasyurui
                                            )
                                        )
                                    )
                                )
                            );
                        // ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
                        // ここで局面データを変更します。
                        // ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
                        string jsaFugoStr;
                        Util_Functions_Server.SetCurNode_Srv(
                            mainGui3.Link_Server.Model_Taikyoku,
                            mainGui3.Model_Manual,
                            modifyNode, out jsaFugoStr);
                        mainGui3.RepaintRequest.SetFlag_RefreshRequest();
                    }
                };
            }
            return(Event_CsharpImpl.instance);
        }