2017-11-07 10 views
0

그래서 카드 게임을 만들고 있고 각 카드에 대해 3 개의 문자열과 bool이있는 배열이 필요합니다. 프로그램을 실행하면 두 개의 각 양복에 대한 에이스의 사례와 나는 왜 그런지 모르겠다. 아마 정말 명백한 것을 놓쳤 겠지만, 왜 그런 일을하는지 전혀 모른다.Tuple 배열을 채우기 위해 for 루프를 사용하여

클래스 데크 {

Tuple<string, string, string, bool>[] DeckArray = new Tuple<string, string, string, bool>[56]; 


    public void DeckArrayAssigner() 
    { 
     string Number, Suit, Card; 
     int Count = 0; 
     int A = 1; 
     int B = 1; 

     for (Tuple<int, int> Assigner = new Tuple<int, int>(A, B); Assigner.Item2 <= 3; Assigner = new Tuple<int, int>(A, B++)) 
     { 
      for (Assigner = new Tuple<int, int>(A, B); Assigner.Item1 <= 13; Assigner = new Tuple<int, int>(A++, B)) 
      { 
       Number = NumericNumberSwitch(Assigner.Item1); 
       Suit = NumericSuitSwitch(Assigner.Item2); 
       Card = (Number + " of " + Suit); 
       DeckArray[Count] = new Tuple<string, string, string, bool>(Number, Suit, Card, true); 
       Count++; 
       Console.WriteLine(Card); 
      } 
      Console.WriteLine(); 
      Assigner = new Tuple<int, int>(A = 1, B); 
     } 
    } 

    public string NumericNumberSwitch(int NumericNumber) 
    { 
     string Number; 
     switch (NumericNumber) 
     { 
      case 1: Number = "Ace"; break; 
      case 2: Number = "Two"; break; 
      case 3: Number = "Three"; break; 
      case 4: Number = "Four"; break; 
      case 5: Number = "Five"; break; 
      case 6: Number = "Six"; break; 
      case 7: Number = "Seven"; break; 
      case 8: Number = "Eight"; break; 
      case 9: Number = "Nine"; break; 
      case 10: Number = "Ten"; break; 
      case 11: Number = "Jack"; break; 
      case 12: Number = "Queen"; break; 
      case 13: Number = "King"; break; 
      default: Number = "???"; break; 
     } 
     return Number; 
    } 

    public string NumericSuitSwitch(int NumericSuit) 
    { 
     string Suit; 
     switch (NumericSuit) 
     { 
      case 1: Suit = "Hearts"; break; 
      case 2: Suit = "Diamonds"; break; 
      case 3: Suit = "Clubs"; break; 
      case 4: Suit = "Spades"; break; 
      default: Suit = "???"; break; 
     } 
     return Suit; 
    } 
} 

출력은 다음과 같다 :

Ace of Hearts 
Ace of Hearts 
Two of Hearts 
Three of Hearts 
Four of Hearts 
Five of Hearts 
Six of Hearts 
Seven of Hearts 
Eight of Hearts 
Nine of Hearts 
Ten of Hearts 
Jack of Hearts 
Queen of Hearts 
King of Hearts 

Ace of Diamonds 
Ace of Diamonds 
Two of Diamonds 
Three of Diamonds 
Four of Diamonds 
Five of Diamonds 
Six of Diamonds 
Seven of Diamonds 
Eight of Diamonds 
Nine of Diamonds 
Ten of Diamonds 
Jack of Diamonds 
Queen of Diamonds 
King of Diamonds 

Ace of Clubs 
Ace of Clubs 
Two of Clubs 
Three of Clubs 
Four of Clubs 
Five of Clubs 
Six of Clubs 
Seven of Clubs 
Eight of Clubs 
Nine of Clubs 
Ten of Clubs 
Jack of Clubs 
Queen of Clubs 
King of Clubs 

Ace of Spades 
Ace of Spades 
Two of Spades 
Three of Spades 
Four of Spades 
Five of Spades 
Six of Spades 
Seven of Spades 
Eight of Spades 
Nine of Spades 
Ten of Spades 
Jack of Spades 
Queen of Spades 
King of Spades 
+0

'튜플 (tuple)'의 사용을 진지하게 제한하는 것이 좋습니다. 'A'와'B' 루프는 너무 복잡합니다. 다른 '튜플 (Tuple)'의 경우, 해당 정보를 보유 할 사용자 정의 클래스를 만드는 것이 좋습니다. – juharr

+0

수트가 하나 인 두 개의 목록 과 다른 수트의 값을 만든 경우 훨씬 간단합니다. 그런 다음 두 개의 중첩 된 foreach 루프를 만듭니다. –

+1

당신의 문제는 내부 루프에서 포스트 증가분을 사용한다는 것입니다. 그래서'A = 1' 그리고'A ++'를'A'에 할당하지만 증분 앞의 값은 1을 반환합니다. 'B'는 외부 루프의 끝에서'Tuple'에 재 할당하기 때문에 문제가 없습니다. 실제로 필요한 것은 (int B = 1, B <= 13, b ++)'for (int A = 1; A <= 3; A ++)이고 모든' 터플 '쓰레기. – juharr

답변

4

당신은 당신의 루프에서 튜플의 불필요한 사용을 떨어 뜨리고, 배열 switch 문을 대체하여 많은 코드를 단순화 할 수 있습니다, 단순 반복을 실행하여 배열을 반복합니다.

static readonly string[] Ranks = new[] {"Ace", "Two", ..., "King"}; 
static readonly string[] Suits = new[] {"Hearts", ..., "Spades"}; 
... 
int pos = 0; 
foreach (rank in Ranks) { 
    foreach (suit in Suits) { 
     DeckArray[pos++] = Tuple.Create(rank, suit, $"{rank} of {suit}", true); 
    } 
} 

참고 :card.Rankcard.Suitcard.Item1card.Item2보다 더 많이 읽을 수 있기 때문에 당신은, 각각의 카드에 대한 class Card를 만드는 오프 훨씬 더 좋을 것이다.

+0

'참고 : card.Rank와 card.Suit는 card.Item1과 card.Item2.shhh보다 훨씬 더 읽기 때문에 개별 카드에 대한 수업 카드를 만드는 것이 훨씬 낫습니다. 우리는 여기에서 예쁜 코드를 원하지 않습니다. – Bauss