예제 #1
0
        public static bool Komaokuri_Gui(string restText, NarabeRoomViewModel shogiGui)
        {
            //------------------------------
            // チェンジ・ターン
            //------------------------------
            if (shogiGui.ResponseData.ChangedTurn)
            {
                shogiGui.ChangeTurn();
            }


            //------------------------------
            // 符号表示
            //------------------------------
            {
                Node <ShootingStarlightable, KyokumenWrapper> node6 = shogiGui.GameViewModel.Kifu.CurNode;

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

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

                string fugoJStr = fugoJ.ToText_UseDou(node6);
                shogiGui.Shape_PnlTaikyoku.SetFugo(fugoJStr);
            }



            shogiGui.ResponseData.RedrawStarlights();         // 再描画1

            shogiGui.ResponseData.InputTextString = restText; //追加
            shogiGui.ResponseData.ToRedraw();                 // GUIに通知するだけ。


            return(true);
        }
예제 #2
0
        /// <summary>
        /// ************************************************************************************************************************
        /// 動かしたい駒の解除
        /// ************************************************************************************************************************
        /// </summary>
        /// <param name="x"></param>
        /// <param name="y"></param>
        public bool DeselectByMouse(int x, int y, NarabeRoomViewModel shogiGui)
        {
            bool changed = false;

            if (this.HitByMouse(x, y)) // マウスが重なっているなら
            {
                if (shogiGui.Shape_PnlTaikyoku.SelectFirstTouch)
                {
                    // クリックのマウスアップ
                    shogiGui.Shape_PnlTaikyoku.SelectFirstTouch = false;
                }
                else
                {
                    // 選択解除のマウスアップ
                    this.Select = false;
                    changed     = true;
                }
            }
            else
            {
                // 何もしない
            }

            return(changed);
        }
예제 #3
0
        public virtual void Step2_Compile_AllWidget(object obj_shogiGui)
        {
            NarabeRoomViewModel shogiGui = (NarabeRoomViewModel)obj_shogiGui;

            foreach (UserWidget widget in shogiGui.Shape_PnlTaikyoku.Widgets.Values)
            {
                widget.Compile();
            }
        }
예제 #4
0
        /// <summary>
        /// 局面に合わせて、駒ボタンのx,y位置を変更します
        /// </summary>
        /// <param name="btnKoma">駒</param>
        public static void Redraw_KomaLocation(
            Finger figKoma,
            NarabeRoomViewModel shogiGui
            )
        {
            RO_Star_Koma koma = Util_Koma.AsKoma(shogiGui.GameViewModel.GuiSkyConst.StarlightIndexOf(figKoma).Now);

            Shape_BtnKoma btnKoma = Util_InGui.FingerToKomaBtn(figKoma, shogiGui);

            int suji;
            int dan;

            Util_MasuNum.MasuToSuji(koma.Masu, out suji);
            Util_MasuNum.MasuToDan(koma.Masu, out dan);

            switch (Util_Masu.GetOkiba(koma.Masu))
            {
            case Okiba.ShogiBan:
                btnKoma.SetBounds(new Rectangle(
                                      shogiGui.Shape_PnlTaikyoku.Shogiban.SujiToX(suji),
                                      shogiGui.Shape_PnlTaikyoku.Shogiban.DanToY(dan),
                                      btnKoma.Bounds.Width,
                                      btnKoma.Bounds.Height
                                      ));
                break;

            case Okiba.Sente_Komadai:
                btnKoma.SetBounds(new Rectangle(
                                      shogiGui.Shape_PnlTaikyoku.KomadaiArr[0].SujiToX(suji),
                                      shogiGui.Shape_PnlTaikyoku.KomadaiArr[0].DanToY(dan),
                                      btnKoma.Bounds.Width,
                                      btnKoma.Bounds.Height
                                      ));
                break;

            case Okiba.Gote_Komadai:
                btnKoma.SetBounds(new Rectangle(
                                      shogiGui.Shape_PnlTaikyoku.KomadaiArr[1].SujiToX(suji),
                                      shogiGui.Shape_PnlTaikyoku.KomadaiArr[1].DanToY(dan),
                                      btnKoma.Bounds.Width,
                                      btnKoma.Bounds.Height
                                      ));
                break;

            case Okiba.KomaBukuro:
                btnKoma.SetBounds(new Rectangle(
                                      shogiGui.Shape_PnlTaikyoku.KomadaiArr[2].SujiToX(suji),
                                      shogiGui.Shape_PnlTaikyoku.KomadaiArr[2].DanToY(dan),
                                      btnKoma.Bounds.Width,
                                      btnKoma.Bounds.Height
                                      ));
                break;
            }
        }
예제 #5
0
        /// <summary>
        /// つまんでいる駒。
        /// </summary>
        /// <returns>つまんでいる駒。なければヌル</returns>
        public Shape_BtnKoma Btn_TumandeiruKoma(object obj_shogiGui)
        {
            NarabeRoomViewModel shogiGui = (NarabeRoomViewModel)obj_shogiGui;
            Shape_BtnKoma       found    = null;

            if (-1 != shogiGui.Shape_PnlTaikyoku.FigTumandeiruKoma)
            {
                found = this.BtnKomaDoors[shogiGui.Shape_PnlTaikyoku.FigTumandeiruKoma];
            }

            return(found);
        }
예제 #6
0
 public ShogiEngineLiveImpl(NarabeRoomViewModel ownerShogiGui)
 {
     this.ShogiEngineManInterface = new ShogiEngineManInterfaceImpl();
     this.ShogiEngineManInterface.ShogiServerMessenger.Delegate_ShogiServer_ToEngine = (string line) =>
     {
         //
         // USIコマンドを将棋エンジンに送ったタイミングで、なにかすることがあれば、
         // ここに書きます。
         //
         Logger.WriteLineS(line);
     };
 }
예제 #7
0
        /// <summary>
        /// ************************************************************************************************************************
        /// 対局の描画の一式は、ここに書きます。
        /// ************************************************************************************************************************
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public void Paint(
            object sender, PaintEventArgs e,
            NarabeRoomViewModel shogiGui
            )
        {
            if (!this.Visible)
            {
                goto gt_EndMethod;
            }

            //----------
            // 将棋盤
            //----------
            this.Shogiban.Paint(e.Graphics);

            //----------
            // 駒置き、駒袋
            //----------
            for (int i = 0; i < this.KomadaiArr.Length; i++)
            {
                Shape_PnlKomadai k = this.KomadaiArr[i];
                k.Paint(e.Graphics);
            }

            //----------
            // 駒
            //----------
            foreach (Shape_BtnKomaImpl koma in this.BtnKomaDoors)
            {
                koma.Paint(e.Graphics, shogiGui);
            }

            //----------
            // 符号表示
            //----------
            this.lblFugo.Paint(e.Graphics);

            //----------
            // 先後表示
            //----------
            this.lblPside.Text = Converter04.Pside_ToKanji(shogiGui.GameViewModel.Kifu.CountPside(Util_InServer.CountCurTesumi2(shogiGui)));
            this.lblPside.Paint(e.Graphics);


            foreach (UserWidget widget in this.Widgets.Values)
            {
                widget.Paint(e.Graphics);
            }

gt_EndMethod:
            ;
        }
예제 #8
0
        /// <summary>
        /// 駒のハンドル(*1)を元に、ボタンを返します。
        ///
        ///     *1…将棋の駒1つ1つに付けられた番号です。
        ///
        /// </summary>
        /// <param name="hKoma"></param>
        /// <param name="shape_PnlTaikyoku"></param>
        /// <returns>なければヌル</returns>
        public static Shape_BtnKoma FingerToKomaBtn(Finger koma, NarabeRoomViewModel shogiGui)
        {
            Shape_BtnKoma found = null;

            int hKoma = (int)koma;

            if (0 <= hKoma && hKoma < shogiGui.Shape_PnlTaikyoku.BtnKomaDoors.Length)
            {
                found = shogiGui.Shape_PnlTaikyoku.BtnKomaDoors[hKoma];
            }

            return(found);
        }
예제 #9
0
        /// <summary>
        /// 駒のハンドル(*1)を元に、ボタンを返します。
        ///
        ///     *1…将棋の駒1つ1つに付けられた番号です。
        ///
        /// </summary>
        /// <param name="hKomas"></param>
        /// <param name="shape_PnlTaikyoku"></param>
        /// <returns></returns>
        public static List <Shape_BtnKoma> HKomasToBtns(List <int> hKomas, NarabeRoomViewModel shogiGui)
        {
            List <Shape_BtnKoma> btns = new List <Shape_BtnKoma>();

            foreach (int handle in hKomas)
            {
                Shape_BtnKoma btn = shogiGui.Shape_PnlTaikyoku.BtnKomaDoors[handle];
                if (null != btn)
                {
                    btns.Add(btn);
                }
            }

            return(btns);
        }
