0

这个 C# 程序应该是一个二十一点程序,但我需要“洗牌”卡并只显示“手”

其余的我认为我可以管理...有人可以帮助我吗?

4

4 回答 4

1

你可以用一些简单的东西“洗牌”一个包:

var shuffled = pack.OrderBy(c => random.NextDouble());
于 2010-10-11T14:35:51.720 回答
1

洗牌的一种方法是创建新数组并以随机顺序将卡片移动到该数组中

List<Card> unshuffled = new List<Card>(pack);
pack = new Card[NUM_CARDS];
Random r = new Random()
for(int card = 0; card < NUM_CARDS; card++)
{
    pack[card] = unshuffled[r.Next(0, unshuffled.Count -1)];
    unshuffled.remove(pack[card]);
}

您可能希望使Random实例全局化,因为每次创建一个新的随机数都会在一定程度上降低熵。如果您不经常洗牌,这可能并不重要。

于 2010-10-11T13:37:42.453 回答
1

我建议将每个元素切换为随机其他元素,方法如下:

private void switchElements(Card[] pack, int nr_1, int nr_2) {
    Card temp = pack[nr_1];
    pack[nr_1] = pack[nr_2];
    pack[nr_2] = temp;
}

public void shuffle(Card[] pack) {
    for (int i = pack.length - 1; i > 0; i--) 
        switchElements(pack, i,random.Next(0,i));
}
于 2010-10-11T13:53:12.260 回答
0

我想这里已经介绍过了。

于 2010-10-11T13:36:21.053 回答