2016-09-30 8 views
-2

プレーヤー1に偶数番号のカードを、プレーヤー2に奇数番号のカードを渡したいと思います。あなたの誰かがそれをすることができれば、本当にありがとうと感謝します。私は配列でこれを行う方法を知っていますが、私はリストではわかりません。2人のプレーヤーでデッキを分割する

class MatchDeck 
{ 

    private const int NUMBER_OF_CARDS = 36; 
    private Random r = new Random(); 
    List<MatchCard> deck = new List<MatchCard>(); 

    public MatchDeck(){ } 

    public void createDeck() 
    { 

     int[] number = { 2, 3, 4, 5, 6, 7, 8, 9, 10 }; 
     string[] suits = { "R[]", "R0", "B0", "B[]" };//these are suits i just made up 
     // deck = new MatchCard[NUMBER_OF_CARDS]; 
     foreach (var suit in suits) 
     { 
      for (int num = 2; num <= 10; num++) 
      { 
       deck.Add(new MatchCard(num, suit)); 
       // Console.WriteLine(deck[i++].toString()); 
      } 
     } 

     foreach(MatchCard card in deck) 
     { 
      Console.WriteLine(card.Number + " " + card.Suit); 
     } 

    } 

    public void Shuffle() 
    { 

     Random ran = new Random(); 

     int n = deck.Count; 

     while (n > 1) 
     { 
      n--; 
      int k = ran.Next(n + 1); 
      MatchCard value = deck[k]; 
      deck[k] = deck[n]; 
      deck[n] = value; 
     } 

     foreach (MatchCard card in deck) 
     { 
      Console.WriteLine(card.Number + " " + card.Suit); 
     } 
    } 

    public void deal() 
    { 
     List<MatchCard> player1 = new List<MatchCard>(); 
     List<MatchCard> player2 = new List<MatchCard>(); 

    } 
} 
+0

どのように配列でそれをしましたか? – kurakura88

+0

val%2 = 0の場合でも、それは奇妙です...シャッフルをorderby(()=> rand.next())に切り替えることもできます – misha130

+2

配列で行うことができる場合は、 'リスト'。 – Abion47

答えて

1

あなたが達成しようとしていることは、ループまたはLinqを使用して行うことができます。 arrayまたはListをループする場合は、偶数の場合、条件は if(deck[i] % 2 == 0)になります。奇数の反対です。しかしこれは既に@ misha130のコメントで言及されています。

Listが提供する可能性のあるLinqについてお読みください。 Listの値を(あなたの場合のように)条件に従って抽出する方法を示す良い例を示すpostがあります。今、あなたはあなたの問題を解決するために必要なすべての情報を持っている必要がありFindAll & & Where

:クラスListとその方法を知ってもらうために、これら2つの特定の方法は、この場合、あなたの主な関心があるであろうdocumentation をお読みください。がんばろう。まだ立ち往生している場合はコメントしてください。

1

あなたのコードをあなたの後ろにリファクタリングしました。カードを扱う際の重要な部分は.Where((x, n) => n % 2 == 0) & .Where((x, n) => n % 2 == 1)コードです。

public class MatchDeck 
{ 
    private Random r = new Random(); 
    List<MatchCard> deck = null; 

    public MatchDeck() 
    { 
     int[] number = { 2, 3, 4, 5, 6, 7, 8, 9, 10 }; 
     string[] suits = { "R[]", "R0", "B0", "B[]" }; 
     deck = number.SelectMany(n => suits, (n, s) => new MatchCard(n, s)).ToList(); 
    } 

    public void Shuffle() 
    { 
     deck = deck.OrderBy(x => r.Next()).ToList(); 
    } 

    public void Deal() 
    { 
     List<MatchCard> player1 = deck.Where((x, n) => n % 2 == 0).ToList(); 
     List<MatchCard> player2 = deck.Where((x, n) => n % 1 == 0).ToList(); 
    } 
}