2014-02-17 1 views
0

Windows Forms를 그냥 속이고 버튼을 클릭 한 다음 플레이어에게 임의의 카드 두 장을주고 싶지만 버튼을 클릭하면 레이블이 비어 있습니다. 값을 문자열로 전달하는 방법은 무엇입니까? 임의의 카드 가져 오기 및 레이블 변경

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void DealTheCardsButton_Click(object sender, EventArgs e) 
    { 
     TheCards theCards = new TheCards(); 
     CardOneLabel.Text = theCards.card1; 
    } 
} 

public class TheCards 
{ 
    public TheCards() 
    { 
     Cards = new List<string>(); 
     Cards.Add("1"); 
     Cards.Add("2"); 
     Cards.Add("3"); 
     Cards.Add("4"); 
    } 

    public List<string> Cards { get; set; } 

    public string card1; 
    public string card2; 

    public string cardTest = "hej"; 

    public void GiveTwoRandomCardsFromCardsList() 
    { 
     Random random = new Random(); 
     int slumptal = random.Next(0, 4); 
     card1 = Cards[1]; 

     bool flag = false; 
     while (!flag) 
     { 
      Random random2 = new Random(); 
      int slumptal2 = random2.Next(0, 4); 

      if (slumptal != slumptal2) 
      { 
       card2 = Cards[slumptal2]; 
       flag = true; 
      } 
     } 
    } 
} 

나는 그것이 작동 거기에 하드 코딩 된 값을 문자열로 CardOneLabel.Text을 변경 호출하면

. 무작위 화가 string card1string card2의 값을 변경하지 않는 것 같습니다. 지금과 같이 버튼을 클릭하면 레이블의 값이 아무 것도 아닌 것으로 변경됩니다 (비어 있음).

레이블 값을 임의의 카드 값으로 어떻게 바꿀 수 있습니까?

답변

1

GiveTwoRandomCardsFromCardsList 메서드는 절대로 호출하지 마십시오. 이 시도 : 그런데

private void DealTheCardsButton_Click(object sender, EventArgs e) 
{ 
    TheCards theCards = new TheCards(); 
    theCards.GiveTwoRandomCardsFromCardsList(); 

    CardOneLabel.Text = theCards.card1; 
} 

, 필요한 모든 임의의 숫자에 대한 새로운 Random 객체를 생성하지 않습니다. 이것은 의사 난수 생성기가 현재 시간에 의존하는 방식으로 인해 동일한 난수를 제공 할 수도 있습니다. 똑같은 Random 인스턴스를 반복해서 사용하면됩니다. 매번 새로운 난수를 줄 것입니다.

또한 동일한 카드를 두 번 가져 오는 경우가 있습니다. 그 아이디어가 있다면, 항상 두 개의 다른 카드를 얻는 방법을 알아 내기 위해 그것을 OP에 남겨 둘 것입니다.

+0

매력 작품! 내 무작위 대결에 대한 큰 감사. 그것을 무작위로 줄입니다. 그것이 지금은 같은 두 개의 카드를 얻을 수 없어 작동하지만 난 당신이 점점 1 랜덤으로 줄이고 이해가 :) – darrrrUC

1

그러나 버튼을 클릭하면 라벨이 비어 있습니다. 문자열에 값을 어떻게 전달합니까?

당신이 값

CardOneLabel.Text = theCards.card1; 

에게 그 클래스 TheCards 아무것도에 card1 변수를 시작하지 않는의 생성자를 할당하려고

, 당신은 빈 문자열을 검색 할 수 있습니다.

아래의 생성자는 목록에 Cards을 추가하고 있지만 다른 것은 일어나지 않습니다. 추가 코드가 보이지 않습니까?

public TheCards() 
{ 
    Cards = new List<string>(); 
    Cards.Add("1"); 
    Cards.Add("2"); 
    Cards.Add("3"); 
    Cards.Add("4"); 
} 

문자 그대로 빈 문자열을 읽고 있기 때문에 버튼을 누르면 CardOneLabel이 비어 있습니다. 할당하기 전에 GiveTwoRandomCardsFromCardsList() 방법으로 전화 해보십시오.

+0

흠, 지금까지 코드는 그다지 중요하지 않은 무언가를 놓쳐 버렸을 것입니다 :) – darrrrUC

관련 문제