所以我正在为这个骰子游戏上学,但我偶然发现了这个问题:
首先,让我给出一些背景信息。
我有一个名为diceResults[]
的数组,其中抛出的骰子数量保存在数组中(即你滚动了两个,所以数组的第一个索引是2)
现在一对,两对,三种和满屋都工作正常。 但是当满屋滚动时,它会识别出一对,三种,以及满屋。但它并没有认识到三者中的第二对。 我尝试了几种解决方案,但似乎都没有。
for (int i = 0; i < diceResults.Length; i++)
{
if (diceResults[i] == 2)
{
onePair = true;
for (int j = i + 1; j < diceResults.Length; j++)
{
if (diceResults[j] == 2 || diceResults[j] == 3)
{
twoPair = true;
}
}
}
}
for (int i = 0; i < diceResults.Length; i++)
{
if (diceResults[i] == 3)
{
threeKind = true;
for (int k = 0; k < diceResults.Length; k++)
{
if (diceResults[k] == 2)
{
fullHouse = true;
}
}
}
我已尝试在下方彼此设置包含if
和(diceResults[j] == 2)
的2个不同的(diceResults[j] == 3)
语句,但这似乎也无效。< / p>
我正在使用以下方法检查设置的值。
private void CheckBoolValues()
{
if (onePair == true)
MessageBox.Show("pair yes");
if (twoPair == true)
MessageBox.Show("2 pair yes");
if (threeKind == true)
MessageBox.Show("3 of a kind yes");
if (fourKind == true)
MessageBox.Show("4 of a kind yes");
if (yahtzee == true)
MessageBox.Show("yahtzee yes");
if (lowStraight == true)
MessageBox.Show("lowstraight yes");
if (highStraight == true)
MessageBox.Show("high straight yes");
if (fullHouse == true)
MessageBox.Show("full house yes");
}
非常感谢一些帮助!
答案 0 :(得分:0)
您的前几行代码不应该是:
for (int i = 0; i < diceResults.Length; i++)
{
if ((diceResults[i] == 2) || (diceResults[i] == 3))
{
onePair = true;
...
答案 1 :(得分:0)
如果你滚动3个1和2个2,你将永远不会检测到&#34;第二对&#34;,因为第一个循环只会查看骰子总数超过2.但是设置正确在您设置twoPair = true
的时候fullHouse = true
。此外,您实际上并不需要嵌套循环来实现此功能。
顺便说一下,我不确定Yahtzee的规则是什么,但是有4种被认为是&#34;两对&#34;?
答案 2 :(得分:0)
我个人认为没有任何意义,你想要在三种类型中检测到一对,但无论如何。您可以检查结果中是否已经有两对这样的结果。同样做多个for循环也是多余的。
bool onePair = false;
bool twoPair = false;
bool threeKind = false;
bool fullHouse = false;
for (int i = 0; i < diceResults.Length; i++)
{
if (diceResults[i] >= 2)
{
if(onePair == true) {
twoPair = true;
}
onePair = true;
}
if (diceResults[i] >= 3)
{
threeKind = true;
for (int j = 0; j< diceResults.Length; j++)
{
if (diceResults[k] == 2)
{
fullHouse = true;
}
}
}
}