首页 > 解决方案 > 关于服务器客户端游戏的类设计问题

问题描述

我有一个关于游戏类设计的问题。我已经对服务器、客户端连接和客户端进行了基本设置。我的目标是在此基础上实现游戏。该游戏是一个索引纸牌游戏,玩家收到一个单词并必须翻译它。第一个回答正确翻译的玩家获得一分。我的想法是实现一个所有逻辑都发生的游戏类。在这里你可以看到我当前的类图(对不起,如果一些逻辑没有很好地绘制。我只是通过类图设计搜索了我的方式,这是我能做的最好的)

我的班级图

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

有人可以帮我建立一个良好且定义明确的类结构吗?

预先感谢您的任何帮助。

标签: javaserverarchitectureclientsoftware-design

解决方案


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

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

我建议列举你认为对你的游戏来说是必要的各种组件,并给他们非常明确的角色。例如:

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

我只是在上面做了一些描述,但是如果您进行相同的练习,您将开始看到一些关系并了解项目应该如何关联。

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

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

希望有帮助!


推荐阅读