来自52张牌的发牌减少到11种不同类型的牌

时间:2016-10-01 12:59:31

标签: c# random enums

所以我必须将Black Jack编程为C#中的控制台程序。我添加了一个包含所有不同卡类型的枚举(没有颜色,只有2到10的9个不同的数字,aces的值和图片卡的一个),有11个不同的值。

然后我做了一个从该枚举中返回随机卡的方法。这很好用。但是在任务的第二步,我必须添加图片卡,我必须处理卡片中的图片卡计数。该套牌共有52张卡,其中12张是图片卡。我试过以下但是它没有用。

class Program
{
    static Random rnd = new Random(); //Initialisierung Zufallsgenerator
    static ECARDS DrawRandomCard() //Methode zum zufälligen ziehen einer Karte aus dem enum ECARDS
    {
        if ((int)DrawRandomCard() < 12)
        {
            return ECARDS.Picture;
        }
        else
        {
            return (ECARDS)rnd.Next(2, 11);
        }            
    }

    enum ECARDS { Zwei = 2, Drei = 3, Vier = 4, Fünf = 5, Sechs = 6, Sieben = 7, Acht = 8, Neun = 9, Zehn = 10, Ass = 11, Picture = 99 }; // enum mit allen verfügbaren Karten

我是新手,所以也许你很容易。谢谢你的帮助。

1 个答案:

答案 0 :(得分:2)

您将问题分解为Black Jack所需的不同类型卡片的方法很好。

然而,正如@Plutonix和@ Jean-Claude Colette已经提到的那样,您需要确保您的52张卡片组最初具有恰当比例的不同卡类型(每个号码4个,4个A和12个“图片”卡)。

接下来,在处理卡片的过程中,您必须跟踪已经发出的卡片(或者,相当于卡片中剩余的卡片)。

处理这两个约束的最简单方法是声明长度为ECARDS的{​​{1}}枚举值的数组(或列表),并使用正确的52个实例预先填充它比例(顺序无关紧要)。在那之后,你randomly shuffle数组获得一个完全随机的套牌(几乎在现实世界中发生的事情)。

现在,您可以开始处理从索引ECARDS0遍历数组的卡片。如果您已达到最后一个可能的索引(51),则只需重新洗牌并再次从索引51开始遍历。

以下示例用于说明此想法。它是用Java编写的,而不是C#。所以,把它解释为伪代码。

0