🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
C#

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

Visual Studio

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

Q&A

3回答

2875閲覧

VisualStudioでのスロット作成時の当たり判定

Famima

総合スコア4

C#

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

Visual Studio

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

0グッド

0クリップ

投稿2019/12/12 11:51

VisualStudioでC#を用いて学習しているのですが、
課題でどうしても分からず躓いている部分があります。

protected void ImageButton1_Click(object sender, ImageClickEventArgs e)
{
Random rnd = new Random();
int kazu = rnd.Next(1, 6);
switch (kazu)
Random rnd = new Random();
int kazu = rnd.Next(1, 6);
switch (kazu)
{
case 1:
ImageButton1.ImageUrl = "画像1.png";
break;
case 2:
ImageButton1.ImageUrl = "画像2.png";
break;
case 3:
ImageButton1.ImageUrl = "画像3.png";
break;
case 4:
ImageButton1.ImageUrl = "画像4.png";
break;
case 5:
ImageButton1.ImageUrl = "画像5.png";
break;
}
}

というようにして3つのImageButtonを配置して手動スロットマシンを作っているのですが
どうやって3つイラストがそろった場合と2つそろった場合と1つもそろわなかった場合
を判別するように出来るのでしょうか?

3つイラストがそろってビンゴの場合にはLabelで当たり!と表示するようにするつもりです。

C#を使ったことがないのですが、今回C#指定ということで困っております。

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

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

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

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

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

y_waiwai

2019/12/12 13:31

このコードではコンパイルエラーになるでしょ きちんと動くコードを提示しましょう
Famima

2019/12/12 13:57

ImageButton1のみ抜粋して記載したのでこのようになっていました。 分かりにくいようで申し訳ございません。
Zuishin

2019/12/13 07:29

抜粋するにしても、わかりきった部分だけコードを補完すればコンパイル可能になるような抜粋の仕方をしてください。switch の使い方が間違っているので、補完だけでなく削除もしなければなりません。
guest

回答3

0

ImageButton1~3についてkazuの値をメンバ変数(配列)で保持しておきましょう。
ImageButton_Clickは1~3で分けずにsenderからImageButtonを取得すれば同じ記述を3度もしなくてよくなるはずです。

コードが必要なら今実行環境がないので今晩にでも。
失礼、よく見たらこちらWindows Formsではなかったですね。
正直触った経験がなく実行テストもできないので厳密なコードは控えさせていただきます。
Windows Formsで試したコードをベースに雰囲気だけ書くとこんな感じです(動作しません)

C#

1private static readonly string[] ReelImageUrls = 2{ 3 "画像1.png", 4 "画像2.png", 5 "画像3.png", 6 "画像4.png", 7 "画像5.png", 8}; 9 10private readonly ImageButton[] buttons; 11// コンストラクタ内で全てのimageButtonを格納する 12 13protected void ImageButton_Click(object sender, EventArgs e) 14{ 15 var button = sender as ImageButton; 16 17 // 0~登録されている画像-1の範囲の整数乱数を生成 18 int n = new Random().Next(ReelImageUrls.Length); 19 // Urlを更新 20 button.ImageUrl = ReelImageUrls[n]; 21 // ReelImageUrls各々のbutton.ImageUrlへの登録数を算出し、その最大値を得る。 22 int hitN = ReelImageUrls.Max(reel => buttons.Count(btn => btn.ImageUrl == reel)); 23 24 25 switch (hitN) 26 { 27 case 3: 28 // 3つ揃った時の処理 29 break; 30 31 case 2: 32 // 2つ揃った時の処理 33 break; 34 35 default: 36 // 揃っていない時の処理 37 break; 38 39 } 40}

こうしておけばボタンや画像を追加したときに比較的変更が容易だと思うのですが如何でしょうか。

投稿2019/12/13 13:44

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

Famima

2019/12/14 00:21

ありがとうございます!試行錯誤しながら試してみます。
guest

0

ImageButton1~3についてkazuの値をメンバ変数(配列)で保持しておきましょう。
ImageButton_Clickは1~3で分けずにsenderからImageButtonを取得すれば同じ記述を3度もしなくてよくなるはずです。

コードが必要なら今実行環境がないので今晩にでも。

投稿2019/12/12 21:20

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

それぞれのImageButton1_Clickのkazuがいくつになったかを返却するなどして、
3つのImageButton1_Clickの結果を取得し、
その3つのImageButton1_Clickの結果から2つ揃っている、
3つ揃っているなどを判定するのがよろしいのではないでしょうか。

// メソッドを停止イラストが取得できるように変更
protected int ImageButton_Click(object sender, ImageClickEventArgs e)
{
// 途中省略

  return kazu;
}

・結果判定の処理例 (間違いがあれば申し訳ない)
int reel1, reel2, reel3;  // 停止イラストの番号

// リール3つの停止とイラストの取得
reel1 = ImageButton1_Click();  // クラスと引数は省略しています
reel2 = ImageButton2_Click();
reel3 = ImageButton3_Click();

// リールが揃っているか判定する
if (reel1 == reel2){
if(reel1 == reel3){    // ○○○
// 3つとも揃った
} else{ // ○○×
// 1番目と2番目の2つ揃った
}
} else if (real1 == reel3){  // ○×○
// 1番目と3番目の2つ揃った
} else if (reel2 == reel3){ // ×○○
// 2番目と3番目の2つ揃った
} else { // ×△○
// 何も揃わなかった
}

投稿2019/12/12 14:28

編集2019/12/12 14:33
rovissa2525

総合スコア10

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

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

Famima

2019/12/14 00:22

分かりやすく、ありがとうございます。 試行錯誤しながら試してみます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問