Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java I';我被教导不要把大多数方法放在一个通用的;系统“;但是他们去哪里呢?_Java_Oop_Design Patterns - Fatal编程技术网

Java I';我被教导不要把大多数方法放在一个通用的;系统“;但是他们去哪里呢?

Java I';我被教导不要把大多数方法放在一个通用的;系统“;但是他们去哪里呢?,java,oop,design-patterns,Java,Oop,Design Patterns,我在做游戏。将几乎所有的游戏逻辑放在game类中,让它创建所有对象,并在其中包含大部分getter和setter方法,这似乎是最自然的。这真的错了吗?我是否应该尝试将一些游戏逻辑强制到其他类中,比如玩家轮流作为玩家的方法 在一个典型的游戏中,如果一个玩家的射击是由鼠标点击触发的,那么你将如何从点击事件到更新屏幕状态,再到在方法的位置和对象相互调用方面摧毁目标对象 我是否应该摆脱游戏类,让其他对象都互相调用呢?这个项目需要多长时间?如果你计划一个长期的项目,你很有可能最终会放弃手工编码的UI,转而

我在做游戏。将几乎所有的游戏逻辑放在
game
类中,让它创建所有对象,并在其中包含大部分getter和setter方法,这似乎是最自然的。这真的错了吗?我是否应该尝试将一些游戏逻辑强制到其他类中,比如
玩家
轮流作为
玩家
的方法

在一个典型的游戏中,如果一个玩家的射击是由鼠标点击触发的,那么你将如何从点击事件到更新屏幕状态,再到在方法的位置和对象相互调用方面摧毁目标对象


我是否应该摆脱
游戏
类,让其他对象都互相调用呢?

这个项目需要多长时间?如果你计划一个长期的项目,你很有可能最终会放弃手工编码的UI,转而与一个大型Java游戏图形引擎集成

如果这个假设是正确的,那么您可能希望使用,以便更容易地移植图形库,以及MVP的其他好处(模块化、可测试性、跨越高层建筑等)

所以,如果你沿着这条路走,你会

  • 游戏模型:游戏中使用的数据。
    • 可能/可能没有球员等课程
    • 保存/加载/跟踪玩家的代码应在此层中
  • GamePresenter,其中包含您的所有UI逻辑
    • 它知道游戏模型和相关的类
    • 它可以使用事件处理程序或定义IGameView接口将事件传递给GameView。然而,它可能不知道真正的GameView是如何实现的
  • 游戏视图
    • 它了解所有关于游戏演示者和游戏模型的信息
    • 它应该只有实际显示游戏和从用户那里获取输入所需的代码

您描述问题的方式表明,您正在使用本应属于其他对象的逻辑重载类
游戏

当您说其他对象“主要有getter和setter”时,会出现第一个信号。这意味着这些对象只是保存状态的数据结构,但缺乏有趣的行为。这表明您仍然需要深入思考如何在对象之间分配职责

第二个证据在你问题的第二段。这表明模型和GUI之间的分离很差。验证是否有足够的分离(或不分离)的一个好测试是证明您可以从脚本玩
游戏
(至少是其中的非琐碎部分),即不使用任何GUI代码。只有在“无头”模式下功能齐全时,游戏模型才会被正确设计

最后,摆脱
游戏
类将是一个糟糕的决定,因为您的模型不会有任何实体的表示,该实体存在于您试图建模的“现实”中


我认为你所描述的以游戏为中心的设计反映了你看待这个领域的方式。如果你只看“游戏”,你就会模仿它。然而,游戏通常是充满有趣对象的丰富模拟,其行为远远超出了与玩家的交互。因此,我建议更多地思考其他对象,他们知道什么,他们可以执行什么任务,他们将如何与他人合作,等等。换句话说,不要对游戏进行编程,对其参与者、元素、规则、阶段、策略、角色等进行编程。也不要低估任何实体;所有的棋盘都有一些有趣的东西可以添加到整个棋盘中,甚至棋盘上的一块棋盘也可以为你正在创造的小宇宙做出贡献。这不是其他任何人都能提供的,也不是其他任何对象都能提供的代码经济性和优雅性。

我可以推荐您发布这篇文章吗?您正在开发什么规模的游戏?如果你正在做一个单独的项目,不要再担心标准了,只要做适合你的事情就行了。游戏的编码标准远不如其他软件领域的标准。如果你与一个团队合作,就他们想要遵循的标准与他们协商。但标准才是最重要的。