首页 > 解决方案 > 掷骰子游戏陷入循环

问题描述

我正在尝试为猪游戏制作一个程序,其中用户输入一个总分来玩,然后轮流与计算机玩家一起玩,直到一个玩家达到总分。对于人类回合,玩家滚动,如果他们滚动 2-6,那么他们可以使用 r 再次滚动或使用 h 保持。when hold is selected it adds up the total points and goes to the next turn. 如果掷出 1,那么他们在这一轮中获得 0 分,然后进入计算机轮次。出于某种原因,当我选择 h 来保持它时,它会继续前进,而当它结束时,积分不会累加。不知道如何解决这个问题,任何帮助都会得到帮助

static int pigRoll()
{    
    Random random = new Random();
    int die1 = 0;
    die1 = random.Next(1, 6);
    Console.WriteLine($"You rolled {die1}");
    return die1;
}

static double humanTurn()
{
    double pointTotal = 0;
    string gameSelect = null;
    var pigDiceRoll = 0;

    Console.WriteLine("It's your turn");
    do
    {
         pigDiceRoll = pigRoll();
         if (pigDiceRoll != 1)
         {
              Console.WriteLine("r to roll or h to hold (r/h)");
              gameSelect = Console.ReadLine();
              pointTotal = pointTotal + pigDiceRoll;
         }
         else if(pigDiceRoll ==1)
         {
              pointTotal = 0;
         }
    } while (gameSelect != "r" || pigDiceRoll != 1);
    Console.WriteLine($"Your turn point total is {pointTotal}");
    return pointTotal;
}

标签: c#

解决方案


while 语句应为:

while (gameSelect == "r" && pigDiceRoll != 1)  

这意味着在用户想要再次滚动并且他们没有滚动 1 时继续循环。

或者,您可以使用:

while (!(gameSelect != "r" || pigDiceRoll == 1))

两者在逻辑上是相同的,但第一个可能更容易阅读。


推荐阅读