在我的游戏中,我应该把 try and catch 放在哪里?

Where should I put my try and catch in my game?

我正在为学校的实验室制作一个猜数游戏,游戏的基本规则是你有 10 次猜测,尝试猜出 1 到 100 之间的数字。我的老师要我把所有的游戏一个 class 中的逻辑,并使用 class 形式的 btn_Click 方法从游戏逻辑 class 中调用方法。我觉得将 try catch 放在 btn_CLick 方法中是有意义的,因为这样我就可以使用 MessageBox.show 来放置 "You have to enter a number" 或 "Then number must be between 1 and 100" 之类的消息,但他说他希望我能够获取代码并在没有 class 形式的情况下使用它。有什么建议么?

我建议根本不要使用 try/catch 除非你真的 真的 需要它。因此,为了验证用户输入,不要尝试对可能引发异常的值进行类型转换,而是检查输入字符串以查看它是否为整数。如果 C# 库中没有执行此操作的方法,我会感到惊讶。

我不会使用 try-catch。您可以使用 TryParse 并将输入从字符串转换为整数。如果它不转换只是显示错误。如果它确实转换为整数,您可以执行 if-then 以确定它是否在您想要的参数范围内。

这可以通过 "Logic Class" 中包含的方法来完成。您可以使用一种方法 return 和 true/false 检查输入是否可以是整数,另一种方法可以确定它是否在您想要的范围内。

然后您的 UI 将使用那些 true/false 和 display/not 显示错误消息的消息框。

Try/Catches 很昂贵,在这种情况下没有用。 If/thens 和输入 validation/sanitation 将解决你可能遇到的这个程序的问题。

您的游戏逻辑应该与您在哪里以及如何获得猜测(数字)无关,因此在游戏逻辑中确实不需要 try/catch。我想它会公开一个可能看起来像这样的方法:

public GuessResult MakeAGuess(int guess)

请注意,它需要一个整数,它将与目标数字进行比较。所以这里什么都不会抛出。 body 可能看起来像这样:

public GuessResult MakeAGuess(int guess)
{
    if (guess > target)
        return GuessResult.TooHigh;
    if (guess < target)
        return GuessResult.TooLow;
    return GuessResult.Correct;
}

其中 GuessResult 是具有 TooHighTooLowCorrect 值的 public enum

您的 UI 将负责将字符串转换为数字(如果需要的话),并且任何 try/catching 都将在那里完成。但是,最好使用 int.TryParse 而不是 int.Parse 包裹在 try/catch 中,因为它更有效率。更好的方法是在表单上使用更合适的控件来获取用户输入。一个实际上是 designed for numbers.