当前位置: 代码迷 >> java >> 如何处理游戏中的异常
  详细解决方案

如何处理游戏中的异常

热度:66   发布时间:2023-07-26 14:05:31.0

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

 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方法中抛出了一个异常。 老师还说我们不应该使用异常来控制流程,这就是为什么我有些困惑的原因。

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

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

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

关于“从不使用X”形式的建议在编程中很常见,几乎永远都不值得对它产生热情。

  相关解决方案