2016-07-31 3 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

새로운 메소드가 없습니다. 당신은 윈도우 응용 프로그램에이 정적과 같이 할 경우 당신은 싱글 톤 클래스 (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에는 이미 필요한 대부분의 속성과 비헤이비어가 있으므로 사용하는 것이 좋습니다.

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

그럼 대신 코드에 PictureBox를 사용하는이 사용

코드는 다음과 같은 수 있습니다. 나는 귀하의 질문에 실제 질문이 표시되지 않지만

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

는, 선생님 감사합니다! 이미지에 값을 할당하는 방법 예 : Ace (이미지) = 1을 원하십니까? –

+0

@VyanAxel에서 Picturebox를 상속 한 다음 int 속성을 추가합니다.나는 대답에서 기술 할 것이다 –

0

, 나는 당신이이 작업을 수행 할 생각 :

내가 좀 더 내가이 선호하는 코드를 캡슐화처럼 정직하게하려면 더 쉬운 방법.

는 모든 음 먼저하는 Random에게 메소드가 호출 될 때마다 만들어 그것을 클래스 수준의 변수를 만들고 초기화하지 않습니다

private static Random cards = new Random(); 

을 현재를 결정하는 switch를 사용하고 두 그림 상자에 표시 할 내용. 난수가 0 인 경우,이 두 카드를 넣습니다. 숫자가 1이면 두 카드를 넣습니다. 즉, 0에서 9 사이의 각 숫자는 Bitmap 2 개에 해당합니다.

사전을 사용하여 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

관련 문제