2017-11-07 8 views
0

私はカードゲームを作っているので、各カード用に3つの文字列とブールを含む配列が必要です。プログラムを実行すると2つ作成されます各スーツのエースのインスタンスと私はなぜ、本当に明白な何かをおそらく見逃していませんが、私はそれが何をしているのか分からない。次のように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

「タプル」の使用を真剣に制限することをお勧めします。 'A'と' B'のループでは、複雑すぎるだけです。他の 'Tuple'については、その情報を保持するカスタムクラスを作成することをお勧めします。 – juharr

+0

スーツが1つのリストと、スーツが1つのリストを作成し、もう一方の値を作成すると、これははるかに簡単になります。次に、2つのネストされたforeachループを作成します。 –

+1

あなたの問題は、内側のループでポストインクリメントを使用しているので、 'A = 1'で' A ++ 'に2を代入しますが、インクリメントの前の値は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

関連する問題