划分两个玩家的甲板

时间:2016-09-30 05:19:11

标签: c# list

我想给玩家1提供偶数牌,给玩家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>();

    }
}

2 个答案:

答案 0 :(得分:1)

您尝试实现的目标可以通过使用循环或Linq来完成。 如果你想循环通过你的arrayList条件 偶数的if(deck[i] % 2 == 0)。奇怪的相反。但这已经在@ misha130的评论中提到过。

您可能想了解Linq提供的List种可能性。 这是一个post,它为您提供了一个很好的示例,说明如何根据条件从List中提取值(就像您的情况一样)。要了解课程List及其方法,请阅读documentation 在这种情况下,这两种特殊方法将是您的主要兴趣:FindAll&amp;&amp; Where

现在您应该拥有解决问题所需的所有信息。祝好运。评论你是否仍然被卡住了。

答案 1 :(得分:1)

我已将您的代码重构为您所追求的内容。与卡片交易相关的关键部分是.Where((x, n) => n % 2 == 0)&amp; .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();
    }
}