[英]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
这个单个实例。
建议您使用循环而不是递归来确保k
与j
不同。
你的得分尝试是完全错误的。 您似乎在randomcard
尝试randomcard
。 但是您只计入一个不记得其值的局部变量。 我认为您的意思是将randomcard
的 score 参数randomcard
out
参数。
我建议您需要采用更具功能性的编码风格。 有一个抽牌的功能。 让卡片由具有花色和价值成员的结构体表示。 有一个函数可以返回给定值的分数。 停止使用如此多的静态成员,并在可能的情况下使用局部变量并返回值。
您的随机花色编号有五个值 (_cul = r.Next(0, 4);) 和您的随机卡号十四个值 (_nr = r.Next(0, 13);),每个值都太多了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.