質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Q&A

0回答

653閲覧

ゲーム終了時のポップアップ画面消去後にゲーム画面をクリアする方法

garudain

総合スコア1

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

0グッド

0クリップ

投稿2020/11/30 02:37

編集2020/12/14 04:57

前提・実現したいこと

以前にも今回とは違った内容で質問させていただきましたが、Visual Studioでじゃんけんゲームを制作しており、じゃんけんゲーム自体は完成させることができました。
内容は5回先に買ったらウィンドウで勝敗を知らせるというものです。
そこで質問です。勝敗結果を表したポップアップ画面が表示され、それを消去する際にゲーム画面をクリアしたいのですが、それはどのようにすればよいのでしょうか?

該当のソースコード

C#

1 2 3 private void MatchStart(int my_hand) 4 { 5 string message = ""; 6 string mess = ""; 7 string grades = ""; 8 9 int cpu_hand = GetCpuHand(); 10 11 this.picYou.Image = GetJankenImage(my_hand); 12 this.picCPU.Image = GetJankenImage(cpu_hand); 13 14 int judge = JadgeJanken(my_hand, cpu_hand); 15 int hantei = JadgeJanken(my_hand, cpu_hand); 16 int rate = JadgeJanken(my_hand, cpu_hand); 17 18 19 Array.Resize(ref array_match_result, array_match_result.Length + 1); 20 array_match_result[array_match_result.Length - 1] = judge; 21 22 23 int ret = ConvertVictoryMessage(judge, ref message); 24 25 int ret2 = ConvertVictory(hantei, ref mess); 26 27 int ret3 = Syouritu(rate, ref grades); 28 29 30 31 label2.Text = "あなたは"; 32 label3.Text = "でわたしの"; 33 34 if (ret == 0) 35 { 36 this.lblResult.Text = message; 37 } 38 else 39 { 40 this.lblResult.Text = "不正な結果が返ってきました。"; 41 } 42 43 if(ret2 == 0) 44 { 45 this.label4.Text = mess; 46 } 47 else 48 { 49 this.label4.Text = "不正な結果が返ってきました。"; 50 } 51 52 if (ret3 == 0) 53 { 54 this.WinRate.Text = grades; 55 } 56 else 57 { 58 this.WinRate.Text = "不正な結果が返ってきました。"; 59 } 60 61 62 63 64 } 65 66 ... 67 68 69 70 private int Syouritu(int rate, ref string grades) 71 { 72 73 switch (rate) 74 { 75 case 0: 76 grades = ""; 77 break; 78 case 1: 79 grades = ""; 80 break; 81 case 2: 82 grades = ""; 83 break; 84 default: 85 grades = ""; 86 return -1; 87 } 88 89 int cnt_win = 0; 90 int cnt_lose = 0; 91 int cnt_draw = 0; 92 93 foreach (int res in array_match_result) 94 { 95 switch (res) 96 { 97 case 0: 98 ++cnt_draw; 99 break; 100 case 1: 101 ++cnt_lose; 102 break; 103 case 2: 104 ++cnt_win; 105 break; 106 default: 107 break; 108 109 } 110 } 111 112 grades += array_match_result.Length.ToString() + "戦中 " 113 + "あなた:" + cnt_win.ToString() + "勝 " 114 + "わたし:" + cnt_lose.ToString() + "勝 " 115 + "あいこ:" + cnt_draw.ToString(); 116 117 WinRate.Text = grades.ToString(); 118 119 120 if (cnt_win == 5) 121 { 122 123 MessageBox.Show(array_match_result.Length.ToString() + "戦中 " + cnt_win.ToString() + "勝" 124 + cnt_lose.ToString() + "敗" + cnt_draw.ToString() + "分けであなたが勝ちました。", "勝敗決定"); 125 126 array_match_result = new int[0]; 127 this.label2.Text = ""; 128 this.label3.Text = ""; 129 this.label4.Text = ""; 130 lblResult.ResetText(); 131 WinRate.ResetText(); 132 picYou.Image = null; 133 picCPU.Image = null; 134 } 135 else if (cnt_lose == 5) 136 { 137 138 MessageBox.Show(array_match_result.Length.ToString() + "戦中 " + cnt_lose.ToString() + "勝" 139 + cnt_win.ToString() + "敗" + cnt_draw.ToString() + "分けでわたしが勝ちました。", "勝敗決定") ; 140 141 array_match_result = new int[0]; 142 this.label2.Text = ""; 143 this.label3.Text = ""; 144 this.label4.Text = ""; 145 lblResult.ResetText(); 146 WinRate.ResetText(); 147 picYou.Image = null; 148 picCPU.Image = null; 149 150 } 151 152 return 0; 153 154 } 155 156

試したこと

if (cnt_win == 5) { MessageBox.Show(array_match_result.Length.ToString() + "戦中 " + cnt_win.ToString() + "勝" + cnt_lose.ToString() + "敗" + cnt_draw.ToString() + "分けであなたが勝ちました。", "勝敗決定"); array_match_result = new int[0]; this.Controls.Clear(); //画面コントロール削除 InitializeComponent(); //コントロール再設定 }

リセットボタンも作成したので、それと同じように行うのかと思いましたが、削除されたのは画像だけでした。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

YAmaGNZ

2020/11/30 02:45

消すべきところで表示しているLabelのテキストを消せばいいのではないですか?
garudain

2020/11/30 03:16

MessageBoxを閉じるタイミングで消去したいのですが、その場合MessageBox.Showの下にコードを書くということで合ってますでしょうか?
YAmaGNZ

2020/11/30 03:26

前の質問で「MessageBoxを閉じるまで次のコードが実行されない」といったことを学んだと思います。(それが原因で発生した問題だったはずです) まずは手を動かしましょう。 また、リセットボタンを押した時の処理としてコントロールを削除してInitializeComponentを呼び出すということを行っていますが、これは行うべきではありません。 適切なコントロールの適切なプロパティのみクリアすべきです。 ゲーム中に変更したプロパティをゲーム開始前の状態に戻すだけです。
退会済みユーザー

退会済みユーザー

2020/11/30 04:09 編集

ゲーム開始前に、プログラム中で変更するコントロールのプロパティ(Label.Textなど)の初期値をクラスメンバに記憶させておいて、元に戻したいタイミングでそれをコントロールに再設定するだけでよいと思います。
退会済みユーザー

退会済みユーザー

2020/11/30 05:18 編集

btnRse_Click メソッドが RESET ボタンのクリックイベントのハンドラと理解していますが、RESET ボタンを押しても Label のテキストが空白にならないことに悩んでいるのであれば、Label.Text = "" としたらどうなりますか? それで望むことができたら同様なコードを MessageBox.Show の次の行に入れてみては?
garudain

2020/11/30 06:57

SurferOnWwwさん MessageBoxの次の行にbtnRse_Clickと同じコードを入れていますが、載せている画像の通り、PictureBoxの画像の消去はできてもlabelの文字が消去されません。 MessageBoxを閉じた後グー、チョキ、パーのどちらかを押すとまた一からカウントされるのですが、PictureBoxの画像だけ消去出来てlabelの文字だけが残る現象がよく分かりません。
YAmaGNZ

2020/11/30 07:07

SurferOnWwwさんへ宛てた上記コメントは質問の修正前のソースでのコメントなのでしょうか? それとも質問修正後のソースでのコメントなのでしょうか? また、質問のソースを修正されていますが、現象は変わらないのでしょうか?
退会済みユーザー

退会済みユーザー

2020/11/30 07:08 編集

消した後にまた文字列を設定しているだけではないでしょうか? 前回 Zuishin さんに教えて頂いたステップ実行で、テキストの値の変化を追ってみて、 文字列の設定を正しい順番に並び替えてみてください。
YAmaGNZ

2020/11/30 07:09

改めてソースをみましたが Syourituを呼び出した後に思い切りLabelにテキストをセットしているじゃないですか。 ご自身のコードのどこで何をしているのか把握しましょう。
garudain

2020/11/30 07:36

>>radianさん >>YamaGNZさん ご指摘の通り "あなたは" と "でわたしの" という部分は消した後に再設定されているだけでした。自分のコードもわからいようじゃまだまだだなと思います。 しかし画像で言うところの "であなたの" "勝ち" や 勝敗の部分だけは表示されたままなのですがこれらもどこかで再設定されているのでしょうか。
YAmaGNZ

2020/11/30 07:48

this.lblResult.Text = message; this.label4.Text = mess; this.WinRate.Text = grades; ここで何をしているか分かりますか?
garudain

2020/11/30 08:01

そこでじゃんけんの結果を行なっているので表示されてしまうということですか?
YAmaGNZ

2020/11/30 08:53

そこでブレークポイントを設定して実行すれば何をTextにセットしようとしているか確認できるはずです。 ご自身が作成したプログラムがどのように動作しているかは以前の質問でZuishinさんが仰っていたようにデバッガを使用して確認できますので確認する癖をつけるといいでしょう。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問