我想给玩家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>();
}
}
答案 0 :(得分:1)
您尝试实现的目标可以通过使用循环或Linq来完成。
如果你想循环通过你的array
或List
条件
偶数的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();
}
}