示例#1
0
        /// <summary>
        /// 「棋譜ツリーのカレントノード」の差替え、
        /// および
        /// 「GUI用局面データ」との同期。
        ///
        /// (1) 駒をつまんでいるときに、マウスの左ボタンを放したとき。
        /// (2) 駒の移動先の升の上で、マウスの左ボタンを放したとき。
        /// (3) 成る/成らないダイアログボックスが出たときに、マウスの左ボタンを押下したとき。
        /// </summary>
        /// <param name="kifu"></param>
        /// <param name="newNode"></param>
        public static void SetCurNode_Srv(
            Model_Taikyoku model_Taikyoku,// Taikyokuの内容をManualへ移す。
            Model_Manual model_Manual,
            Node <IMove, KyokumenWrapper> newNode,
            out string jsaFugoStr
            )
        {
            Debug.Assert(null != newNode, "新規ノードがヌル。");

            model_Taikyoku.Kifu.SetCurNode(newNode);

            model_Manual.SetGuiSky(newNode.Value.KyokumenConst);
            model_Manual.GuiTemezumi = model_Taikyoku.Kifu.CurNode.Value.KyokumenConst.Temezumi;
            model_Manual.GuiPside    = model_Taikyoku.Kifu.CurNode.Value.KyokumenConst.KaisiPside;

            jsaFugoStr = ConvMoveStrJsa.ToMoveStrJsa(newNode);
        }
示例#2
0
        public static bool Komaokuri_Gui(string restText, MainGui_Csharp shogiGui)
        {
            //------------------------------
            // 符号表示
            //------------------------------
            {
                Node <IMove, KyokumenWrapper> node6 = shogiGui.Link_Server.Model_Taikyoku.Kifu.CurNode;

                // [コマ送り][再生]ボタン
                string jsaFugoStr = ConvMoveStrJsa.ToMoveStrJsa(node6);

                shogiGui.Shape_PnlTaikyoku.SetFugo(jsaFugoStr);
            }



            shogiGui.RepaintRequest.SetFlag_RecalculateRequested(); // 再描画1

            shogiGui.RepaintRequest.NyuryokuText = restText;        //追加
            shogiGui.RepaintRequest.SetFlag_RefreshRequest();       // GUIに通知するだけ。


            return(true);
        }
示例#3
0
        /// <summary>
        /// ************************************************************************************************************************
        /// [巻戻し]ボタン
        /// ************************************************************************************************************************
        /// </summary>
        public static bool Makimodosi_Srv(
            out Finger movedKoma,
            out Finger foodKoma,
            out string jsaFugoStr,
            Model_Taikyoku model_Taikyoku
            )
        {
            bool successful = false;

            //------------------------------
            // 棋譜から1手削ります
            //------------------------------
            Node <IMove, KyokumenWrapper> removeeLeaf = model_Taikyoku.Kifu.CurNode;
            int korekaranoTemezumi = removeeLeaf.Value.KyokumenConst.Temezumi - 1;//1手前へ。

            if (removeeLeaf.IsRoot())
            {
                // ルート
                jsaFugoStr = "×";
                movedKoma  = Fingers.Error_1;
                foodKoma   = Fingers.Error_1;
                goto gt_EndMethod;
            }


            //------------------------------
            // 符号
            //------------------------------
            // [巻戻し]ボタン
            jsaFugoStr = ConvMoveStrJsa.ToMoveStrJsa(removeeLeaf);



            //------------------------------
            // 前の手に戻します
            //------------------------------
            IttemodosuResult ittemodosuResult = new IttemodosuResultImpl(Fingers.Error_1, Fingers.Error_1, null, PieceType.None, null);

            {
                //Ks14 foodKomaSyurui;//取った駒があれば、取った駒の種類。
                //SkyConst susunda_Sky_orNull;
                //
                // 一手巻き戻す
                //
                Util_IttemodosuRoutine.Before1(
                    new IttemodosuArgImpl(
                        model_Taikyoku.Kifu.CurNode,
                        removeeLeaf.Key,
                        korekaranoTemezumi
                        ),
                    out ittemodosuResult
                    );
                Util_IttemodosuRoutine.Before2(
                    ref ittemodosuResult
                    );
                Util_IttemodosuRoutine.After3_ChangeCurrent(
                    model_Taikyoku.Kifu
                    );
            }
            movedKoma = ittemodosuResult.FigMovedKoma;
            foodKoma  = ittemodosuResult.FigFoodKoma;

            successful = true;


gt_EndMethod:
            return(successful);
        }
示例#4
0
        /// <summary>
        /// 合法手リストの表示
        /// </summary>
        /// <param name="uc_Main"></param>
        public static void Aa_ShowGohosyu2(LearningData learningData, Uc_Main uc_Main)
        {
            //----------------------------------------
            // フォルダー作成
            //----------------------------------------
            //this.Kifu.CreateAllFolders($"{Const_Filepath.LOGS}temp", 4);

            {
                //----------------------------------------
                // 合法手のリストを作成
                //----------------------------------------
                List <GohosyuListItem> list = new List <GohosyuListItem>();
                //uc_Main.LstGohosyu.Items.Clear();
                int itemNumber = 0;
                ((KifuNode)learningData.Kifu.CurNode).Foreach_ChildNodes((string key, Node <IMove, KyokumenWrapper> node, ref bool toBreak) =>
                {
#if DEBUG || LEARN
                    KyHyokaMeisai_Koumoku komawariMeisai;
                    KyHyokaMeisai_Koumoku ppMeisai;
#endif
                    learningData.DoScoreing_ForLearning(
                        (KifuNode)node
#if DEBUG || LEARN
                        ,
                        out komawariMeisai,
                        out ppMeisai
#endif
                        );

                    GohosyuListItem item = new GohosyuListItem(
                        itemNumber,
                        key,
                        ConvMoveStrJsa.ToMoveStrJsa(node)
#if DEBUG || LEARN
                        ,
                        komawariMeisai,
                        ppMeisai
#endif
                        );
                    list.Add(item);

                    itemNumber++;
                });

                //----------------------------------------
                // ソート
                //----------------------------------------
                //
                // 先手は正の数、後手は負の数で、絶対値の高いもの順。
                list.Sort((GohosyuListItem a, GohosyuListItem b) =>
                {
                    int result;

                    int aScore =
#if DEBUG || LEARN
                        (int)(
                            a.KomawariMeisai.UtiwakeValue +
                            a.PpMeisai.UtiwakeValue);
#else
                        0;
#endif

                    int bScore =
#if DEBUG || LEARN
                        (int)(
                            b.KomawariMeisai.UtiwakeValue +
                            b.PpMeisai.UtiwakeValue);
#else
                        0;
#endif

                    switch (learningData.Kifu.CurNode.Value.KyokumenConst.KaisiPside)
                    {
                    case Playerside.P1: result = bScore - aScore; break;

                    case Playerside.P2: result = aScore - bScore; break;

                    default: result = 0; break;
                    }
                    return(result);
                });



                uc_Main.LstGohosyu.Items.Clear();
                uc_Main.LstGohosyu.Items.AddRange(list.ToArray());
                //foreach (GohosyuListItem item in list)
                //{
                //    uc_Main.LstGohosyu.Items.Add(item);
                //}
            }
        }