C# 把牌分成两人

C# 把牌分成两人,c#,list,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 Match

我想把偶数牌给玩家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>();

    }
}
classmatchdeck
{
卡的私人常数整数=36;
私有随机r=新随机();
列表组=新列表();
公共MatchDeck(){}
公共void createDeck()
{
int[]数={2,3,4,5,6,7,8,9,10};
string[]suits={“R[],“R0”,“B0”,“B[]”};//这些是我刚编的套装
//牌组=新的火柴牌[牌的数量];
foreach(诉讼中的var诉讼)
{
for(int num=2;num 1)
{
n--;
int k=ran.Next(n+1);
火柴卡价值=牌组[k];
甲板[k]=甲板[n];
甲板[n]=价值;
}
foreach(甲板上的火柴卡)
{
控制台写入线(card.Number+“”+card.Suit);
}
}
公开无效交易()
{
List player1=新列表();
List player2=新列表();
}
}

您试图实现的目标可以通过使用循环或Linq来实现。 如果要在
数组
列表
中循环,条件是
if(deck[i]%2==0)
表示偶数。奇数则相反。但是@misha130的注释中已经提到了这一点

您可能想了解
列表提供的
Linq
可能性。 下面是一个很好的示例,说明如何根据条件(如您的案例)从
列表
中提取值。要了解类
列表
及其方法,请阅读 在本例中,这两种特殊方法将是您最感兴趣的:&&


现在你应该有所有必要的信息来解决你的问题。祝你好运。如果你仍然卡住了,请发表评论。

我已经重构了你的代码,使之符合你的要求。与发牌相关的关键部分是
。其中((x,n)=>n%2==0)
。其中((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();
    }
}
公共类MatchDeck
{
私有随机r=新随机();
列表组=空;
公众火柴台()
{
int[]数={2,3,4,5,6,7,8,9,10};
字符串[]适合={“R[]”、“R0”、“B0”、“B[]”等;
deck=number.SelectMany(n=>suites,(n,s)=>new MatchCard(n,s)).ToList();
}
公开无效洗牌()
{
deck=deck.OrderBy(x=>r.Next()).ToList();
}
公开无效交易()
{
List player1=deck.Where((x,n)=>n%2==0.ToList();
List player2=deck.Where((x,n)=>n%1==0.ToList();
}
}

您是如何使用数组的?如果val%2=0,则它甚至是奇数…您还可以将洗牌切换到orderby(()=>rand.next())如果您可以使用数组,则可以使用
列表进行洗牌。