我应该把我的尝试放在哪里并抓住我的游戏?

时间:2015-02-20 21:00:53

标签: c# visual-studio

我正在为学校的实验室建立一个数字猜测游戏,游戏的基本规则是你有10个猜测试图猜测1到100之间的数字。我的老师要我把所有的游戏逻辑放在一个类并使用表单类中的btn_Click方法从游戏逻辑类中调用方法。我觉得把try catch放在btn_CLick方法中是有道理的,因为我可以使用MessageBox.show来输出一条消息,比如“你必须输入一个数字”或“那么数字必须介于1和100之间”但是他他说他希望我能够获取代码并在没有表单类的情况下使用它。有什么建议?

3 个答案:

答案 0 :(得分:2)

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

这可以通过“逻辑类”中包含的方法完成。你可以让一个方法返回一个true / false,检查输入是否可以是一个整数,另一个方法可以确定它是否在你想要的范围内。

然后,您的UI将获取这些真/假,并显示/不显示您的消息框以显示错误消息。

尝试/捕获是昂贵的,在这种情况下它没用。如果/ thens和输入验证/卫生将解决您可能对此程序的问题。

答案 1 :(得分:1)

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

答案 2 :(得分:0)

你的游戏逻辑应该不关心你在哪里以及如何得到猜测(数字),所以在游戏逻辑中真的不应该需要try / catch。我想象它会暴露出一个看起来像这样的方法:

public GuessResult MakeAGuess(int guess)

请注意,它需要一个整数来与目标数进行比较。所以这里没什么可扔的。身体可能看起来像这样:

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

其中GuessResult是具有enumTooHighTooLow值的公开Correct

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