예제 #10
0
        /// <summary>
        /// 取った駒がある場合のみ。
        /// </summary>
        /// <param name="koma_Food_after"></param>
        /// <param name="shogiGui"></param>
        public static void Komamove1a_51Gui(
            bool torareruKomaAri,
            RO_Star_Koma koma_Food_after,
            NarabeRoomViewModel shogiGui
            )
        {
            if (torareruKomaAri)
            {
                //------------------------------
                // 「取った駒種類_巻戻し用」を棋譜に覚えさせます。(差替え)
                //------------------------------
                shogiGui.Shape_PnlTaikyoku.MousePos_FoodKoma = koma_Food_after;//2014-10-19 21:04 追加
            }

            shogiGui.ResponseData.RedrawStarlights();
        }
예제 #11
0
        /// <summary>
        /// v(^▽^)v超能力『メナス』だぜ☆ 未来の脅威を予測し、可視化するぜ☆www
        /// </summary>
        public static void Menace(NarabeRoomViewModel shogiGui)
        {
            if (0 < shogiGui.GameViewModel.GuiTesumi)
            {
                // 処理の順序が悪く、初回はうまく判定できない。
                SkyConst src_Sky = shogiGui.GameViewModel.GuiSkyConst;


                //----------
                // 将棋盤上の駒
                //----------
                shogiGui.ResponseData.ToRedraw();

                // [クリアー]
                shogiGui.Shape_PnlTaikyoku.Shogiban.ClearHMasu_KikiKomaList();

                // 全駒
                foreach (Finger figKoma in Finger_Honshogi.Items_KomaOnly)
                {
                    RO_Star_Koma koma = Util_Koma.AsKoma(src_Sky.StarlightIndexOf(figKoma).Now);


                    if (
                        Okiba.ShogiBan == Util_Masu.Masu_ToOkiba(koma.Masu)
                        &&
                        shogiGui.GameViewModel.GuiPside != koma.Pside
                        )
                    {
                        // 駒の利き
                        SySet <SyElement> kikiZukei = Util_Sky.KomaKidou_Potential(figKoma, src_Sky);

                        IEnumerable <SyElement> kikiMasuList = kikiZukei.Elements;
                        foreach (SyElement masu in kikiMasuList)
                        {
                            // その枡に利いている駒のハンドルを追加
                            if (Masu_Honshogi.Error != masu)
                            {
                                shogiGui.Shape_PnlTaikyoku.Shogiban.HMasu_KikiKomaList[Util_Masu.AsMasuNumber(masu)].Add((int)figKoma);
                            }
                        }
                    }
                }
            }
        }
예제 #12
0
        /// <summary>
        /// ************************************************************************************************************************
        /// [巻戻し]ボタン
        /// ************************************************************************************************************************
        /// </summary>
        public static bool Makimodosi_Gui(
            NarabeRoomViewModel shogiGui,
            Finger movedKoma,
            Finger foodKoma,
            string fugoJStr,
            string backedInputText)
        {
            //------------------------------
            // チェンジターン
            //------------------------------
            shogiGui.ChangeTurn();//[巻戻し]ボタンを押したあと


            //------------------------------
            // 符号表示
            //------------------------------
            shogiGui.Shape_PnlTaikyoku.SetFugo(fugoJStr);


            Shape_BtnKoma btn_movedKoma = Util_InGui.FingerToKomaBtn(movedKoma, shogiGui);
            Shape_BtnKoma btn_foodKoma  = Util_InGui.FingerToKomaBtn(foodKoma, shogiGui);//取られた駒

            //------------------------------------------------------------
            // 駒・再描画
            //------------------------------------------------------------
            if (
                null != btn_movedKoma //動かした駒
                ||
                null != btn_foodKoma  //取ったときに下にあった駒(巻戻しのときは、これは無し)
                )
            {
                shogiGui.ResponseData.RedrawStarlights();// 駒の再描画要求
            }

            // 巻き戻したので、符号が入ります。
            {
                shogiGui.ResponseData.InputTextString = fugoJStr + " " + backedInputText;// 入力欄
                shogiGui.ResponseData.OutputTxt       = ResponseGedanTxt.Kifu;
            }
            shogiGui.ResponseData.ToRedraw();

            return(true);
        }
예제 #13
0
        public static void Komamove1a_49Gui(
            out PieceType toSyurui,
            out Starlight dst,
            Shape_BtnKoma btnKoma_Selected,
            Shape_BtnMasu btnMasu,
            NarabeRoomViewModel shogiGui
            )
        {
            // 駒の種類
            if (shogiGui.Shape_PnlTaikyoku.Naru)
            {
                // 成ります

                toSyurui = KomaSyurui14Array.NariCaseHandle[(int)Haiyaku184Array.Syurui(Util_Koma.AsKoma(shogiGui.Shape_PnlTaikyoku.MouseStarlightOrNull2.Now).Haiyaku)];
                shogiGui.Shape_PnlTaikyoku.SetNaruFlag(false);
            }
            else
            {
                // そのまま
                toSyurui = Haiyaku184Array.Syurui(Util_Koma.AsKoma(shogiGui.Shape_PnlTaikyoku.MouseStarlightOrNull2.Now).Haiyaku);
            }


            // 置く駒
            {
                dst = new RO_MotionlessStarlight(
                    //btnKoma_Selected.Finger,
                    new RO_Star_Koma(
                        Util_Koma.AsKoma(shogiGui.GameViewModel.GuiSkyConst.StarlightIndexOf(btnKoma_Selected.Finger).Now).Pside,
                        btnMasu.Zahyo,
                        toSyurui
                        )
                    );
            }


            //------------------------------------------------------------
            // 「取った駒種類_巻戻し用」をクリアーします。
            //------------------------------------------------------------
            shogiGui.Shape_PnlTaikyoku.MousePos_FoodKoma = null;
        }
예제 #14
0
        public override void Step3_SetEvent(object obj_shogiGui)
        {
            NarabeRoomViewModel shogiGui1 = (NarabeRoomViewModel)obj_shogiGui;

            //----------
            // 将棋エンジン起動ボタン
            //----------
            {
                UserWidget widget = shogiGui1.Shape_PnlTaikyoku.GetWidget("BtnShogiEngineKido");
                widget.Delegate_MouseHitEvent = (
                    object obj_shogiGui2
                    , Shape_BtnKoma btnKoma_Selected
                    ) =>
                {
                    NarabeRoomViewModel shogiGui = (NarabeRoomViewModel)obj_shogiGui2;

                    Ui_PnlMain ui_PnlMain = ((Ui_ShogiForm1)shogiGui.OwnerForm).Ui_PnlMain1;

                    ui_PnlMain.ShogiGui.Start(ui_PnlMain.SetteiFile.ShogiEngineFilePath);
                };
            }
        }
예제 #15
0
        public static void Check_MouseoverKomaKiki(object obj_shogiGui, Finger finger)
        {
            NarabeRoomViewModel shogiGui = (NarabeRoomViewModel)obj_shogiGui;

            Starlight light = shogiGui.GameViewModel.GuiSkyConst.StarlightIndexOf(finger);

            shogiGui.Shape_PnlTaikyoku.Shogiban.KikiBan = new SySet_Default <SyElement>("利き盤");// .Clear();

            // 駒の利き
            SySet <SyElement> kikiZukei = Util_Sky.KomaKidou_Potential(finger, shogiGui.GameViewModel.GuiSkyConst);
            //kikiZukei.DebugWrite("駒の利きLv1");

            // 味方の駒
            Node <ShootingStarlightable, KyokumenWrapper> siteiNode = KifuNarabe_KifuWrapper.CurNode(shogiGui.GameViewModel.Kifu);
            SySet <SyElement> mikataZukei = Util_Sky.Masus_Now(siteiNode.Value.ToKyokumenConst, Util_InServer.CurPside(shogiGui));
            //mikataZukei.DebugWrite("味方の駒");

            // 駒の利き上に駒がないか。
            SySet <SyElement> ban2 = kikiZukei.Minus_Closed(mikataZukei);

            //kikiZukei.DebugWrite("駒の利きLv2");

            shogiGui.Shape_PnlTaikyoku.Shogiban.KikiBan = ban2;
        }
