客户端和服务器之间的初始交互(从服务器的角度来看)是一个新游戏的开始,其步骤如下:
- 创建一个新游戏。
- 客户端请求向服务器创建新游戏。
- 创建聊天室。
- 虽然没有明确说明,但是服务器不只是在聊天服务器中创建聊天室,而且还设置好了所需的一切,可以允许一组玩家进行游戏。
- 返回游戏的元数据。
- 一旦服务器为玩家创建好了游戏和聊天室,那么客户端会在后续请求用到这个信息。这是客户端可以用来标识自己和将要加入的游戏实例的一组ID。
- 手动分享游戏ID 。
- 这一步必须由玩家自己完成。我们可以提出某种共享机制,但我会将它留在愿望清单上等待将来改进。
- 加入游戏。
- 这个非常简单。每个人都有一个 ID,客户端通过这个 ID 加入游戏。
- 加入聊天室。
- 最后,玩家的客户端程序将通过游戏的元数据加入对应的聊天室。这是游戏开始前的最后一步。一旦完成所有操作,玩家就可以开始在游戏中冒险了!
游戏的动作指令
一旦满足了先决条件,玩家就可以开始游戏,通过聊天室分享他们的想法,并推动故事的发展。上图显示了所需的四个步骤。
以下步骤将作为游戏循环的一部分来运行,这意味着它们将会不断重复,一直到游戏结束。
- 请求场景。
- 客户端程序将请求当前场景的元数据。这是循环每次迭代的第一步。
- 返回元数据。
- 服务器将发回当前场景的元数据。这些信息中包括一般描述,从中可以找到的对象以及它们彼此之间的关系。
- 发送命令。
- 好戏开始。这是玩家的主要输入方式。它包括玩家想要执行的操作,以及可选的操作目标(例如吹蜡烛、抓住岩石等)。
- 对发来的命令做出响应。
- 这应该属于第二步,但为了清楚起见,我把它作为额外步骤。主要区别在于第二步可以被认为是这个循环的开始,而这一步考虑到你已经开始进行游戏了,因此,服务器需要了解这个动作将影响谁(单个或所有玩家)。
作为额外步骤,虽然不是流程的一部分,但服务器将通知客户端与它们相关的状态的更新情况。
存在这个额外重复步骤的原因是玩家可以从其他玩家的动作中获得更新。回想从一个地方移动另一个地方的需求;正如我之前所说那样,一旦大多数玩家选择了方向,那么所有玩家都会移动(不需要所有球员的输入)。