Ejemplo n.º 1
0
        /// <summary>
        /// 棋譜(string型)の読み込みコマンド
        /// ファイルから読み込むには、MainMenu.ReadKifuFile()のようなメソッドを用いること。
        /// </summary>
        /// <param name="kifuText"></param>
        public void KifuReadCommand(string kifuText)
        {
            AddCommand(
                () =>
            {
                if (GameMode.CanUserMove())
                {
                    // 対局中ではないので、EnableKifuList == falseになっているが、
                    // 一時的にこれをtrueにしないと、読み込んだ棋譜に対して、Tree.KifuListが同期しない。
                    // ゆえに、読み込みの瞬間だけtrueにして、そのあとfalseに戻す。
                    kifuManager.EnableKifuList = true;
                    var error = kifuManager.FromString(kifuText);
                    kifuManager.EnableKifuList = false;

                    if (error != null)
                    {
                        TheApp.app.MessageShow("棋譜の読み込みに失敗しました。\n" + error, MessageShowType.Error);

                        kifuManager.Init(); // 不正な局面のままになるとまずいので初期化。
                    }
                    else
                    {
                        // 読み込みが完了すれば自動的に末尾の局面に行っているはずだが、
                        // 棋譜ウィンドウを更新した結果、分岐局面などに戻ってしまうといけない。

                        // 棋譜に書かれていた持ち時間設定・残り時間を画面に反映させる。(GameSettingには反映させない)
                        PlayTimers.SetKifuTimeSettings(kifuManager.Tree.KifuTimeSettings);
                        PlayTimers.SetKifuMoveTimes(kifuManager.Tree.GetKifuMoveTimes());
                        UpdateTimeString();

                        // 末尾の局面に移動するコマンドを叩いておく。
                        UpdateKifuSelectedIndex(int.MaxValue);

                        // -- 棋譜上の名前を表示名に反映させる。

                        foreach (var c in All.Colors())
                        {
                            var name = kifuManager.KifuHeader.GetPlayerName(c);
                            SetPlayerName(c, name);
                        }
                    }

                    // 棋譜が綺麗になった扱いにする。(この棋譜はファイルなどに丸ごと保存されているはずであるから)
                    KifuDirty = false;

                    // 駒を持ち上げていたりしたらそれをリセットする必要があるので。
                    RaisePropertyChanged("TurnChanged");
                }
            });
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 棋譜の読み込みコマンド
        /// </summary>
        /// <param name="kifuText"></param>
        public void KifuReadCommand(string kifuText)
        {
            AddCommand(
                () =>
            {
                if (GameMode.CanUserMove())
                {
                    // 対局中ではないので、EnableKifuList == falseになっているが、
                    // 一時的にこれをtrueにしないと、読み込んだ棋譜に対して、Tree.KifuListが同期しない。
                    // ゆえに、読み込みの瞬間だけtrueにして、そのあとfalseに戻す。
                    kifuManager.EnableKifuList = true;
                    var error = kifuManager.FromString(kifuText);
                    kifuManager.EnableKifuList = false;

                    if (error != null)
                    {
                        TheApp.app.MessageShow("棋譜の読み込みに失敗しました。\n" + error, "読み込みエラー");

                        kifuManager.Init(); // 不正な局面のままになるとまずいので初期化。
                    }
                    else
                    {
                        // 読み込みが完了すれば自動的に末尾の局面に行っているはずだが、
                        // 棋譜ウィンドウを更新した結果、分岐局面などに戻ってしまうといけない。

                        // 棋譜に書かれていた持ち時間設定・残り時間を画面に反映させる。(GameSettingには反映させない)
                        PlayTimers.SetKifuTimeSettings(kifuManager.Tree.KifuTimeSettings);
                        PlayTimers.SetKifuMoveTimes(kifuManager.Tree.GetKifuMoveTimes());
                        UpdateTimeString();

                        // 末尾の局面に移動するコマンドを叩いておく。
                        RaisePropertyChanged("SetKifuListIndex", kifuManager.KifuList.Count - 1);
                    }
                }
            });
        }
Ejemplo n.º 3
0
        /// <summary>
        /// 棋譜(string型)の読み込みコマンド
        /// ファイルから読み込むには、MainMenu.ReadKifuFile()のようなメソッドを用いること。
        ///
        /// merge == trueなら、棋譜を分岐棋譜としてマージする。
        /// dirtyは、このあと、KifuDirty(棋譜が汚れているかのフラグ)に設定される値。
        /// </summary>
        /// <param name="kifuText"></param>
        public void KifuReadCommand(string kifuText, bool merge = false, bool dirty = false)
        {
            AddCommand(
                () =>
            {
                if (GameMode.CanUserMove())
                {
                    // 対局中ではないので、EnableKifuList == falseになっているが、
                    // 一時的にこれをtrueにしないと、読み込んだ棋譜に対して、Tree.KifuListが同期しない。
                    // ゆえに、読み込みの瞬間だけtrueにして、そのあとfalseに戻す。
                    kifuManager.EnableKifuList = true;

                    var oldSelectedIndex = kifuManager.Tree.pliesFromRoot;

                    var error = merge ? kifuManager.MergeFromString(kifuText) : kifuManager.FromString(kifuText);
                    // マージした場合、その棋譜の末尾に行って欲しい気もするが…。

                    kifuManager.EnableKifuList = false;

                    if (error != null)
                    {
                        TheApp.app.MessageShow((merge ? "棋譜のマージに失敗しました。\n" : "棋譜の読み込みに失敗しました。\n") + error, MessageShowType.Error);

                        kifuManager.Init(); // 不正な局面のままになるとまずいので初期化。
                    }
                    else
                    {
                        // 読み込みが完了すれば自動的に末尾の局面に行っているはずだが、
                        // 棋譜ウィンドウを更新した結果、分岐局面などに戻ってしまうといけない。

                        // 棋譜に書かれていた持ち時間設定・残り時間を画面に反映させる。(GameSettingには反映させない)
                        PlayTimers.SetKifuTimeSettings(kifuManager.Tree.KifuTimeSettings);
                        PlayTimers.SetKifuMoveTimes(kifuManager.Tree.GetKifuMoveTimes());
                        UpdateTimeString();

                        // 末尾の局面に移動するコマンドを叩いておく。
                        // マージ時は、マージ起点に移動してやる。たぶん現在の選択していた行がそれ。
                        if (!merge)
                        {
                            UpdateKifuSelectedIndex(int.MaxValue);
                        }
                        else
                        {
                            UpdateKifuSelectedIndex(oldSelectedIndex + 1);
                        }

                        // -- 棋譜上の名前を表示名に反映させる。

                        foreach (var c in All.Colors())
                        {
                            var name = kifuManager.KifuHeader.GetPlayerName(c);
                            SetPlayerName(c, name);
                        }
                    }

                    // 棋譜が綺麗になった扱いにする。(この棋譜はファイルなどに丸ごと保存されているはずであるから)
                    // ただし、mergeのときは汚れたという扱いにする。(ファイルに残っていないので)
                    KifuDirty = dirty;

                    // 駒を持ち上げていたりしたらそれをリセットする必要があるので。
                    RaisePropertyChanged("TurnChanged");
                }
            });
        }