Java网络 - 客户端和服务器

问题描述:

我对Java很陌生,刚刚开始网络连接,所以我提前为任何愚蠢的问题道歉。我有一个基本的游戏,玩家(或机器人)可以在地图上移动,直到找到项目并退出,但使用网络我希望玩家和机器人能够在同一地图上同时在服务器。Java网络 - 客户端和服务器

我有5类:

  • GameRules - 控制游戏逻辑/规则
  • 地图 - 包含地图。
  • 玩家 - 代表一名玩家。
  • Bot - 以机器人的方式进行游戏。
  • PlayGame - 通过CLI控制与游戏的交互。

我很确定GameRules和Map会在服务器端,而PlayGame会在客户端,但是我不确定Bot和Player类在哪里?另外,我是否将GameRule和Map合并到一个类中,或者在每个类中放入一个套接字?

非常感谢。

+0

无论如何,您最终必须在两个项目之间共享代码。这是服务器 - 客户端架构的命运。 – nurettin 2013-03-08 13:38:17

客户端 - 服务器游戏中的大多数模型应驻留在客户端和服务器上。

  • 客户端需要模型来可视化他们所持有的数据;
  • 服务器需要它们根据业务逻辑对其进行修改 - 然后将中间结果发送给客户端以更新其模型。服务器必须这样做,因为这是其存在的原因:通过成为唯一可以改变游戏状态的节点来保持游戏状态一致。

您可以随时尝试在客户端保留所有模型,但想象一下当您想与N个客户端进行游戏时,您会为自己编入什么编码恐怖。他们都必须拥有一致的状态。让一个节点(服务器)做出决定,然后其他节点必须遵循指示,这是更加安全的。

请注意,在更高级的实现中,如实时游戏,客户端还实现了一些预测行为来隐藏客户端 - 服务器延迟,从而暂时改变游戏状态,但服务器命令总是推翻客户的决定。您还可以以这样的方式对客户端进行编码,即使他没有收到来自服务器的先前“移动”的确认时,他总是能够继续播放 - 您必须在某些移动时实施回滚/更正功能被服务器拒绝。

根据所需的业务逻辑和同步时间的复杂性,完全有可能将大多数所有内容都保留在客户端级别,而只是使用服务器作为更新代理。想象一下2人在线国际象棋游戏。规则是如此标准,时间只是来回,所以这个游戏的“服务器”只需要通过一个玩家来回移动。会像用插座替换祖父棋牌赛中的邮件。每个(客户)方都知道如何处理移动以及哪些新移动是有效的。