/// <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); }
/// <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); // ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ // 棋譜は変更された。 // ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ }