/// <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); }
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); }
/// <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); }
/// <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); //} } }