【发布时间】:2019-03-09 03:01:30
【问题描述】:
我看到过有关 Craps 的问题,但它们与 python 和 Java 有关。我希望熟悉 C# 的人可以帮助我。下面的代码旨在模拟掷骰子游戏。除了一个问题外,该代码大部分都有效。
我想我应该简要解释一下游戏。掷出两个 6 面骰子。如果结果是 7 或 11。玩家或“射手”自动获胜。如果掷出 2、3 或 12,则射手自动失败。但是,如果滚动另一个数字,则该数字将成为“点”。射手再次掷骰,直到他们再次掷出点数或掷出 7。如果重新掷出点数,则射手获胜。如果掷出 7,这一次就输了。
因此,问题在于此代码在第一次掷骰后仍会自动给出 2、3、11 和 12 的输赢。例如:射手掷出 6。6 成为点,射手再次掷出。如果射手掷出 3,则此代码将此结果标记为失败,此时应继续滚动直到掷出 6 或 7。每当在第一次掷骰后掷出 2、3、11 或 12 时,就会发生这种错误的结局。任何有关纠正此代码逻辑的帮助将不胜感激。谢谢 另外,我希望这个问题的格式正确。如果不是,请告诉我。
class Craps
{
const int dieSides = 6;
int roll;
//const int repeatGame = 1000;
Random random = new Random();
public void RollDice()
{
int die1 = 0;
int die2 = 0;
die1 = random.Next(1, 7);
die2 = random.Next(1, 7);
roll = die1 + die2;
//Console.WriteLine("The shooter roled: {0}", roll);
}
public void PlayCraps()
{
RollDice();
Console.WriteLine("The shooter roled: {0}", roll);
int gameStatus = 0;
int point = roll;
int numRolls = 1;
if (roll != 7 || roll != 11 || roll != 2 || roll != 3 || roll != 12)
{
Console.WriteLine("The point is: {0}", point);
}
while (gameStatus < 1)
{
if (roll == 7 || roll == 11)
{
Console.WriteLine("You won!");
gameStatus++;
break;
}
else if (roll == 2 || roll == 3 || roll == 12)
{
Console.WriteLine("You lost.");
gameStatus++;
break;
}
else
{
while (point != roll || roll != 7)
{
RollDice();
if (roll == point)
{
Console.WriteLine("The shooter roled: {0}", roll);
Console.WriteLine("You won!");
numRolls++;
gameStatus++;
break;
}
if (roll == 7)
{
Console.WriteLine("The shooter roled: {0}", roll);
Console.WriteLine("You lost");
numRolls++;
gameStatus++;
break;
}
else
{
numRolls++;
Console.WriteLine("The shooter roled: {0}", roll);
break;
}
}
}
}
Console.WriteLine("This game was {0} roll(s)", numRolls);
}
static void Main(string[] args)
{
Craps NewGame = new Craps();
NewGame.PlayCraps();
Console.ReadLine();
}
}
【问题讨论】:
-
使用 VS 优秀的调试器逐步检查您的代码并观察它的作用
-
您需要添加一个变量来跟踪当前点并首先检查它是否匹配。如果有当前点,则跳到下一个滚动。如果没有当前点,则检查 2/3/11/12
-
您的最后一次休息是触发 3 行为。一旦有一个点,如果滚动不是 7 或者你正在打破那个内循环的点
标签: c# loops if-statement random