我正在构建一个简单的基于控制台的怪物战斗游戏,用于训练目的。
我创建了一个while循环,这几乎是我需要它的地方但是当用户输入错误的选择时,最后的“错误输入”类型的消息只是在屏幕上无限循环。
有人可以建议修复吗?
或者,如果我使用try,请改为捕获异常处理程序(我还不是很擅长)。
谢谢,
代码如下:
P.S变量boolean acceptInput在类的顶部初始化,该类未包含在此代码段中。
while (!acceptInput)
{
if (playerChoice == "a" || playerChoice == "h")
{
if (playerChoice == "a")
{
player.PlayerAttack();
if (random.NextDouble() > .9)
{
Console.WriteLine("You missed!");
Console.WriteLine("Press ENTER to continue");
Console.ReadLine();
}
else
{
Console.WriteLine("It's a hit!");
monster.MonsterDecreaseHealth(player.AttackPower);
Console.WriteLine("Press ENTER to continue");
Console.ReadLine();
}
acceptInput = true;
}
else if (playerChoice == "h")
{
player.PlayerHeal();
acceptInput = true;
}
}
else
{
Console.WriteLine("That is not a valid choice, please enter either A or H");
}
}
答案 0 :(得分:2)
与Pintang上面所说的类似,因为用户没有机会重置playerChoice变量的值。在while循环的开头,您需要允许将playerChoice变量重置为新输入。目前没有方法可以让用户更新playerChoice的值,因此如果条件的第一个实例被评估为false,则会出现无限循环。我会做这样的事情
while (!acceptInput)
{
playerChoice = GetUserInput(); // GetUserInput() return user input string
if (playerChoice.Equals("a"))
{
player.PlayerAttack();
if (Random.NextDouble() > 0.9)
{
Console.WriteLine("You Missed!");
Console.WriteLine("Press 'Enter' to Continue...");
Console.ReadLine();
}
else
{
Console.WriteLine("It's a hit!");
monster.MonsterDecreaseHealth(player.AttackPower);
Console.WriteLine("Press 'Enter' to Continue...");
Console.ReadLine();
}
acceptInput = true;
}
else if (playerChoice.Equals("h"))
{
player.PlayerHeal();
acceptInput = true;
}
else
{
Console.WriteLine("That is not a valid choice, please enter either A or H");
}
}