java - 如何在 Java 中正确建模战舰游戏

标签 java swing oop

我正在尝试为我的团队在大学进行的“游戏”项目创建战舰游戏。我以前从未真正使用过 GUI,之前几乎所有的输出都在 Eclipse 控制台中。

首先,我创建了一个 GUI 类,它实际上是我的“运行者”类。它加载了一个 JFrame。
我有第二个类 GUIGrid,它为将要显示的两个游戏板设置尺寸,并使用嵌套的 for 循环从 GUICells 创建网格。
这包含监听器等以检测鼠标在做什么并存储每个单元格的 x 和 y 坐标。我已经运行了一小段测试代码,因此我可以单击任一网格上的任意位置,弹出窗口会准确告诉我该单元格的坐标。

除了这些类之外,我还有一个 Ship 类,它有五个用于船舶类型的子类和一个 Player 类,用于存储玩家的名字并创建一个 Ship 对象数组供他们使用。

最后,我有我的逻辑课。我有一个 GridLogic 类和一个 CellLogic 类。前者使用嵌套的 for 循环来创建 CellLogic 对象的二维数组。然后,CellLogic 类存储诸如坐标和有关单元格是否受到攻击的信息等内容。

我的问题(最后!)是 - 这是对系统建模的正确方法吗?当我查看 CellLogic 和 CellGUI 类时,它们似乎具有非常相似的内容。此外,虽然我可以让 GUI 响应鼠标点击,但我真的很难将 GUI 连接到 Logic。例如,我不知道如何将船只添加到网格上,然后将哪些位置存储在二维数组中。在不发布大量代码的情况下,我希望有人能够告诉我我是否至少在正确的轨道上,或者我是否将系统分离得太多了。

最佳答案

虽然我认为分离听起来不错,但可以更清楚。使用 MVC 模式,您可以清楚地定义模型(船舶和网格)、 Controller (您的逻辑)和 View (绘制网格的 jframe)。

现在基本上,模型不知道任何其他东西, Controller 知道 View 和模型, View 知道如何绘制模型并调用 Controller 作为对用户输入的 react 。也就是说:用户点击, View 只调用一个带有坐标和发生的事件的 Controller 。该 Controller 现在修改网格并发出重绘。

所以在我的观点中,您可能不需要 cellGUI 类,只需要一个绘制所有内容的 View (不过,如果您将 x,y 存储在 cellgui 类中,您可以像这样建模...)。但是您不需要细胞逻辑类(class)。您需要一个“更高级”的 Controller ,它知道如何修改整个 网格以及如果已经存在某些东西会发生什么等等。

关于java - 如何在 Java 中正确建模战舰游戏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16187469/

相关文章:

java - 找不到符号方法startActivity(android.content.Intent)

java - 打印数组中的数字

java - 在 Java 中使用完整的构造函数调用作为 lambda 表达式的方法引用

java - Swing 应用程序的任务栏行为

java - SwingWorker 和命令行进程中断

php - oophp,方法和属性命名

java - Android-错误膨胀类 fragment

java - CookSwing - 从文本字段检索字符串

java - 什么时候使用不同的类?

php - 在流程之前验证集数据时,我应该使用哪个 SPL 异常?