Exemplo n.º 1
0
        /// <summary>
        /// 駒を動かします(1)。マウスボタンが押下されたとき。
        ///
        /// 成る、成らない関連。
        ///
        /// </summary>
        public static void Komamove1a_50Srv(
            out bool torareruKomaAri,
            out RO_Star koma_Food_after,
            IMoveHalf dst,
            Finger fig_btnTumandeiruKoma,
            RO_Star foodee_koma,//取られる対象の駒
            Model_Manual model_Manual
            )
        {
            Finger btnKoma_Food_Koma;

            // 取られることになる駒のボタン
            btnKoma_Food_Koma = Util_Sky_FingersQuery.InMasuNow(model_Manual.GuiSkyConst, foodee_koma.Masu).ToFirst();
            if (Fingers.Error_1 == btnKoma_Food_Koma)
            {
                koma_Food_after   = null;
                torareruKomaAri   = false;
                btnKoma_Food_Koma = Fingers.Error_1;
                goto gt_EndBlock1;
            }
            else
            {
                //>>>>> 取る駒があったとき
                torareruKomaAri = true;
            }



            PieceType koma_Food_pre_Syurui = Util_Starlightable.AsKoma(model_Manual.GuiSkyConst.StarlightIndexOf(btnKoma_Food_Koma).Now).Komasyurui;


            // その駒は、駒置き場に移動させます。
            SyElement akiMasu;

            switch (foodee_koma.Pside)
            {
            case Playerside.P2:

                akiMasu = Util_IttesasuRoutine.GetKomadaiKomabukuroSpace(Okiba.Gote_Komadai, model_Manual.GuiSkyConst);
                if (!Masu_Honshogi.IsErrorBasho(akiMasu))
                {
                    // 駒台に空きスペースがありました。
                    //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
                    koma_Food_after = new RO_Star(
                        Playerside.P2,
                        akiMasu,    //駒台へ
                        Util_Komasyurui14.NarazuCaseHandle(koma_Food_pre_Syurui)
                        );
                }
                else
                {
                    // エラー: 駒台に空きスペースがありませんでした。
                    //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

                    koma_Food_after = new RO_Star(
                        Playerside.P2,
                        Util_Masu10.OkibaSujiDanToMasu(
                            Okiba.Gote_Komadai,
                            Util_Koma.CTRL_NOTHING_PROPERTY_SUJI,
                            Util_Koma.CTRL_NOTHING_PROPERTY_DAN
                            ),
                        Util_Komasyurui14.NarazuCaseHandle(koma_Food_pre_Syurui)
                        );
                }

                break;

            case Playerside.P1:    //thru
            default:

                akiMasu = Util_IttesasuRoutine.GetKomadaiKomabukuroSpace(Okiba.Sente_Komadai, model_Manual.GuiSkyConst);
                if (!Masu_Honshogi.IsErrorBasho(akiMasu))
                {
                    // 駒台に空きスペースがありました。
                    //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

                    koma_Food_after = new RO_Star(
                        Playerside.P1,
                        akiMasu,    //駒台へ
                        Util_Komasyurui14.NarazuCaseHandle(koma_Food_pre_Syurui)
                        );
                }
                else
                {
                    // エラー: 駒台に空きスペースがありませんでした。
                    //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

                    koma_Food_after = new RO_Star(
                        Playerside.P1,
                        Util_Masu10.OkibaSujiDanToMasu(
                            Okiba.Sente_Komadai,
                            Util_Koma.CTRL_NOTHING_PROPERTY_SUJI,
                            Util_Koma.CTRL_NOTHING_PROPERTY_DAN
                            ),
                        Util_Komasyurui14.NarazuCaseHandle(koma_Food_pre_Syurui)
                        );
                }

                break;
            }



gt_EndBlock1:


            SkyConst sky2;

            if (btnKoma_Food_Koma != Fingers.Error_1)
            {
                //------------------------------
                // 取られる駒があった場合
                //------------------------------
                sky2 = SkyConst.NewInstance_OverwriteOrAdd_Light(
                    model_Manual.GuiSkyConst,
                    -1,    //そのまま
                           //
                           // 指した駒
                           //
                    fig_btnTumandeiruKoma,
                    dst,
                    //
                    // 取られた駒
                    //
                    btnKoma_Food_Koma,
                    new RO_Starlight(
                        koma_Food_after
                        )
                    );
            }
            else
            {
                //------------------------------
                // 取られる駒がなかった場合
                //------------------------------
                RO_Star movedKoma = Util_Starlightable.AsKoma(model_Manual.GuiSkyConst.StarlightIndexOf(fig_btnTumandeiruKoma).Now);

                sky2 = SkyConst.NewInstance_OverwriteOrAdd_Light(
                    model_Manual.GuiSkyConst,
                    -1,    //そのまま
                           //
                           // 指した駒
                           //
                    fig_btnTumandeiruKoma,
                    dst,
                    //
                    // 手得計算
                    //
                    movedKoma.Komasyurui,
                    0,
                    movedKoma.Masu
                    );
            }

            model_Manual.SetGuiSky(sky2);
            // ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
            // 棋譜は変更された。
            // ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
        }
Exemplo n.º 2
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);
        }