我已经在java编写了大约一年半的时间,并且制作了一些我认为非常好的小游戏和程序。问题是我主要是自学成才,而且我的大多数代码和类结构都没有组织或“正确结构化”。对于我做的较小的事情,这对我来说并不重要,但是如果我要接受一个更大的项目,我会想要正确地构建它并使它有条理。
在之前的迷你RPG游戏中我有
我的主要类包含播放器和引擎的实例,引擎的实例为地图。问题是播放器然后无法告诉引擎它在哪里,引擎无法调整播放器当地图上发生某些事情时,强>位置和统计数据。所以我最终在播放器和引擎中都有一些静态变量和方法来让它们进行通信。
我想我的整体问题是这是正确的类结构,在这里使用静态方法和变量是否正确?如果没有,你将如何构建这些类,或者是否需要更多或更少的类?
我的总体目标是了解如何在之前的游戏中构建类,这样我就可以在一个更大的项目中更好地构建类。
答案 0 :(得分:3)
这是一个相当广泛的问题,但一般的答案是否定的。
通常,您不应使用静态字段来连接实例。 (有一些可能的例外,但根据经验,它是一个有用的例子。)OOP的基本思想是每个人都有一个参考他们想要发送消息的人。因此,如果Player
需要告诉Engine
某事,它应该引用它所属的Engine
个实例。或者您可以重新设计您的体系结构,只有Engine
向Map
和Player
发送消息,如果没有关于您的设置的更多详细信息,在这种情况下是否合适,则很难说清楚
另一条一般建议是尝试用一张纸坐下来,记下所有三个类的名称,并在另一栏中写下系统必须做的所有事情。然后你应该试着找出谁对什么负责。在一个好的设计中,这个决定很简单,如果你发现自己把不同的东西分成了一个类,这表明你应该需要一个更详细的模型和更多的类。
我还建议您查看observer pattern和publish-subscribe pattern,因为它可能就是您所需要的。
答案 1 :(得分:1)
尝试看看一些设计模式 您想要使用哪种设计模式取决于您的喜好。有些可以找到here on Wikipedia。
我还认为你熟悉OOP?可以找到一些更一般的信息here on Wikipedia。
看看你的具体故事,我认为MVC设计将是一个很好的解决方案。
MVC意思是模型视图控制器。
这里有模型,类包含不同形式的数据
您的控制器控制您的模型,包含所有真实的逻辑
而您的视图,这是您的应用程序的图形结束。
答案 2 :(得分:0)
您可能也希望将您的播放器放入引擎中。这样你的引擎就会控制一切(玩家和地图)。希望有所帮助!
答案 3 :(得分:0)
根据您的描述,有几种可能的方法来解决这个问题。一种是使用消息传递系统。我将研究Java Messaging Service(JMS)。另一个是让你的应用程序事件驱动器。这是一个关于如何使用spring执行此操作的简洁小教程:https://spring.io/guides/gs/messaging-reactor/。话虽如此,如果您的意图是更好地理解使用Java解决问题,我首先会尝试自己模仿这两种方法,而不需要任何庞大的框架。