Java客户端/服务器回合制帮助

我正在尝试制作基于客户端/服务器回合的游戏。 我希望这是一个2人游戏。 我将使用Java applet作为客户端,以便人们可以通过浏览器在线播放。

到目前为止我所知道的是,我可以创建一个接受所有传入连接的服务器,并创建一个线程来处理连接的客户端。 我也可以编写将连接到服务器的客户端。 我不知道的是如何让两个独立的客户互相交流。

小程序无法相互通信,因此必须通过服务器/线程进行通信(我假设)。

我不是Java新手,但我以前从未做过任何网络。 有人可以帮我吗?

在我看来,接近像这样的回合制游戏的最佳策略是决定一些基本的架构方法。 绘制出组件和一些基本的游戏流程图。

您应该将大部分游戏引擎逻辑放在服务器组件中。 客户应尽可能保持薄,主要关注

  1. 与游戏引擎通信
  2. 接受用户输入
  3. 解释游戏引擎响应
  4. 绘制屏幕

您的服务器/游戏引擎应该是相对无状态的,但仍保持当前正在进行的游戏会话列表。 有状态的SOAP Web服务甚至HTTP Servlet都是一个不错的选择,因为它们通过在请求中放置和读取会话cookie来为您维护会话。

万维网在请求响应上工作,因此它本质上是无状态的,但是某些技术(如Java servlet)将帮助您维护会话,以便您不必这样做。 无需物理创建单独的线程,每个请求都会导致应用程序服务器生成新的执行线程,而会话本质上是不稳定的。

在服务器端,我会在会话中保留特定活动游戏的所有数据。 通过这种方式,您的游戏引擎将保持两个玩家之间的有序沟通。

  1. 玩家1发送具有所有游戏状态改变信息的回合结束请求。
  2. 游戏引擎解释请求,对游戏状态进行必要的更改。
  3. 玩家2经常发送检查请求,看看是否还有玩家2转。
  4. 游戏引擎确认玩家2的转弯请求并发送新游戏状态作为响应。
  5. 玩家2接收响应,更新其游戏状态的副本,记录自上一回合以来的变化。
  6. 冲洗并重复。

您只需将服务器用作中间人。

  1. 客户端A向服务器发送(写入)消息,其属性表示客户端B为目标
  2. 服务器接收(读取)消息并将消息转发(写入)给客户端B.
  3. 客户端B接收(读取)消息。