如何处理游戏中的异常

时间:2019-03-04 10:33:21

标签: java

我正在编写一个游戏,该游戏具有通过控制台与用户进行交互的功能。用户将输入命令,后跟一个空格,然后输入该命令的参数。示例:

 move-piece 5-right

该命令为“ move-piece”,参数为“ 5-right”(右侧5个点)。我有一种检查命令和参数是否以正确格式输入的方法。然后,该方法调用带有参数的move方法,该参数可在板上移动工件。例外情况的一个示例可能是游戏已经结束,在这种情况下,不允许用户移动任何棋子。另一个例外情况是将棋子移到板子外面。我总是读到关于使用异常进行控制流是多么糟糕的事情,但是我并不真正理解这意味着什么。

if (gameOver){
  throw new CustomGameException("you cannot move any pieces, because the game is over.");
}

以上是否考虑控制异常流程?当然,这不是打破游戏规则的唯一情况。我还有更多的if语句检查极端情况,但是我不确定这是否是件好事。如果上述做法被认为是不良做法,那么我应该如何处理此类情况?我希望能够为每个极端情况打印出一条唯一的消息,以告知用户有关他/她的错误。我应该注意,这是针对学校项目的,不允许在我们的主要代码中包含任何System.out.print。输出将通过main方法打印给用户。

为清楚起见,请进行编辑:  我们不允许在代码中包含打印方法。输出是通过main方法完成的。老师给我们的建议解决方案也使用例外处理此类情况。解决方案中这种用法的一个例子是当用户尝试连续两次掷骰子时(根据游戏规则这是不允许的)。对于这种情况,我的老师在roll方法中抛出了一个异常。老师还说我们不应该使用异常来控制流程,这就是为什么我有些困惑的原因。

1 个答案:

答案 0 :(得分:0)

不要从字面上就不对控制流使用异常的声明。在很多情况下,例外都可以正常工作。

对于知道如何处理错误以检测错误是否发生的代码,很难(或不承担责任)。您的情况可能是这种情况的一个示例:您想用main方法处理所有用户交互,但是代码中各种深度的各种事情都会使命令无效。所以抛出一个异常并完成它。不必担心每次用户输入一些文本时最多会发生一次的性能。

使用异常的另一个原因是检查操作是否成功时存在自然竞争条件。例如您想创建一个文件,但是常见的情况是同名文件可能已经存在,或者您的磁盘空间不足或类似的东西。在这种情况下,没有必要检查操作是否成功,因为以后执行操作时仍然可能失败。只需尝试这样做并捕获正确的异常即可。

关于“永不使用X”形式的建议在编程中很常见,几乎永远不值得与它表现出来的热情。

相关问题