关于服务器客户端游戏的类设计问题



我有一个关于游戏类设计的问题。我已经对服务器、客户端连接和客户端进行了基本设置。 我的目标是在此基础上实现一款游戏。该游戏是一个索引卡游戏,玩家收到一个单词并必须翻译它。第一个响应正确翻译的玩家获得一分。 我的想法是实现一个所有逻辑都发生的游戏类。 在这里你可以看到我当前的类图(对不起,如果某些逻辑画得不好。我只用谷歌搜索了我的班级图设计,这是我能做的最好的(

我的类图

服务器在开始时获取玩家数量、回合数和其他变量,并保存游戏实例并使用传递的参数对其进行初始化。在游戏中,所有的逻辑都发生在选择下一个术语,所以发送并检查谁回答正确 我的问题是:如何以适当的方式解决游戏发送,例如通过广播功能翻译当前单词。 我的第一个想法是游戏扩展服务器,这样我就可以在游戏中使用服务器的广播功能。但我不确定,因为游戏实际上不是来自类型服务器的实例,并且服务器拥有它的实例。因此,关于OOP感觉不对。 我的另一个担忧是,服务器有一个连接列表并且玩家也有与他们的客户端的连接是否有意义。这可以用更优雅的方式解决吗?

有人可以帮我有一个漂亮且定义明确的类结构吗?

提前感谢您的任何帮助。

我认为你走在正确的轨道上,并且对在哪里进行这个有很好的直觉。

我的总体建议是从具有明确定义的角色和职责的类开始。例如,您谈到让游戏扩展服务器与服务器保存游戏实例。我个人会从后一种方法开始,因为这有可能使游戏逻辑与服务器无关。

我建议列举你认为游戏所需的各种组件,并赋予它们非常明确的角色。例如:

  • 服务器负责保持核心游戏状态并接受传入的客户端(玩家(请求。
  • 游戏
  • 负责核心游戏逻辑。
  • 客户端是用户启动/启动/与游戏交互的界面。客户端连接到服务器。
  • 。等等。

我只是在上面做了一些描述,但如果你经历同样的练习,你会开始看到一些关系,并了解项目应该如何相关。

我认为定义每个职责并明确分离并且不要模糊界限非常重要,至少在设计早期是这样。只关心游戏逻辑的游戏组件/类集可以使重新设计更容易。例如,如果您使游戏和服务器合二为一,那么如果您选择稍后执行点对点系统,则很难重新设计游戏并将其放置在客户端中。另一方面,如果游戏逻辑是完全封装的,则服务器可以拥有游戏的实例,并通过定义良好的接口来回中继功能:游戏具有与游戏相关的 API,服务器负责网络和潜在的序列化问题。

完成初始传递后,您可能会发现需要稍微模糊线条才能实用。没关系。但是,在确定主要组件的外观之前,请尽量抵制这种冲动。

希望对您有所帮助!

相关内容

  • 没有找到相关文章

最新更新