C#if else用户输入处理问题

时间:2017-08-17 19:36:21

标签: c# .net visual-studio user-input

我正在构建一个简单的基于控制台的怪物战斗游戏,用于训练目的。

我创建了一个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");
                    }
                    }

1 个答案:

答案 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");
    }
}