2016-07-31 4 views
1

私はC#でカードゲームを作成しています。私はカードの例に値を割り当てたい:Ace(image)= 1;私はそれをランダムにしたい。私のコードは以下の通りです:C#ランダムな画像をピクチャボックスに入れて値を割り当てます

private void button1_Click(object sender, EventArgs e) 
     { 
      Random cards = new Random(); 
      card = cards.Next(0, 9); 
      switch (card) 
      { 
       case 0: 
        pictureBox1.Image = Properties.Resources.king_d; 
        pictureBox2.Image = Properties.Resources.jack_s; 

        break; 

       case 1: 
        pictureBox1.Image = Properties.Resources.ace_c; 
        pictureBox2.Image = Properties.Resources.ten_d; 

        break; 
      } 
     } 
    } 
+0

任意の場合は、一度配列にイメージをロードして、そこからpictureboxesに割り当てる、または前の画像を処分する必要があり、 – Plutonix

答えて

0

新しいランダムな方法です。あなたは、Windowsのアプリであり、それは静的このようにする場合は、シングルトンクラス(read this)から、あるいは単純化のためにそれを取ることができます。

static Random cards = new Random(); 
private void button1_Click(object sender, EventArgs e) 

    { 

     card = cards.Next(0, 9); 
     switch (card) 
     { 
      case 0: 
       pictureBox1.Image = Properties.Resources.king_d; 
       pictureBox2.Image = Properties.Resources.jack_s; 

       break; 

      case 1: 
       pictureBox1.Image = Properties.Resources.ace_c; 
       pictureBox2.Image = Properties.Resources.ten_d; 

       break; 
     } 
    } 
} 

更新 値が含まれているカードを持っているための最良の方法、画像、等はそれのための新しいクラスを持つことです。 PictureBoxは既に必要なプロパティとビヘイビアをほとんど持っているので、使用することをお勧めします。これを使用し、代わりにあなたのコード内でのPictureBoxを使用してのその後

Public Class MyCard:PictureBox 
    { 
     public int GamePoint {get;set;} 
    } 

コードは次のようなものである必要があります。

私は、私はこれを好むもう少しコードをカプセル化したいと正直に言うと:

Public Class MyCard:PictureBox 
    { 
     public CardType CardType {set;get;} 
     public int GamePoint {get{ return (int)this.CardType; }} 
     public MyCard(CardType _cardType) 
     { 
     CardType = _cardType; 
     } 
    } 

    enum CardType 
    { Ace=1, 
    King=2, 
    ... 
    } 
+0

は、ありがとうございます!どのようにイメージに値を割り当てる試合?例:私はエース(画像)= 1を欲しいですか? –

+0

@VyanAxelはPictureboxから継承し、それにintプロパティを追加します。私は答えで説明します –

0

私はあなたの質問の実際の質問を参照しませんが、私はあなたがAでこれをやりたいと思います簡単な方法。

すべてのまあ最初Randomにメソッドが呼び出されるたびに作成していない、それクラスレベルの変数にし、それを初期化します。

現在
private static Random cards = new Random(); 

、あなたが決めることswitchを使用しています2つの画像ボックスに何を表示するか。乱数が0の場合、これらの2枚のカードを1枚のカードに入れて、それらのカードを2枚置く...これは、0から9までの各数字が2つのBitmapに対応することを意味します。

0から9をTuple<Bitmap, Bitmap>にマップする辞書を使用できますが、配列を使用する方が良いと思います。

基本的には、Tuple<Bitmap, Bitmap>を格納する配列を宣言する必要があります。それをCardCombinationsとしましょう。この配列をCardUtilityなどのユーティリティクラスに入れることをお勧めします。次に、あなただけ行うことができます。

card = cards.Next(0, 9); 
pictureBox1.Image = CardUtility.CardCombinations[card].Item1; 
pictureBox2.Image = CardUtility.CardCombinations[card].Item2; 

あなたが見ることができるように、これは非常にbutton1_Click方法でコードを軽減しました。今私が話していた配列を宣言できます。

は、それはかなり簡単です:

public static Tuple<Bitmap, Bitmap>[] CardCombinations => new[] { 
    new Tuple<Bitmap, Bitmap>(Properties.Resources.king_d, Properties.Resources.jack_s), 
    ... 
}; 

"しかし、それはまだ冗長です!"あなたは泣いた。 Protip:using staticディレクティブを使用して、ビットマップ名をking_djack_sに短縮することができます。

using static SomeNamespace.Properties.Resources; 
+0

私はそれらの言葉に精通していないが、あなたの答えをありがとう。うーん、イメージに価値を割り当てるのはどうですか?あなたは私を助けてくれますか?あなたの応答をありがとう –

+0

@VyanAxelもちろん私はあなたを助けるだろう!しかし、あなたが私がさらに説明する前に私が提供したコードと指示を使用するときに、あなたが持っていた問題を教えてください! – Sweeper

関連する問題