繁体   English   中英

C# 类 int 解析

[英]C# Class int parse

所以我有这个类为二十一点游戏随机抽取一张牌。 当我尝试计算起手牌的分数时,理论上它应该有效,但我不知道为什么它无效。 而且,在我运行该程序几次并且运行良好后,它会抛出StackOverflowException

public static class DrawCard
{
    static string[] culoare = new string[4] { "r", "g", "b", "v" };
    static string[] numere = new string[13] { "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A" };
    public static Rectangle carteRec = new Rectangle(50, 50, 100, 100);
    public static Rectangle sourceRec = new Rectangle(0, 0, 220, 314);
    public static GraphicsUnit unit = GraphicsUnit.Pixel;
    public static Image carte1, carte2;
    private static string carte;
    private static int _nr, _cul;
    public static int scor1, scor2, _scor;


    public static string randomcard(Random r, int scor)
    {

        //string carte = "";
        //randomizam culoarea si numarul cartii
        _nr = r.Next(0, 13);
        _cul = r.Next(0, 4);
        if (_nr >= 0 && _nr <= 8)
        {
            scor += int.Parse(numere[_nr]);
        }
        else if (_nr > 8 && _nr <= 12)
        {
            scor += 10;
        }
        carte = (string)numere[_nr] + (string)culoare[_cul];
        return carte;
    }



    public static int Scor
    {
        get { return _scor; }
        set { _scor = value; }
    }

    public static void StartHand(Graphics desen, Rectangle destRec1, Rectangle destRec2)
    {
        string k = randomcard(new Random(), scor1);
        string j = randomcard(new Random(), scor2);
        //_scor = scor1 + scor2;
        if (k != j)
        {
            carte2 = Image.FromFile(@"C:\Users\Raul\Documents\visual studio 2010\Projects\Blackjack\Blackjack\Carti\" + j + ".jpg");
            carte1 = Image.FromFile(@"C:\Users\Raul\Documents\visual studio 2010\Projects\Blackjack\Blackjack\Carti\" + k + ".jpg");
            desen.DrawImage(carte1, destRec1, sourceRec, unit);
            desen.DrawImage(carte2, destRec2, sourceRec, unit);
        }
        else
        {
            StartHand(desen, destRec1, destRec2);

        }
    }
  }

您不得以这种方式创建Random多个新实例。 文档说:

默认种子值来自系统时钟并且具有有限分辨率。 因此,通过调用默认构造函数连续创建的不同 Random 对象将具有相同的默认种子值,因此将生成相同的随机数集。 可以通过使用单个 Random 对象生成所有随机数来避免此问题。

这意味着在StartHand开始时,您通常有k == j并因此进行递归调用。 反过来,这会导致堆栈溢出。

创建一个随机数生成器的实例。 您可能希望使用比系统时钟更好的种子。 所有随机数都应该来自Random这个单个实例。

建议您使用循环而不是递归来确保kj不同。

你的得分尝试是完全错误的。 您似乎在randomcard尝试randomcard 但是您只计入一个不记得其值的局部变量。 我认为您的意思是将randomcard的 score 参数randomcard out参数。

我建议您需要采用更具功能性的编码风格。 有一个抽牌的功能。 让卡片由具有花色和价值成员的结构体表示。 有一个函数可以返回给定值的分数。 停止使用如此多的静态成员,并在可能的情况下使用局部变量并返回值。

您的随机花色编号有五个值 (_cul = r.Next(0, 4);) 和您的随机卡号十四个值 (_nr = r.Next(0, 13);),每个值都太多了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM