我正在尝试为我的小组在大学里做的“游戏”项目创建战舰游戏.我之前从未真正使用过GUI,几乎所有输出都在Eclipse控制台中.
首先,我创建了一个GUI类,它实际上是我的“跑步者”类.它加载了一个JFrame.
我有第二个类GUIGrid,它为将要显示的两个游戏板设置一个维度,并使用嵌套for循环从GUICells创建网格.
这包含侦听器等以检测鼠标正在做什么并存储每个单元格的x和y坐标.我运行了一小段测试代码,因此我可以点击任一网格上的任意位置,弹出窗口会告诉我该单元格的确切位置.
除了这些类之外,我还有一个Ship类,它有五个子类用于ship和Player类,它们存储玩家的名字并创建一个Ship对象数组供他们使用.
最后,我有我的逻辑课程.我有一个GridLogic类和一个CellLogic类.前者使用嵌套for循环来创建CellLogic对象的2D数组.然后,CellLogic类存储关于单元是否受到攻击的坐标和信息等内容.
我的问题(最后!)是 – 这是建模系统的正确方法吗?当我查看CellLogic和CellGUI类时,它们似乎有相似的东西.此外,虽然我可以让GUI响应鼠标点击,但我真的很难将GUI连接到Logic.例如,我不知道如何将船只添加到网格上,然后存储哪些位置将船舶存储在2D阵列中.在没有发布大量代码的情况下,我希望有人能够告诉我,我是否至少在正确的轨道上,或者我是否将系统分开了太多.
解决方法:
虽然我认为分离听起来不错,但可以说得更清楚.使用MVC模式,您可以清楚地定义模型(船舶和网格),控制器(您的逻辑)和视图(绘制网格的jframe).
现在基本上,模型不知道其他任何东西,控制器知道视图和模型,视图知道如何绘制模型并调用控制器作为对用户输入的反应.即:用户点击,视图只调用控制器,其中包含坐标和发生的事件.此控制器现在修改网格并发出重绘.
所以在我的pov中,你可能不需要一个cellGUI类,只是一个绘制所有内容的视图(但是,如果你在cellgui类中存储x,y,你可以像这样建模……).但是你不需要一个celllogic课程.你需要一个知道的“更高”的控制器,如何修改整个网格以及发生了什么,如果已经存在某些东西等等.
标签:java,oop,swing
来源: https://codeday.me/bug/20190825/1722328.html