我看到了与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();
}
}
答案 0 :(得分:0)
用户pm100评论说,最后一个break
将代码返回到外循环,这是导致错误的原因。删除此错误解决了我的问题中所述的问题。可能还有其他错误或改进此代码的方法,但是该注释解决了此问题的特别重点。