public override void Step() { // 将棋エンジンからの入力が、input99 に溜まるものとします。 if (0 < this.mainGui.ConsoleWindowGui.InputString99.Length) { #if DEBUG string message = $"(^o^)timer入力 input99=[{this.mainGui.ConsoleWindowGui.InputString99}]"; Logger.Trace(message); #endif // // 棋譜入力テキストボックスに、指し手「(例)6a6b」を入力するための一連の流れです。 // { this.mainGui.RepaintRequest = new RepaintRequestImpl(); this.mainGui.RepaintRequest.SetNyuryokuTextTail(this.mainGui.ConsoleWindowGui.InputString99); // 受信文字列を、上部テキストボックスに入れるよう、依頼します。 this.mainGui.Response("Timer"); // テキストボックスに、受信文字列を入れます。 this.mainGui.ConsoleWindowGui.ClearInputString99(); // 受信文字列の要求を空っぽにします。 } // // コマ送り // { string restText = Util_Function_Csharp.ReadLine_FromTextbox(); //if ("noop" == restText) //{ // this.mainGui.Link_Server.EngineClient.ShogiEngineProcessWrapper.Send_Ok(); // restText = ""; //} Util_Functions_Server.Komaokuri_Srv( ref restText, this.mainGui.Link_Server.Model_Taikyoku, this.mainGui.Model_Manual); // 棋譜の[コマ送り]を実行します。 Util_Function_Csharp.Komaokuri_Gui(restText, this.mainGui); //追加 // ↑チェンジターン済み Util_Menace.Menace((MainGui_Csharp)this.mainGui); // メナス } // // ここで、テキストボックスには「(例)6a6b」が入っています。 // // // 駒を動かす一連の流れです。 // { //this.ShogiGui.ResponseData.InputTextString = "";//空っぽにすることを要求する。 this.mainGui.Response("Timer");// GUIに反映させます。 } } }
public void LaunchForm_AsBody() { ((Form1_Shogiable)this.OwnerForm).Delegate_Form1_Load = (MainGui_Csharp shogiGui, object sender, EventArgs e) => { // // ボタンのプロパティを外部ファイルから設定 // foreach (WidgetsLoader widgetsLoader in this.WidgetLoaders) { widgetsLoader.Step1_ReadFile();//shogiGui.Shape_PnlTaikyoku } foreach (WidgetsLoader widgetsLoader in this.WidgetLoaders) { widgetsLoader.Step2_Compile_AllWidget(shogiGui); } foreach (WidgetsLoader widgetsLoader in this.WidgetLoaders) { widgetsLoader.Step3_SetEvent(shogiGui); } }; this.ReadStyle_ToForm((Form1_Shogiable)this.OwnerForm); // // FIXME: [初期配置]を1回やっておかないと、[コマ送り]ボタン等で不具合が出てしまう。 // { Util_Function_Csharp.Perform_SyokiHaichi( ((Form1_Shogiable)this.OwnerForm).Uc_Form1Main.MainGui ); } Application.Run(this.OwnerForm); }
/// <summary> /// ************************************************************************************************************************ /// 入力欄の表示・出力欄の表示・再描画 /// ************************************************************************************************************************ /// /// このメインパネルに何かして欲しいことがあれば、 /// RequestForMain に要望を入れて、この関数を呼び出してください。 /// /// 同時には処理できない項目もあります。 /// </summary> /// <param name="response"></param> public void Solute_RepaintRequest( Form1_Mutex mutex, MainGui_Csharp mainGui) { Uc_Form2Main form2 = ((Form1_Shogi)this.ParentForm).Form2_Console.Uc_Form2Main; //------------------------------------------------------------ // 駒の座標再計算 //------------------------------------------------------------ if (mainGui.RepaintRequest.Is_StarlightsRecalculateRequested()) { this.MainGui.Model_Manual.GuiSkyConst.Foreach_Starlights((Finger finger, IMoveHalf light, ref bool toBreak) => { Util_Function_Csharp.Redraw_KomaLocation(finger, this.MainGui); }); } mainGui.RepaintRequest.Clear_StarlightsRecalculateRequested(); //------------------------------ // 入力欄の表示 //------------------------------ if (mainGui.RepaintRequest.IsRequested_RepaintNyuryokuText) { // 指定のテキストで上書きします。 form2.SetInputareaText(mainGui.RepaintRequest.NyuryokuText); } else if (mainGui.RepaintRequest.IsRequested_NyuryokuTextTail) { // 指定のテキストを後ろに足します。 form2.AppendInputareaText(mainGui.RepaintRequest.NyuryokuTextTail); mainGui.RepaintRequest.SetNyuryokuTextTail("");//要求の解除 } //------------------------------ // 出力欄(上・下段)の表示 //------------------------------ switch (mainGui.RepaintRequest.SyuturyokuRequest) { case RepaintRequestGedanTxt.Clear: { // 出力欄(上下段)を空っぽにします。 form2.WriteLine_Syuturyoku(""); // ログ //Logger.Trace( ""); //Logger.Trace( ""); } break; case RepaintRequestGedanTxt.Kifu: { // 出力欄(上下段)に、棋譜を出力します。 switch (this.MainGui.SyuturyokuKirikae) { case SyuturyokuKirikae.Japanese: form2.WriteLine_Syuturyoku(Util_KirokuGakari.ToJsaFugoListString(this.MainGui.Link_Server.Model_Taikyoku.Kifu, "Ui_PnlMain.Response")); break; case SyuturyokuKirikae.Sfen: form2.WriteLine_Syuturyoku(Util_KirokuGakari.ToSfen_PositionCommand(this.MainGui.Link_Server.Model_Taikyoku.Kifu)); break; case SyuturyokuKirikae.Html: form2.WriteLine_Syuturyoku(Uc_Form1Main.CreateHtml(this.MainGui)); break; } #if DEBUG // ログ Logger.Trace(form2.GetOutputareaText()); #endif } break; default: // スルー break; } //------------------------------ // 再描画 //------------------------------ if (mainGui.RepaintRequest.IsRefreshRequested()) { this.Refresh(); mainGui.RepaintRequest.ClearRefreshRequest(); } }
public override void Step() { // 入っているマウス操作イベントは、全部捨てていきます。 SaiseiEventState[] queue = this.SaiseiEventQueue.ToArray(); this.SaiseiEventQueue.Clear(); foreach (SaiseiEventState eventState in queue) { switch (eventState.Name2) { case SaiseiEventStateName.Start: { //MessageBox.Show("再生を実行します2。"); mainGui.RepaintRequest = new RepaintRequestImpl(); this.restText = Util_Function_Csharp.ReadLine_FromTextbox(); this.SaiseiEventQueue.Enqueue(new SaiseiEventState(SaiseiEventStateName.Step)); } break; case SaiseiEventStateName.Step: { bool toBreak = false; if ("" == restText) { toBreak = true; } else { // [コマ送り]に成功している間、コマ送りし続けます。 Util_Functions_Server.ReadLine_TuginoItteSusumu_Srv( ref restText, this.mainGui.Link_Server.Model_Taikyoku, this.mainGui.Model_Manual, out toBreak, "再生ボタン" ); //TimedC.Saisei_Step(restText, shogiGui);// 再描画(ループが1回も実行されなかったとき用) // 他のアプリが固まらないようにします。 Application.DoEvents(); // 早すぎると描画されないので、ウェイトを入れます。 System.Threading.Thread.Sleep(90); //45 //------------------------------ // 再描画 //------------------------------ Util_Function_Csharp.Komaokuri_Gui(restText, mainGui); //追加 //------------------------------ // メナス //------------------------------ Util_Menace.Menace(mainGui); mainGui.Response("Saisei"); // 再描画 } if (toBreak) { // 終了 this.SaiseiEventQueue.Enqueue(new SaiseiEventState(SaiseiEventStateName.Finished)); } else { // 続行 this.SaiseiEventQueue.Enqueue(new SaiseiEventState(SaiseiEventStateName.Step)); } } break; } } }
/// <summary> /// 成る/成らない /// </summary> /// <param name="mainGui"></param> /// <param name="btnTumandeiruKoma"></param> /// <param name="logTag"></param> private void After_NaruNaranai_ButtonPushed( MainGui_Csharp mainGui , Shape_BtnKoma btnTumandeiruKoma ) { // 駒を動かします。 { // GuiからServerへ渡す情報 PieceType syurui; IMoveHalf dst; Util_Function_Csharp.Komamove1a_49Gui(out syurui, out dst, btnTumandeiruKoma, mainGui.Shape_PnlTaikyoku.NaruBtnMasu, mainGui); // ServerからGuiへ渡す情報 bool torareruKomaAri; RO_Star koma_Food_after; Util_Functions_Server.Komamove1a_50Srv(out torareruKomaAri, out koma_Food_after, dst, btnTumandeiruKoma.Koma, Util_Starlightable.AsKoma(dst.Now), mainGui.Model_Manual); Util_Function_Csharp.Komamove1a_51Gui(torareruKomaAri, koma_Food_after, mainGui); } { //---------- // 移動済表示 //---------- mainGui.Shape_PnlTaikyoku.SetHMovedKoma(btnTumandeiruKoma.Finger); //------------------------------ // 棋譜に符号を追加(マウスボタンが放されたとき)TODO:まだ早い。駒が成るかもしれない。 //------------------------------ // 棋譜 IMove move = new RO_Starbeam( //btnTumandeiruKoma.Finger, mainGui.Shape_PnlTaikyoku.MouseStarlightOrNull2.Now, mainGui.Model_Manual.GuiSkyConst.StarlightIndexOf(btnTumandeiruKoma.Finger).Now, mainGui.Shape_PnlTaikyoku.MousePos_FoodKoma != null ? mainGui.Shape_PnlTaikyoku.MousePos_FoodKoma.Komasyurui : PieceType.None );// 選択している駒の元の場所と、移動先 KifuNode newNode; { // // 成ったので、指し手データ差替え。 // StartposImporter.Assert_HirateHonsyogi(new SkyBuffer(mainGui.Model_Manual.GuiSkyConst), "newNode作成前"); newNode = new KifuNodeImpl( move, new KyokumenWrapper(SkyConst.NewInstance_ReversePside( // 先後を反転させます。 mainGui.Model_Manual.GuiSkyConst, mainGui.Model_Manual.GuiSkyConst.Temezumi + 1 //1手進める )) ); StartposImporter.Assert_HirateHonsyogi(new SkyBuffer(newNode.Value.KyokumenConst), "newNode作成後"); //「成る/成らない」ボタンを押したときです。 { //---------------------------------------- // 次ノード追加 //---------------------------------------- mainGui.Link_Server.Model_Taikyoku.Kifu.GetSennititeCounter().CountUp_New(Conv_Sky.ToKyokumenHash(newNode.Value.KyokumenConst), "After_NaruNaranai"); ((KifuNode)mainGui.Link_Server.Model_Taikyoku.Kifu.CurNode).PutTuginoitte_New(newNode); } // ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ // ここで棋譜の変更をします。 // ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ string jsaFugoStr; Util_Functions_Server.SetCurNode_Srv( mainGui.Link_Server.Model_Taikyoku, mainGui.Model_Manual, newNode, out jsaFugoStr); mainGui.RepaintRequest.SetFlag_RefreshRequest(); //------------------------------ // 符号表示 //------------------------------ // 成る/成らないボタンを押したとき。 mainGui.Shape_PnlTaikyoku.SetFugo(jsaFugoStr); } //------------------------------ // チェンジターン //------------------------------ if (!mainGui.Shape_PnlTaikyoku.Requested_NaruDialogToShow) { //Logger.Trace("マウス左ボタンを押したのでチェンジターンします。"); mainGui.ChangedTurn(); } } mainGui.RepaintRequest.SetFlag_RecalculateRequested();// 駒の再描画要求 //Logger.Trace("つまんでいる駒を放します。(6)"); mainGui.SetFigTumandeiruKoma(-1);//駒を放した扱いです。 mainGui.Shape_PnlTaikyoku.SetNaruMasu(null); mainGui.RepaintRequest.SyuturyokuRequest = RepaintRequestGedanTxt.Kifu; mainGui.RepaintRequest.SetFlag_RefreshRequest(); IMove last; { Node <IMove, KyokumenWrapper> kifuElement = mainGui.Link_Server.Model_Taikyoku.Kifu.CurNode; last = (IMove)kifuElement.Key; } mainGui.ChangedTurn();//マウス左ボタンを押したのでチェンジターンします。 mainGui.Shape_PnlTaikyoku.Request_NaruDialogToShow(false); mainGui.GetWidget("BtnNaru").Visible = false; mainGui.GetWidget("BtnNaranai").Visible = false; mainGui.SetScene(SceneName.SceneB_1TumamitaiKoma); }
/// <summary> /// シングルトン。 /// </summary> /// <returns></returns> public static Event_CsharpImpl GetInstance() { if (null == Event_CsharpImpl.instance) { Event_CsharpImpl ins = new Event_CsharpImpl(); Event_CsharpImpl.instance = ins; // // [成る]ボタンのイベント。 // ins.delegate_BtnNaru = ( object obj_shogiGui2 , object userWidget2 // UerWidget , object btnKoma_Selected2 ) => { Shape_BtnKoma btnKoma_Selected = (Shape_BtnKoma)btnKoma_Selected2; MainGui_Csharp shogibanGui2 = (MainGui_Csharp)obj_shogiGui2; shogibanGui2.SetNaruFlag(true); ins.After_NaruNaranai_ButtonPushed( shogibanGui2 , btnKoma_Selected ); }; // // [成らない]ボタンのイベント。 // ins.delegate_BtnNaranai = ( object obj_shogiGui2 , object userWidget2 // UerWidget , object btnKoma_Selected2 ) => { Shape_BtnKoma btnKoma_Selected = (Shape_BtnKoma)btnKoma_Selected2; MainGui_Csharp shogibanGui2 = (MainGui_Csharp)obj_shogiGui2; shogibanGui2.SetNaruFlag(false); ins.After_NaruNaranai_ButtonPushed( shogibanGui2 , btnKoma_Selected ); }; // // [クリアー]ボタンのイベント。 // ins.delegate_BtnClear = ( object obj_shogiGui2 , object userWidget2 // UerWidget , object btnKoma_Selected2 ) => { Shape_BtnKoma btnKoma_Selected = (Shape_BtnKoma)btnKoma_Selected2; MainGui_Csharp shogibanGui2 = (MainGui_Csharp)obj_shogiGui2; Util_Lua_Csharp.ShogiGui = shogibanGui2; Util_Lua_Csharp.Perform("click_clearButton"); }; // // [再生]ボタンのイベント。 // ins.delegate_BtnPlay = ( object obj_shogiGui2 , object userWidget2 // UerWidget , object btnKoma_Selected2 ) => { Shape_BtnKoma btnKoma_Selected = (Shape_BtnKoma)btnKoma_Selected2; MainGui_Csharp shogibanGui2 = (MainGui_Csharp)obj_shogiGui2; Util_Lua_Csharp.ShogiGui = shogibanGui2; Util_Lua_Csharp.Perform("click_playButton"); }; // // [コマ送り]ボタンのイベント。 // ins.delegate_BtnForward = ( object obj_shogiGui2 , object userWidget2 // UerWidget , object btnKoma_Selected2 ) => { Shape_BtnKoma btnKoma_Selected = (Shape_BtnKoma)btnKoma_Selected2; MainGui_Csharp mainGui3 = (MainGui_Csharp)obj_shogiGui2; string restText = Util_Function_Csharp.ReadLine_FromTextbox(); Util_Functions_Server.Komaokuri_Srv( ref restText, mainGui3.Link_Server.Model_Taikyoku, mainGui3.Model_Manual); Util_Function_Csharp.Komaokuri_Gui(restText, mainGui3); Util_Menace.Menace(mainGui3);// メナス }; // // [巻き戻し]ボタンのイベント。 // ins.delegate_BtnBackward = ( object obj_shogiGui2 , object userWidget2 // UerWidget , object btnKoma_Selected2 ) => { Shape_BtnKoma btnKoma_Selected = (Shape_BtnKoma)btnKoma_Selected2; MainGui_Csharp shogibanGui2 = (MainGui_Csharp)obj_shogiGui2; Finger movedKoma; Finger foodKoma;//取られた駒 string fugoJStr; if (!Util_Functions_Server.Makimodosi_Srv(out movedKoma, out foodKoma, out fugoJStr, shogibanGui2.Link_Server.Model_Taikyoku)) { goto gt_EndBlock; } Util_Function_Csharp.Makimodosi_Gui(shogibanGui2, movedKoma, foodKoma, fugoJStr, Util_Function_Csharp.ReadLine_FromTextbox()); Util_Menace.Menace(shogibanGui2);//メナス gt_EndBlock: ; }; // // [ログ出せ]ボタンのイベント。 // ins.delegate_BtnLogdase = ( object obj_shogiGui2 , object userWidget2 // UerWidget , object btnKoma_Selected2 ) => { MainGui_Csharp shogibanGui2 = (MainGui_Csharp)obj_shogiGui2; Shape_BtnKoma btnKoma_Selected = (Shape_BtnKoma)btnKoma_Selected2; shogibanGui2.Logdase(); }; // // [壁置く]ボタンのイベント。 // ins.delegate_BtnKabeOku = ( object obj_shogiGui2 , object userWidget2 // UerWidget , object btnKoma_Selected2 ) => { MainGui_Csharp shogibanGui2 = (MainGui_Csharp)obj_shogiGui2; Shape_BtnKoma btnKoma_Selected = (Shape_BtnKoma)btnKoma_Selected2; UserWidget widget = shogibanGui2.GetWidget("BtnKabeOku"); // [壁置く]←→[駒動かす]切替 switch (widget.Text) { case "壁置く": widget.Text = "駒動かす"; break; default: widget.Text = "壁置く"; break; } shogibanGui2.RepaintRequest.SetFlag_RefreshRequest(); }; // // [出力切替]ボタンのイベント。 // ins.delegate_BtnSyuturyokuKirikae = ( object obj_shogiGui2 , object userWidget2 // UerWidget , object btnKoma_Selected2 ) => { Shape_BtnKoma btnKoma_Selected = (Shape_BtnKoma)btnKoma_Selected2; MainGui_Csharp shogibanGui2 = (MainGui_Csharp)obj_shogiGui2; switch (shogibanGui2.SyuturyokuKirikae) { case SyuturyokuKirikae.Japanese: shogibanGui2.SetSyuturyokuKirikae(SyuturyokuKirikae.Sfen); break; case SyuturyokuKirikae.Sfen: shogibanGui2.SetSyuturyokuKirikae(SyuturyokuKirikae.Html); break; case SyuturyokuKirikae.Html: shogibanGui2.SetSyuturyokuKirikae(SyuturyokuKirikae.Japanese); break; } shogibanGui2.RepaintRequest.SyuturyokuRequest = RepaintRequestGedanTxt.Kifu; }; // // [各種符号]ボタンのイベント。 // ins.delegate_BtnKakusyuFugo = ( object obj_shogiGui2 , object userWidget2 // UerWidget , object btnKoma_Selected2 ) => { Shape_BtnKoma btnKoma_Selected = (Shape_BtnKoma)btnKoma_Selected2; UserWidget userWidget = (UserWidget)userWidget2; MainGui_Csharp shogibanGui2 = (MainGui_Csharp)obj_shogiGui2; UserWidget widget = shogibanGui2.GetWidget(userWidget.Name); shogibanGui2.RepaintRequest.SetNyuryokuTextTail(widget.Fugo); }; // // [全消]ボタンのイベント。 // ins.delegate_BtnZenkesi = ( object obj_shogiGui2 , object userWidget2 // UerWidget , object btnKoma_Selected2 ) => { Shape_BtnKoma btnKoma_Selected = (Shape_BtnKoma)btnKoma_Selected2; MainGui_Csharp shogibanGui2 = (MainGui_Csharp)obj_shogiGui2; shogibanGui2.RepaintRequest.NyuryokuText = ""; }; // // [ここから採譜]ボタンのイベント。 // ins.delegate_BtnKokokaraSaifu = ( object obj_shogiGui2 , object userWidget2 // UerWidget , object btnKoma_Selected2 ) => { Shape_BtnKoma btnKoma_Selected = (Shape_BtnKoma)btnKoma_Selected2; MainGui_Csharp shogibanGui2 = (MainGui_Csharp)obj_shogiGui2; UtilKifuTree282.SetStartpos_KokokaraSaifu(shogibanGui2.Link_Server.Model_Taikyoku.Kifu, shogibanGui2.Link_Server.Model_Taikyoku.Kifu.CurNode.Value.KyokumenConst.KaisiPside); shogibanGui2.RepaintRequest.SyuturyokuRequest = RepaintRequestGedanTxt.Kifu; }; // // [初期配置]ボタンのイベント。 // ins.delegate_BtnSyokihaichi = ( object obj_shogiGui2 , object userWidget2 // UerWidget , object btnKoma_Selected2 ) => { Shape_BtnKoma btnKoma_Selected = (Shape_BtnKoma)btnKoma_Selected2; MainGui_Csharp shogibanGui2 = (MainGui_Csharp)obj_shogiGui2; Util_Function_Csharp.Perform_SyokiHaichi(shogibanGui2); }; // // [向き]ボタンのイベント。 // ins.delegate_BtnMuki = ( object obj_shogiGui2 , object userWidget2 // UerWidget , object btnKoma_Selected2 ) => { Shape_BtnKoma btnKoma_Selected = (Shape_BtnKoma)btnKoma_Selected2; MainGui_Csharp mainGui3 = (MainGui_Csharp)obj_shogiGui2; Shape_BtnKoma movedKoma = mainGui3.Shape_PnlTaikyoku.Btn_MovedKoma(); RO_Star koma; Finger figKoma = Fingers.Error_1; if (null != movedKoma) { //>>>>> 移動直後の駒があるとき koma = Util_Starlightable.AsKoma(mainGui3.Model_Manual.GuiSkyConst.StarlightIndexOf(movedKoma.Finger).Now); figKoma = movedKoma.Finger; } else if (null != btnKoma_Selected) { //>>>>> 選択されている駒があるとき koma = Util_Starlightable.AsKoma(mainGui3.Model_Manual.GuiSkyConst.StarlightIndexOf(btnKoma_Selected.Koma).Now); figKoma = btnKoma_Selected.Koma; } else { koma = null; } if (null != koma) { KifuNode modifyNode = new KifuNodeImpl( mainGui3.Link_Server.Model_Taikyoku.Kifu.CurNode.Key,//現在の局面を流用 new KyokumenWrapper( SkyConst.NewInstance_OverwriteOrAdd_Light( mainGui3.Model_Manual.GuiSkyConst, -1,//そのまま figKoma, new RO_Starlight( new RO_Star( Conv_Playerside.Reverse(koma.Pside),//向きを逆さにします。 koma.Masu, koma.Komasyurui ) ) ) ) ); // ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ // ここで局面データを変更します。 // ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ string jsaFugoStr; Util_Functions_Server.SetCurNode_Srv( mainGui3.Link_Server.Model_Taikyoku, mainGui3.Model_Manual, modifyNode, out jsaFugoStr); mainGui3.RepaintRequest.SetFlag_RefreshRequest(); } }; } return(Event_CsharpImpl.instance); }