예제 #16
0
        private void After_NaruNaranai(
            NarabeRoomViewModel shogiGui
            , Shape_BtnKoma btnTumandeiruKoma
            )
        {
            // 駒を動かします。
            {
                // GuiからServerへ渡す情報
                PieceType syurui;
                Starlight dst;
                Util_InGui.Komamove1a_49Gui(out syurui, out dst, btnTumandeiruKoma, shogiGui.Shape_PnlTaikyoku.NaruBtnMasu, shogiGui);

                // ServerからGuiへ渡す情報
                bool         torareruKomaAri;
                RO_Star_Koma koma_Food_after;
                Util_InServer.Komamove1a_50Srv(out torareruKomaAri, out koma_Food_after, dst, btnTumandeiruKoma.Koma, Util_Koma.AsKoma(dst.Now), shogiGui);

                Util_InGui.Komamove1a_51Gui(torareruKomaAri, koma_Food_after, shogiGui);
            }

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

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

                ShootingStarlightable move = new RO_ShootingStarlight(
                    //btnTumandeiruKoma.Finger,
                    shogiGui.Shape_PnlTaikyoku.MouseStarlightOrNull2.Now,

                    shogiGui.GameViewModel.GuiSkyConst.StarlightIndexOf(btnTumandeiruKoma.Finger).Now,

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


                {
                    StartposImporter.Assert_HirateHonsyogi(new SkyBuffer(shogiGui.GameViewModel.GuiSkyConst), "newNode作成前");

                    KifuNode newNode = new KifuNodeImpl(
                        move,
                        new KyokumenWrapper(shogiGui.GameViewModel.GuiSkyConst),
                        KifuNodeImpl.GetReverseTebanside(((KifuNode)shogiGui.GameViewModel.Kifu.CurNode).Tebanside)
                        );


                    StartposImporter.Assert_HirateHonsyogi(new SkyBuffer(newNode.Value.ToKyokumenConst), "newNode作成後");


                    //「成る/成らない」ボタンを押したときです。
                    ((KifuNode)KifuNarabe_KifuWrapper.CurNode(shogiGui.GameViewModel.Kifu)).AppendChildA_New(newNode);

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


                //------------------------------
                // 符号表示
                //------------------------------
                RO_Star_Koma koma = Util_Koma.AsKoma(move.LongTimeAgo);

                FugoJ fugoJ;
                fugoJ = JFugoCreator15Array.ItemMethods[(int)Haiyaku184Array.Syurui(koma.Haiyaku)](move, new KyokumenWrapper(shogiGui.GameViewModel.GuiSkyConst));//「▲2二角成」なら、馬(dst)ではなくて角(src)。

                shogiGui.Shape_PnlTaikyoku.SetFugo(fugoJ.ToText_UseDou(
                                                       KifuNarabe_KifuWrapper.CurNode(shogiGui.GameViewModel.Kifu)
                                                       ));


                //------------------------------
                // チェンジターン
                //------------------------------
                if (!shogiGui.Shape_PnlTaikyoku.Requested_NaruDialogToShow)
                {
                    //System.C onsole.WriteLine("マウス左ボタンを押したのでチェンジターンします。");
                    shogiGui.ChangeTurn();
                }
            }


            shogiGui.ResponseData.RedrawStarlights();// 駒の再描画要求

            //System.C onsole.WriteLine("つまんでいる駒を放します。(6)");
            shogiGui.Shape_PnlTaikyoku.SetFigTumandeiruKoma(-1);//駒を放した扱いです。

            shogiGui.Shape_PnlTaikyoku.SetNaruMasu(null);

            shogiGui.ResponseData.OutputTxt = ResponseGedanTxt.Kifu;
            shogiGui.ResponseData.ToRedraw();

            ShootingStarlightable last;

            {
                Node <ShootingStarlightable, KyokumenWrapper> kifuElement = KifuNarabe_KifuWrapper.CurNode(shogiGui.GameViewModel.Kifu);

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

            shogiGui.Shape_PnlTaikyoku.Request_NaruDialogToShow(false);
            shogiGui.Shape_PnlTaikyoku.GetWidget("BtnNaru").Visible    = false;
            shogiGui.Shape_PnlTaikyoku.GetWidget("BtnNaranai").Visible = false;
            shogiGui.SetScene(SceneName.SceneB_1TumamitaiKoma);
        }
예제 #17
0
        public virtual void Step3_SetEvent(object obj_shogiGui)
        {
            NarabeRoomViewModel shogiGui1 = (NarabeRoomViewModel)obj_shogiGui;

            //----------
            // [成る]ボタン
            //----------
            {
                UserWidget widget = shogiGui1.Shape_PnlTaikyoku.GetWidget("BtnNaru");
                widget.Delegate_MouseHitEvent = (
                    object obj_shogiGui2
                    , Shape_BtnKoma btnKoma_Selected
                    ) =>
                {
                    NarabeRoomViewModel shogiGui = (NarabeRoomViewModel)obj_shogiGui2;

                    Ui_PnlMain ui_PnlMain = ((Ui_ShogiForm1)shogiGui.OwnerForm).Ui_PnlMain1;


                    shogiGui.Shape_PnlTaikyoku.SetNaruFlag(true);
                    this.After_NaruNaranai(
                        shogiGui
                        , btnKoma_Selected
                        );
                };
            }

            //----------
            // [成らない]ボタン
            //----------
            {
                UserWidget widget = shogiGui1.Shape_PnlTaikyoku.GetWidget("BtnNaranai");
                widget.Delegate_MouseHitEvent = (
                    object obj_shogiGui2
                    , Shape_BtnKoma btnKoma_Selected
                    ) =>
                {
                    NarabeRoomViewModel shogiGui = (NarabeRoomViewModel)obj_shogiGui2;

                    Ui_PnlMain ui_PnlMain = ((Ui_ShogiForm1)shogiGui.OwnerForm).Ui_PnlMain1;

                    shogiGui.Shape_PnlTaikyoku.SetNaruFlag(false);
                    this.After_NaruNaranai(
                        shogiGui
                        , btnKoma_Selected
                        );
                };
            }

            //----------
            // [クリアー]ボタン
            //----------
            {
                UserWidget widget = shogiGui1.Shape_PnlTaikyoku.GetWidget("BtnClear");
                widget.Delegate_MouseHitEvent = (
                    object obj_shogiGui2
                    , Shape_BtnKoma btnKoma_Selected
                    ) =>
                {
                    NarabeRoomViewModel shogiGui = (NarabeRoomViewModel)obj_shogiGui2;

                    Util_Lua_KifuNarabe.ShogiGui = shogiGui;
                    Util_Lua_KifuNarabe.Perform("click_clearButton");
                };
            }

            //----------
            // [再生]ボタン
            //----------
            {
                UserWidget widget = shogiGui1.Shape_PnlTaikyoku.GetWidget("BtnPlay");
                widget.Delegate_MouseHitEvent = (
                    object obj_shogiGui2
                    , Shape_BtnKoma btnKoma_Selected
                    ) =>
                {
                    NarabeRoomViewModel shogiGui = (NarabeRoomViewModel)obj_shogiGui2;

                    Util_Lua_KifuNarabe.ShogiGui = shogiGui;
                    Util_Lua_KifuNarabe.Perform("click_playButton");
                };
            }

            //----------
            // [コマ送り]ボタン
            //----------
            {
                UserWidget widget = shogiGui1.Shape_PnlTaikyoku.GetWidget("BtnForward");
                widget.Delegate_MouseHitEvent = (
                    object obj_shogiGui2
                    , Shape_BtnKoma btnKoma_Selected
                    ) =>
                {
                    NarabeRoomViewModel shogiGui = (NarabeRoomViewModel)obj_shogiGui2;

                    string restText = Util_InGui.ReadLine_FromTextbox();
                    Util_InServer.Komaokuri_Srv(ref restText, shogiGui);
                    Util_InGui.Komaokuri_Gui(restText, shogiGui);
                    Util_Menace.Menace(shogiGui);// メナス
                };
            }

            //----------
            // [巻戻し]ボタン
            //----------
            {
                UserWidget widget = shogiGui1.Shape_PnlTaikyoku.GetWidget("BtnBackward");
                widget.Delegate_MouseHitEvent = (
                    object obj_shogiGui2
                    , Shape_BtnKoma btnKoma_Selected
                    ) =>
                {
                    NarabeRoomViewModel shogiGui = (NarabeRoomViewModel)obj_shogiGui2;

                    Ui_PnlMain ui_PnlMain = ((Ui_ShogiForm1)shogiGui.OwnerForm).Ui_PnlMain1;

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

                    if (!Util_InServer.Makimodosi_Srv(out movedKoma, out foodKoma, out fugoJStr, shogiGui))
                    {
                        goto gt_EndBlock;
                    }

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

gt_EndBlock:
                    ;
                };
            }


            //----------
            // ログ出せボタン
            //----------
            {
                UserWidget widget = shogiGui1.Shape_PnlTaikyoku.GetWidget("BtnLogdase");
                widget.Delegate_MouseHitEvent = (
                    object obj_shogiGui2
                    , Shape_BtnKoma btnKoma_Selected
                    ) =>
                {
                    NarabeRoomViewModel shogiGui = (NarabeRoomViewModel)obj_shogiGui2;

                    Ui_PnlMain ui_PnlMain = ((Ui_ShogiForm1)shogiGui.OwnerForm).Ui_PnlMain1;

                    ui_PnlMain.ShogiGui.Logdase();
                };
            }



            //----------
            // [壁置く]ボタン
            //----------
            {
                UserWidget widget = shogiGui1.Shape_PnlTaikyoku.GetWidget("BtnKabeOku");
                widget.Delegate_MouseHitEvent = (
                    object obj_shogiGui2
                    , Shape_BtnKoma btnKoma_Selected
                    ) =>
                {
                    NarabeRoomViewModel shogiGui = (NarabeRoomViewModel)obj_shogiGui2;

                    Ui_PnlMain ui_PnlMain = ((Ui_ShogiForm1)shogiGui.OwnerForm).Ui_PnlMain1;

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

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

                    shogiGui.ResponseData.ToRedraw();
                };
            }


            //----------
            // [出力切替]ボタン
            //----------
            {
                UserWidget widget = shogiGui1.Shape_PnlTaikyoku.GetWidget("BtnSyuturyokuKirikae");
                widget.Delegate_MouseHitEvent = (
                    object obj_shogiGui2
                    , Shape_BtnKoma btnKoma_Selected
                    ) =>
                {
                    NarabeRoomViewModel shogiGui = (NarabeRoomViewModel)obj_shogiGui2;

                    Ui_PnlMain ui_PnlMain = ((Ui_ShogiForm1)shogiGui.OwnerForm).Ui_PnlMain1;

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

                    case SyuturyokuKirikae.Sfen:
                        shogiGui.Shape_PnlTaikyoku.SetSyuturyokuKirikae(SyuturyokuKirikae.Html);
                        break;

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

                    shogiGui.ResponseData.OutputTxt = ResponseGedanTxt.Kifu;
                };
            }

            //----------
            // [▲]~[打]符号ボタン
            //----------
            {
                string[] buttonNames = new string[] {
                    "BtnFugo_Sente"    // [▲]~[打]符号ボタン
                    , "BtnFugo_Gote"
                    , "BtnFugo_1"
                    , "BtnFugo_2"
                    , "BtnFugo_3"
                    , "BtnFugo_4"
                    , "BtnFugo_5"
                    , "BtnFugo_6"
                    , "BtnFugo_7"
                    , "BtnFugo_8"
                    , "BtnFugo_9"
                    , "BtnFugo_Dou"
                    , "BtnFugo_Fu"
                    , "BtnFugo_Hisya"
                    , "BtnFugo_Kaku"
                    , "BtnFugo_Kyo"
                    , "BtnFugo_Kei"
                    , "BtnFugo_Gin"
                    , "BtnFugo_Kin"
                    , "BtnFugo_Oh"
                    , "BtnFugo_Gyoku"
                    , "BtnFugo_Tokin"
                    , "BtnFugo_Narikyo"
                    , "BtnFugo_Narikei"
                    , "BtnFugo_Narigin"
                    , "BtnFugo_Ryu"
                    , "BtnFugo_Uma"
                    , "BtnFugo_Yoru"
                    , "BtnFugo_Hiku"
                    , "BtnFugo_Agaru"
                    , "BtnFugo_Migi"
                    , "BtnFugo_Hidari"
                    , "BtnFugo_Sugu"
                    , "BtnFugo_Nari"
                    , "BtnFugo_Funari"
                    , "BtnFugo_Da"
                };

                foreach (string buttonName in buttonNames)
                {
                    UserWidget widget = shogiGui1.Shape_PnlTaikyoku.GetWidget(buttonName);
                    widget.Delegate_MouseHitEvent = (
                        object obj_shogiGui2
                        , Shape_BtnKoma btnKoma_Selected
                        ) =>
                    {
                        NarabeRoomViewModel shogiGui = (NarabeRoomViewModel)obj_shogiGui2;

                        Ui_PnlMain ui_PnlMain = ((Ui_ShogiForm1)shogiGui.OwnerForm).Ui_PnlMain1;

                        shogiGui.ResponseData.SetAppendInputTextString(shogiGui.Shape_PnlTaikyoku.GetWidget(buttonName).Fugo);
                    };
                }
            }


            //----------
            // [全消]ボタン
            //----------
            {
                UserWidget widget = shogiGui1.Shape_PnlTaikyoku.GetWidget("BtnFugo_Zenkesi");
                widget.Delegate_MouseHitEvent = (
                    object obj_shogiGui2
                    , Shape_BtnKoma btnKoma_Selected
                    ) =>
                {
                    NarabeRoomViewModel shogiGui = (NarabeRoomViewModel)obj_shogiGui2;

                    Ui_PnlMain ui_PnlMain = ((Ui_ShogiForm1)shogiGui.OwnerForm).Ui_PnlMain1;

                    shogiGui.ResponseData.InputTextString = "";
                };
            }


            //----------
            // [ここから採譜]ボタン
            //----------
            {
                UserWidget widget = shogiGui1.Shape_PnlTaikyoku.GetWidget("BtnFugo_KokokaraSaifu");
                widget.Delegate_MouseHitEvent = (
                    object obj_shogiGui2
                    , Shape_BtnKoma btnKoma_Selected
                    ) =>
                {
                    NarabeRoomViewModel shogiGui = (NarabeRoomViewModel)obj_shogiGui2;

                    Ui_PnlMain ui_PnlMain = ((Ui_ShogiForm1)shogiGui.OwnerForm).Ui_PnlMain1;

                    ui_PnlMain.ShogiGui.GameViewModel.Kifu.SetStartpos_KokokaraSaifu(Util_InServer.CurPside(ui_PnlMain.ShogiGui));
                    shogiGui.ResponseData.OutputTxt = ResponseGedanTxt.Kifu;
                };
            }

            //----------
            // 初期配置ボタン
            //----------
            {
                UserWidget widget = shogiGui1.Shape_PnlTaikyoku.GetWidget("BtnSyokihaichi");
                widget.Delegate_MouseHitEvent = (
                    object obj_shogiGui2
                    , Shape_BtnKoma btnKoma_Selected
                    ) =>
                {
                    NarabeRoomViewModel shogiGui = (NarabeRoomViewModel)obj_shogiGui2;

                    Ui_PnlMain ui_PnlMain = ((Ui_ShogiForm1)shogiGui.OwnerForm).Ui_PnlMain1;

                    WidgetsLoader_KifuNarabe.Perform_SyokiHaichi(ui_PnlMain);
                };
            }


            //----------
            // [向き]ボタン
            //----------
            {
                UserWidget widget = shogiGui1.Shape_PnlTaikyoku.GetWidget("BtnMuki");
                widget.Delegate_MouseHitEvent = (
                    object obj_shogiGui2
                    , Shape_BtnKoma btnKoma_Selected
                    ) =>
                {
                    NarabeRoomViewModel shogiGui = (NarabeRoomViewModel)obj_shogiGui2;

                    Ui_PnlMain ui_PnlMain = ((Ui_ShogiForm1)shogiGui.OwnerForm).Ui_PnlMain1;

                    Shape_BtnKoma movedKoma = shogiGui.Shape_PnlTaikyoku.Btn_MovedKoma();

                    RO_Star_Koma koma;
                    Finger       figKoma = Fingers.Error_1;

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

                    if (null != koma)
                    {
                        switch (koma.Pside)
                        {
                        case Playerside.P1:
                        {
                            SkyBuffer buffer_Sky = new SkyBuffer(ui_PnlMain.ShogiGui.GameViewModel.GuiSkyConst);

                            buffer_Sky.AddOverwriteStarlight(figKoma, new RO_MotionlessStarlight(
                                                                 //figKoma,
                                                                 new RO_Star_Koma(Playerside.P2,
                                                                                  koma.Masu,
                                                                                  Haiyaku184Array.Syurui(koma.Haiyaku))
                                                                 ));

                            KifuNode modifyNode = new KifuNodeImpl(
                                ui_PnlMain.ShogiGui.GameViewModel.Kifu.CurNode.Key,                                //現在の局面を流用
                                new KyokumenWrapper(new SkyConst(buffer_Sky)),
                                ((KifuNode)ui_PnlMain.ShogiGui.GameViewModel.Kifu.CurNode).Tebanside
                                );

                            // ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
                            // ここで局面データを変更します。
                            // ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
                            Util_InServer.SetCurNode_Srv(ui_PnlMain.ShogiGui, modifyNode);
                            ui_PnlMain.ShogiGui.ResponseData.ToRedraw();
                        }
                        break;

                        case Playerside.P2:
                        {
                            SkyBuffer buffer_Sky = new SkyBuffer(ui_PnlMain.ShogiGui.GameViewModel.GuiSkyConst);

                            buffer_Sky.AddOverwriteStarlight(figKoma, new RO_MotionlessStarlight(
                                                                 //figKoma,
                                                                 new RO_Star_Koma(Playerside.P1,
                                                                                  koma.Masu,
                                                                                  Haiyaku184Array.Syurui(koma.Haiyaku))
                                                                 ));

                            KifuNode modifyNode =
                                new KifuNodeImpl(
                                    ui_PnlMain.ShogiGui.GameViewModel.Kifu.CurNode.Key,        //現在の局面を流用
                                    new KyokumenWrapper(new SkyConst(buffer_Sky)),
                                    ((KifuNode)ui_PnlMain.ShogiGui.GameViewModel.Kifu.CurNode).Tebanside
                                    );


                            // ここで局面データを変更します。
                            Util_InServer.SetCurNode_Srv(ui_PnlMain.ShogiGui, modifyNode);
                            ui_PnlMain.ShogiGui.ResponseData.ToRedraw();
                        }
                        break;
                        }
                    }
                };
            }
        }
예제 #18
0
        /// <summary>
        /// HTML出力。(これは作者のホームページ用に書かれています)
        /// </summary>
        public static string CreateHtml(NarabeRoomViewModel shogiGui)
        {
            StringBuilder sb = new StringBuilder();

            sb.AppendLine("<div style=\"position:relative; left:0px; top:0px; border:solid 1px black; width:250px; height:180px;\">");

            // 後手の持ち駒
            sb.AppendLine("    <div style=\"position:absolute; left:0px; top:2px; width:30px;\">");
            sb.AppendLine("        △後手");
            sb.AppendLine("        <div style=\"margin-top:10px; width:30px;\">");
            sb.Append("            ");

            SkyConst siteiSky = shogiGui.GameViewModel.GuiSkyConst;

            siteiSky.Foreach_Starlights((Finger finger, Starlight ml, ref bool toBreak) =>
            {
                RO_Star_Koma koma = Util_Koma.AsKoma(ml.Now);


                if (Util_Masu.GetOkiba(koma.Masu) == Okiba.Gote_Komadai)
                {
                    sb.Append(KomaSyurui14Array.Fugo[(int)Haiyaku184Array.Syurui(koma.Haiyaku)]);
                }
            });

            sb.AppendLine("        </div>");
            sb.AppendLine("    </div>");

            // 将棋盤
            sb.AppendLine("    <div style=\"position:absolute; left:30px; top:2px; width:182px;\">");
            sb.AppendLine("        <table>");
            for (int dan = 1; dan <= 9; dan++)
            {
                sb.Append("        <tr>");
                for (int suji = 9; 1 <= suji; suji--)
                {
                    bool isSpace = true;

                    siteiSky.Foreach_Starlights((Finger finger, Starlight ml, ref bool toBreak) =>
                    {
                        RO_Star_Koma koma2 = Util_Koma.AsKoma(ml.Now);


                        int suji2;
                        Util_MasuNum.MasuToSuji(koma2.Masu, out suji2);

                        int dan2;
                        Util_MasuNum.MasuToDan(koma2.Masu, out dan2);

                        if (
                            Util_Masu.GetOkiba(koma2.Masu) == Okiba.ShogiBan && //盤上
                            suji2 == suji &&
                            dan2 == dan
                            )
                        {
                            if (Playerside.P2 == koma2.Pside)
                            {
                                sb.Append("<td><span class=\"koma2x\">");
                                sb.Append(KomaSyurui14Array.Fugo[(int)Haiyaku184Array.Syurui(koma2.Haiyaku)]);
                                sb.Append("</span></td>");
                                isSpace = false;
                            }
                            else
                            {
                                sb.Append("<td><span class=\"koma1x\">");
                                sb.Append(KomaSyurui14Array.Fugo[(int)Haiyaku184Array.Syurui(koma2.Haiyaku)]);
                                sb.Append("</span></td>");
                                isSpace = false;
                            }
                        }
                    });

                    if (isSpace)
                    {
                        sb.Append("<td> </td>");
                    }
                }

                sb.AppendLine("</tr>");
            }
            sb.AppendLine("        </table>");
            sb.AppendLine("    </div>");

            // 先手の持ち駒
            sb.AppendLine("    <div style=\"position:absolute; left:215px; top:2px; width:30px;\">");
            sb.AppendLine("        ▲先手");
            sb.AppendLine("        <div style=\"margin-top:10px; width:30px;\">");
            sb.Append("            ");

            siteiSky.Foreach_Starlights((Finger finger, Starlight ml, ref bool toBreak) =>
            {
                RO_Star_Koma koma = Util_Koma.AsKoma(ml.Now);

                if (Util_Masu.GetOkiba(koma.Masu) == Okiba.Sente_Komadai)
                {
                    sb.Append(KomaSyurui14Array.Fugo[(int)Haiyaku184Array.Syurui(koma.Haiyaku)]);
                }
            });

            sb.AppendLine("        </div>");
            sb.AppendLine("    </div>");

            //
            sb.AppendLine("</div>");

            return(sb.ToString());
        }
예제 #19
0
        public virtual void Step1_ReadFile(object obj_shogiGui)
        {
            NarabeRoomViewModel shogiGui = (NarabeRoomViewModel)obj_shogiGui;

            List <List <string> > rows = Util_Csv.ReadCsv(this.FileName, Encoding.UTF8);

            // 最初の1行は、列名。
            Dictionary <string, int> columnNameIndex = new Dictionary <string, int>();

            {
                int i = 0;
                foreach (string columnName in rows[0])
                {
                    columnNameIndex.Add(columnName, i);
                    i++;
                }
            }
            rows.RemoveRange(0, 1);

            foreach (List <string> row in rows)
            {
                if (0 == row.Count)
                {
                    // 列のない行は無視します。
                    goto gt_NextRow;
                }

                //
                // 名称
                //
                if (!columnNameIndex.ContainsKey("name"))
                {
                    // name列のない行は無視します。
                    goto gt_NextRow;
                }
                string name = row[columnNameIndex["name"]];

                //
                // 型
                //
                string type = "Button"; // 既定値:ボタン
                if (columnNameIndex.ContainsKey("type"))
                {
                    type = row[columnNameIndex["type"]];
                }

                //
                // ウィンドウ・ガジェット生成、パネルへ追加
                //
                UserWidget widget;
                switch (type)
                {
                case "Masu":
                    widget = new UserMasuImpl(new Shape_BtnMasuImpl());
                    break;

                default:    //Button
                    widget = new UserButtonImpl(new Shape_BtnBoxImpl());
                    break;
                }
                widget.Type = type;
                widget.Name = name;
                shogiGui.Shape_PnlTaikyoku.SetWidget(name, widget);

                //
                // 「IsLight_OnFlowB_1TumamitaiKoma」のTRUE/FALSE
                //
                if (columnNameIndex.ContainsKey("IsLight_OnFlowB_1TumamitaiKoma"))
                {
                    string value = row[columnNameIndex["IsLight_OnFlowB_1TumamitaiKoma"]];
                    bool   b;
                    if (bool.TryParse(value, out b))
                    {
                        widget.IsLight_OnFlowB_1TumamitaiKoma = b;
                    }
                }

                //
                // 「x」
                //
                if (columnNameIndex.ContainsKey("x"))
                {
                    string value = row[columnNameIndex["x"]];
                    int    x;
                    if (int.TryParse(value, out x))
                    {
                        widget.SetBounds(new Rectangle(x, widget.Bounds.Y, widget.Bounds.Width, widget.Bounds.Height));
                    }
                }

                //
                // 「y」
                //
                if (columnNameIndex.ContainsKey("y"))
                {
                    string value = row[columnNameIndex["y"]];
                    int    y;
                    if (int.TryParse(value, out y))
                    {
                        widget.SetBounds(new Rectangle(widget.Bounds.X, y, widget.Bounds.Width, widget.Bounds.Height));
                    }
                }

                //
                // 「label」
                //
                if (columnNameIndex.ContainsKey("label"))
                {
                    string value = row[columnNameIndex["label"]];
                    widget.Text = value;
                }

                //
                // 「fontSize」
                //
                if (columnNameIndex.ContainsKey("fontSize"))
                {
                    string value = row[columnNameIndex["fontSize"]];
                    float  fontSize;
                    if (float.TryParse(value, out fontSize))
                    {
                        widget.FontSize = fontSize;
                    }
                }

                //
                // 「fugo」
                //
                if (columnNameIndex.ContainsKey("fugo"))
                {
                    string value = row[columnNameIndex["fugo"]];
                    widget.Fugo = value;
                }

                //
                // 「width」
                //
                if (columnNameIndex.ContainsKey("width"))
                {
                    string value = row[columnNameIndex["width"]];
                    int    width;
                    if (int.TryParse(value, out width))
                    {
                        widget.SetBounds(new Rectangle(widget.Bounds.X, widget.Bounds.Y, width, widget.Bounds.Height));
                    }
                }

                //
                // 「height」
                //
                if (columnNameIndex.ContainsKey("height"))
                {
                    string value = row[columnNameIndex["height"]];
                    int    height;
                    if (int.TryParse(value, out height))
                    {
                        widget.SetBounds(new Rectangle(widget.Bounds.X, widget.Bounds.Y, widget.Bounds.Width, height));
                    }
                }

                //
                // 「visible」
                //
                if (columnNameIndex.ContainsKey("visible"))
                {
                    string value = row[columnNameIndex["visible"]];
                    bool   visible;
                    if (bool.TryParse(value, out visible))
                    {
                        widget.Visible = visible;
                    }
                }

                //
                // 「backColor」
                //
                if (columnNameIndex.ContainsKey("backColor"))
                {
                    string value = row[columnNameIndex["backColor"]];
                    if ("" != value)
                    {
                        widget.BackColor = Color.FromName(value);
                    }
                }

                //
                // 「okiba」
                //
                if (columnNameIndex.ContainsKey("okiba"))
                {
                    string value = row[columnNameIndex["okiba"]];
                    switch (value)
                    {
                    case "ShogiBan":
                        widget.Okiba = Okiba.ShogiBan;
                        break;

                    case "Sente_Komadai":
                        widget.Okiba = Okiba.Sente_Komadai;
                        break;

                    case "Gote_Komadai":
                        widget.Okiba = Okiba.Gote_Komadai;
                        break;

                    case "KomaBukuro":
                        widget.Okiba = Okiba.KomaBukuro;
                        break;

                    default:
                        break;
                    }
                }

                //
                // 「suji」
                //
                if (columnNameIndex.ContainsKey("suji"))
                {
                    string value = row[columnNameIndex["suji"]];
                    int    suji;
                    if (int.TryParse(value, out suji))
                    {
                        widget.Suji = suji;
                    }
                }

                //
                // 「dan」
                //
                if (columnNameIndex.ContainsKey("dan"))
                {
                    string value = row[columnNameIndex["dan"]];
                    int    dan;
                    if (int.TryParse(value, out dan))
                    {
                        widget.Dan = dan;
                    }
                }

                //
                // 「masuHandle」
                //
                if (columnNameIndex.ContainsKey("masuHandle"))
                {
                    string value = row[columnNameIndex["masuHandle"]];
                    int    masuHandle;
                    if (int.TryParse(value, out masuHandle))
                    {
                        widget.MasuHandle = masuHandle;
                    }
                }

gt_NextRow:
                ;
            }
        }
예제 #20
0
 /// <summary>
 /// ************************************************************************************************************************
 /// コンストラクターです。
 /// ************************************************************************************************************************
 /// </summary>
 public Ui_ShogiForm1(NarabeRoomViewModel owner)
 {
     this.owner = owner;
     InitializeComponent();
     this.ui_PnlMain1.ShogiGui = this.owner;
 }
예제 #21
0
        /// <summary>
        /// ************************************************************************************************************************
        /// 駒ボタンの描画はここに書きます。
        /// ************************************************************************************************************************
        /// </summary>
        /// <param name="g1"></param>
        public void Paint(Graphics g1, NarabeRoomViewModel shogiGui)
        {
            if (!this.Visible)
            {
                goto gt_EndMethod;
            }

            //----------
            // 背景
            //----------
            if (shogiGui.Shape_PnlTaikyoku.FigTumandeiruKoma == this.Finger) //>>>>> 駒をつまんでいる時
            {
                g1.FillRectangle(Brushes.Brown, this.Bounds);                // 駒の背景は茶色。
            }
            else if (shogiGui.Shape_PnlTaikyoku.MovedKoma == this.Finger)    //>>>>> 駒を移動した時
            {
                g1.FillRectangle(Brushes.DarkKhaki, this.Bounds);            // 駒の背景はカーキ。
            }
            else if (this.Light)                                             //>>>>> マウスカーソルが当たっている時
            {
            }

            // この駒について。
            RO_Star_Koma koma = Util_Koma.AsKoma(shogiGui.GameViewModel.GuiSkyConst.StarlightIndexOf(this.Finger).Now);

            //----------
            // 配役画像
            //----------
            {
                Kh185         mobility = koma.Haiyaku;
                StringBuilder sb       = new StringBuilder();
                sb.Append("../../Profile/Data/img/mobility/");
                sb.Append((int)mobility);
                sb.Append(".png");
                Image img = Image.FromFile(sb.ToString());

                if (koma.Pside == Playerside.P2)
                {
                    // 画像を180度回転させたい☆
                    img.RotateFlip(RotateFlipType.Rotate180FlipNone);
                }
                else
                {
                }

                g1.DrawImage(img, this.Bounds);
            }


            //----------
            // 枠線
            //----------
            {
                Pen pen;
                if (this.Light)
                {
                    pen = Pens.Yellow;
                }
                else
                {
                    pen = Pens.Black;
                }

                g1.DrawRectangle(pen, this.Bounds);
            }

            //----------
            // 文字
            //----------
            if (koma.Pside == Playerside.P1)
            {
                //----------
                // 先手
                //----------
                //
                // ただ描画するだけ☆
                //

                this.PaintText(g1, koma, this.Bounds.Location);
            }
            else
            {
                //----------
                // 後手
                //----------
                //
                // 180度回転させて描画するために、大掛かりになっています。
                //

                //string moji = siteiSk.KomaDoors[this.KomaHandle].Text_Label;

                //----------
                // 使用するフォント
                //----------
                //Font fnt = new Font(FontFamily.GenericSerif, 20.0f);

                //----------
                // 文字の大きさにあった白紙(b)
                //----------
                Graphics bG;
                Bitmap   bImg;
                {
                    int w;
                    int h;
                    {
                        //----------
                        // 文字の大きさを調べるための白紙(a)
                        //----------
                        Bitmap aImg = new Bitmap(1, 1);

                        //imgのGraphicsオブジェクトを取得
                        Graphics aG = Graphics.FromImage(aImg);

                        //文字列を描画したときの大きさを計算する
                        w = 48;
                        h = 48;
                        //w = (int)aG.MeasureString(moji, fnt).Width;
                        //h = (int)fnt.GetHeight(aG);

                        //if (w == 0 || h == 0)
                        //{
                        //    System.C onsole.WriteLine("moji=["+moji+"]");
                        //}

                        //if (w < 1)
                        //{
                        //    w = 1;
                        //}

                        //if (h < 1)
                        //{
                        //    h = 1;
                        //}

                        aG.Dispose();
                        aImg.Dispose();
                    }

                    bImg = new Bitmap(w, h);
                }

                // 文字描画
                bG = Graphics.FromImage(bImg);

                this.PaintText(bG, koma, new Point(0, 0)); //bG.DrawString(moji, fnt, Brushes.Black, 0, 0);

                //----------
                // 回転軸座標
                //----------
                float x = (float)this.Bounds.X + (float)this.Bounds.Width / 2;
                float y = (float)this.Bounds.Y + (float)this.Bounds.Height / 2;

                //----------
                // 回転
                //----------

                // 180度で回転するための座標を計算
                //ラジアン単位に変換
                double d = 180 / (180 / Math.PI);
                //新しい座標位置を計算する
                float x1 = x + bImg.Width * (float)Math.Cos(d);
                float y1 = y + bImg.Width * (float)Math.Sin(d);
                float x2 = x - bImg.Height * (float)Math.Sin(d);
                float y2 = y + bImg.Height * (float)Math.Cos(d);
                //PointF配列を作成
                PointF[] destinationPoints = { new PointF(x + (float)this.Bounds.Width / 2,  y + (float)this.Bounds.Height / 2),
                                               new PointF(x1 + (float)this.Bounds.Width / 2, y1 + (float)this.Bounds.Height / 2),
                                               new PointF(x2 + (float)this.Bounds.Width / 2, y2 + (float)this.Bounds.Height / 2) };

                //画像を描画
                g1.DrawImage(bImg, destinationPoints);

                //リソースを解放する
                bImg.Dispose();
                bG.Dispose();
                //fnt.Dispose();
            }


            // フィンガー
            g1.DrawString(this.Finger.ToString(), new Font(FontFamily.GenericSerif, 10.0f), Brushes.Black, this.Bounds.Location);

            ////----------
            //// デバッグ用
            ////----------
            //if (true)
            //{
            //    string moji = siteiSk.KomaDoors[this.Handle].SrcOkiba.ToString();

            //    g1.DrawString(moji, new Font(FontFamily.GenericSerif, 12.0f), Brushes.Red, this.Bounds.Location);
            //}

gt_EndMethod:
            ;
        }
예제 #22
0
        /// <summary>
        /// ************************************************************************************************************************
        /// 将棋盤の上の駒を、全て駒袋に移動します。 [クリアー]
        /// ************************************************************************************************************************
        /// </summary>
        public static void ClearKifu(NarabeRoomViewModel shogiGui, Response response)
        {
            shogiGui.GameViewModel.Kifu.Clear();// 棋譜を空っぽにします。

            SkyBuffer buffer_Sky = new SkyBuffer(shogiGui.GameViewModel.GuiSkyConst);

            int figKoma;

            // 先手
            figKoma = (int)Finger_Honshogi.SenteOh;
            buffer_Sky.AddOverwriteStarlight(figKoma, new RO_MotionlessStarlight(/*figKoma,*/ new RO_Star_Koma(Playerside.P1, Masu_Honshogi.fukuro01, PieceType.K))); //先手王
            figKoma = (int)Finger_Honshogi.GoteOh;
            buffer_Sky.AddOverwriteStarlight(figKoma, new RO_MotionlessStarlight(new RO_Star_Koma(Playerside.P2, Masu_Honshogi.fukuro02, PieceType.K)));              //後手王

            figKoma = (int)Finger_Honshogi.Hi1;
            buffer_Sky.AddOverwriteStarlight(figKoma, new RO_MotionlessStarlight(new RO_Star_Koma(Playerside.P1, Masu_Honshogi.fukuro03, PieceType.R))); //飛
            figKoma = (int)Finger_Honshogi.Hi2;
            buffer_Sky.AddOverwriteStarlight(figKoma, new RO_MotionlessStarlight(new RO_Star_Koma(Playerside.P2, Masu_Honshogi.fukuro04, PieceType.R)));

            figKoma = (int)Finger_Honshogi.Kaku1;
            buffer_Sky.AddOverwriteStarlight(figKoma, new RO_MotionlessStarlight(new RO_Star_Koma(Playerside.P1, Masu_Honshogi.fukuro05, PieceType.B))); //角
            figKoma = (int)Finger_Honshogi.Kaku2;
            buffer_Sky.AddOverwriteStarlight(figKoma, new RO_MotionlessStarlight(new RO_Star_Koma(Playerside.P2, Masu_Honshogi.fukuro06, PieceType.B)));

            figKoma = (int)Finger_Honshogi.Kin1;
            buffer_Sky.AddOverwriteStarlight(figKoma, new RO_MotionlessStarlight(new RO_Star_Koma(Playerside.P1, Masu_Honshogi.fukuro07, PieceType.G))); //金
            figKoma = (int)Finger_Honshogi.Kin2;
            buffer_Sky.AddOverwriteStarlight(figKoma, new RO_MotionlessStarlight(new RO_Star_Koma(Playerside.P1, Masu_Honshogi.fukuro08, PieceType.G)));
            figKoma = (int)Finger_Honshogi.Kin3;
            buffer_Sky.AddOverwriteStarlight(figKoma, new RO_MotionlessStarlight(new RO_Star_Koma(Playerside.P2, Masu_Honshogi.fukuro09, PieceType.G)));
            figKoma = (int)Finger_Honshogi.Kin4;
            buffer_Sky.AddOverwriteStarlight(figKoma, new RO_MotionlessStarlight(new RO_Star_Koma(Playerside.P2, Masu_Honshogi.fukuro10, PieceType.G)));

            figKoma = (int)Finger_Honshogi.Gin1;
            buffer_Sky.AddOverwriteStarlight(figKoma, new RO_MotionlessStarlight(new RO_Star_Koma(Playerside.P1, Masu_Honshogi.fukuro11, PieceType.S))); //銀
            figKoma = (int)Finger_Honshogi.Gin2;
            buffer_Sky.AddOverwriteStarlight(figKoma, new RO_MotionlessStarlight(new RO_Star_Koma(Playerside.P1, Masu_Honshogi.fukuro12, PieceType.S)));
            figKoma = (int)Finger_Honshogi.Gin3;
            buffer_Sky.AddOverwriteStarlight(figKoma, new RO_MotionlessStarlight(new RO_Star_Koma(Playerside.P2, Masu_Honshogi.fukuro13, PieceType.S)));
            figKoma = (int)Finger_Honshogi.Gin4;
            buffer_Sky.AddOverwriteStarlight(figKoma, new RO_MotionlessStarlight(new RO_Star_Koma(Playerside.P2, Masu_Honshogi.fukuro14, PieceType.S)));

            figKoma = (int)Finger_Honshogi.Kei1;
            buffer_Sky.AddOverwriteStarlight(figKoma, new RO_MotionlessStarlight(new RO_Star_Koma(Playerside.P1, Masu_Honshogi.fukuro15, PieceType.N))); //桂
            figKoma = (int)Finger_Honshogi.Kei2;
            buffer_Sky.AddOverwriteStarlight(figKoma, new RO_MotionlessStarlight(new RO_Star_Koma(Playerside.P1, Masu_Honshogi.fukuro16, PieceType.N)));
            figKoma = (int)Finger_Honshogi.Kei3;
            buffer_Sky.AddOverwriteStarlight(figKoma, new RO_MotionlessStarlight(new RO_Star_Koma(Playerside.P2, Masu_Honshogi.fukuro17, PieceType.N)));
            figKoma = (int)Finger_Honshogi.Kei4;
            buffer_Sky.AddOverwriteStarlight(figKoma, new RO_MotionlessStarlight(new RO_Star_Koma(Playerside.P2, Masu_Honshogi.fukuro18, PieceType.N)));

            figKoma = (int)Finger_Honshogi.Kyo1;
            buffer_Sky.AddOverwriteStarlight(figKoma, new RO_MotionlessStarlight(new RO_Star_Koma(Playerside.P1, Masu_Honshogi.fukuro19, PieceType.L))); //香
            figKoma = (int)Finger_Honshogi.Kyo2;
            buffer_Sky.AddOverwriteStarlight(figKoma, new RO_MotionlessStarlight(new RO_Star_Koma(Playerside.P1, Masu_Honshogi.fukuro20, PieceType.L)));
            figKoma = (int)Finger_Honshogi.Kyo3;
            buffer_Sky.AddOverwriteStarlight(figKoma, new RO_MotionlessStarlight(new RO_Star_Koma(Playerside.P2, Masu_Honshogi.fukuro21, PieceType.L)));
            figKoma = (int)Finger_Honshogi.Kyo4;
            buffer_Sky.AddOverwriteStarlight(figKoma, new RO_MotionlessStarlight(new RO_Star_Koma(Playerside.P2, Masu_Honshogi.fukuro22, PieceType.L)));

            figKoma = (int)Finger_Honshogi.Fu1;
            buffer_Sky.AddOverwriteStarlight(figKoma, new RO_MotionlessStarlight(new RO_Star_Koma(Playerside.P1, Masu_Honshogi.fukuro23, PieceType.P))); //歩
            figKoma = (int)Finger_Honshogi.Fu2;
            buffer_Sky.AddOverwriteStarlight(figKoma, new RO_MotionlessStarlight(new RO_Star_Koma(Playerside.P1, Masu_Honshogi.fukuro24, PieceType.P)));
            figKoma = (int)Finger_Honshogi.Fu3;
            buffer_Sky.AddOverwriteStarlight(figKoma, new RO_MotionlessStarlight(new RO_Star_Koma(Playerside.P1, Masu_Honshogi.fukuro25, PieceType.P)));
            figKoma = (int)Finger_Honshogi.Fu4;
            buffer_Sky.AddOverwriteStarlight(figKoma, new RO_MotionlessStarlight(new RO_Star_Koma(Playerside.P1, Masu_Honshogi.fukuro26, PieceType.P)));
            figKoma = (int)Finger_Honshogi.Fu5;
            buffer_Sky.AddOverwriteStarlight(figKoma, new RO_MotionlessStarlight(new RO_Star_Koma(Playerside.P1, Masu_Honshogi.fukuro27, PieceType.P)));
            figKoma = (int)Finger_Honshogi.Fu6;
            buffer_Sky.AddOverwriteStarlight(figKoma, new RO_MotionlessStarlight(new RO_Star_Koma(Playerside.P1, Masu_Honshogi.fukuro28, PieceType.P)));
            figKoma = (int)Finger_Honshogi.Fu7;
            buffer_Sky.AddOverwriteStarlight(figKoma, new RO_MotionlessStarlight(new RO_Star_Koma(Playerside.P1, Masu_Honshogi.fukuro29, PieceType.P)));
            figKoma = (int)Finger_Honshogi.Fu8;
            buffer_Sky.AddOverwriteStarlight(figKoma, new RO_MotionlessStarlight(new RO_Star_Koma(Playerside.P1, Masu_Honshogi.fukuro30, PieceType.P)));
            figKoma = (int)Finger_Honshogi.Fu9;
            buffer_Sky.AddOverwriteStarlight(figKoma, new RO_MotionlessStarlight(new RO_Star_Koma(Playerside.P1, Masu_Honshogi.fukuro31, PieceType.P)));

            figKoma = (int)Finger_Honshogi.Fu10;
            buffer_Sky.AddOverwriteStarlight(figKoma, new RO_MotionlessStarlight(new RO_Star_Koma(Playerside.P2, Masu_Honshogi.fukuro32, PieceType.P))); //歩
            figKoma = (int)Finger_Honshogi.Fu11;
            buffer_Sky.AddOverwriteStarlight(figKoma, new RO_MotionlessStarlight(new RO_Star_Koma(Playerside.P2, Masu_Honshogi.fukuro33, PieceType.P)));
            figKoma = (int)Finger_Honshogi.Fu12;
            buffer_Sky.AddOverwriteStarlight(figKoma, new RO_MotionlessStarlight(new RO_Star_Koma(Playerside.P2, Masu_Honshogi.fukuro34, PieceType.P)));
            figKoma = (int)Finger_Honshogi.Fu13;
            buffer_Sky.AddOverwriteStarlight(figKoma, new RO_MotionlessStarlight(new RO_Star_Koma(Playerside.P2, Masu_Honshogi.fukuro35, PieceType.P)));
            figKoma = (int)Finger_Honshogi.Fu14;
            buffer_Sky.AddOverwriteStarlight(figKoma, new RO_MotionlessStarlight(new RO_Star_Koma(Playerside.P2, Masu_Honshogi.fukuro36, PieceType.P)));
            figKoma = (int)Finger_Honshogi.Fu15;
            buffer_Sky.AddOverwriteStarlight(figKoma, new RO_MotionlessStarlight(new RO_Star_Koma(Playerside.P2, Masu_Honshogi.fukuro37, PieceType.P)));
            figKoma = (int)Finger_Honshogi.Fu16;
            buffer_Sky.AddOverwriteStarlight(figKoma, new RO_MotionlessStarlight(new RO_Star_Koma(Playerside.P2, Masu_Honshogi.fukuro38, PieceType.P)));
            figKoma = (int)Finger_Honshogi.Fu17;
            buffer_Sky.AddOverwriteStarlight(figKoma, new RO_MotionlessStarlight(new RO_Star_Koma(Playerside.P2, Masu_Honshogi.fukuro39, PieceType.P)));
            figKoma = (int)Finger_Honshogi.Fu18;
            buffer_Sky.AddOverwriteStarlight(figKoma, new RO_MotionlessStarlight(new RO_Star_Koma(Playerside.P2, Masu_Honshogi.fukuro40, PieceType.P)));


            {
                KifuNode newNode = new KifuNodeImpl(
                    Util_Sky.NullObjectMove,        //ルートなので
                    new KyokumenWrapper(new SkyConst(buffer_Sky)),
                    Playerside.P2
                    );

                Util_InServer.SetCurNode_Srv(shogiGui, newNode);
                response.ToRedraw();

                shogiGui.GameViewModel.Kifu.SetProperty(KifuTreeImpl.PropName_Startpos, "9/9/9/9/9/9/9/9/9 b K1R1B1G2S2N2L2P9 k1r1b1g2s2n2l2p9 1");
            }
        }
예제 #23
0
 public TimedC(NarabeRoomViewModel shogiGui)
 {
     this.shogiGui         = shogiGui;
     this.SaiseiEventQueue = new Queue <SaiseiEventState>();
 }
예제 #24
0
 public TimedB(NarabeRoomViewModel shogiGui)
 {
     this.shogiGui        = shogiGui;
     this.MouseEventQueue = new Queue <MouseEventState>();
 }
예제 #25
0
 public TimedA(NarabeRoomViewModel shogiGui)
 {
     this.shogiGui = shogiGui;
 }
예제 #26
0
 public static Node <ShootingStarlightable, KyokumenWrapper> CurNode(NarabeRoomViewModel shogiGui)
 {
     return(shogiGui.GameViewModel.Kifu.CurNode);
 }
예제 #27
0
        /// <summary>
        /// 入力欄の表示・出力欄の表示・再描画
        ///
        /// このメインパネルに何かして欲しいことがあれば、
        /// RequestForMain に要望を入れて、この関数を呼び出してください。
        ///
        /// 同時には処理できない項目もあります。
        /// </summary>
        /// <param name="response"></param>
        public void Response(
            Mutex mutex, NarabeRoomViewModel shogiGui)
        {
            //------------------------------------------------------------
            // 駒の座標再計算
            //------------------------------------------------------------
            if (shogiGui.ResponseData.Is_RedrawStarlights())
            {
                this.ShogiGui.GameViewModel.GuiSkyConst.Foreach_Starlights((Finger finger, Starlight light, ref bool toBreak) =>
                {
                    Util_InGui.Redraw_KomaLocation(finger, this.ShogiGui);
                });
            }
            shogiGui.ResponseData.Clear_RedrawStarlights();

            //------------------------------
            // 入力欄の表示
            //------------------------------
            if (shogiGui.ResponseData.CanInputTextFlag)
            {
                // 指定のテキストで上書きします。
                this.SetInput1Text(shogiGui.ResponseData.InputTextString);
            }
            else if (shogiGui.ResponseData.CanAppendInputTextFlag)
            {
                // 指定のテキストを後ろに足します。
                this.AppendInput1Text(shogiGui.ResponseData.AppendInputTextString);
                shogiGui.ResponseData.SetAppendInputTextString("");//要求の解除
            }

            //------------------------------
            // 出力欄(上・下段)の表示
            //------------------------------
            switch (shogiGui.ResponseData.OutputTxt)
            {
            case ResponseGedanTxt.Clear:
            {
                // 出力欄(上下段)を空っぽにします。
                this.WriteLine_Syuturyoku("");

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

            case ResponseGedanTxt.Kifu:
            {
                // 出力欄(上下段)に、棋譜を出力します。
                switch (this.ShogiGui.Shape_PnlTaikyoku.SyuturyokuKirikae)
                {
                case SyuturyokuKirikae.Japanese:
                    this.WriteLine_Syuturyoku(KirokuGakari.ToJapaneseKifuText(this.ShogiGui.GameViewModel.Kifu));
                    break;

                case SyuturyokuKirikae.Sfen:
                    this.WriteLine_Syuturyoku(KirokuGakari.ToSfen_PositionString(this.ShogiGui.GameViewModel.Kifu));
                    break;

                case SyuturyokuKirikae.Html:
                    this.WriteLine_Syuturyoku(Ui_PnlMain.CreateHtml(this.ShogiGui));
                    break;
                }

                // ログ
                Logger.Trace(this.txtOutput1.Text);
            }
            break;

            default:
                // スルー
                break;
            }

            //------------------------------
            // 再描画
            //------------------------------
            if (shogiGui.ResponseData.IsRedraw())
            {
                this.Refresh();

                shogiGui.ResponseData.ClearRedraw();
            }
        }