处理Player1和Player2之间命令的最佳模型

时间:2012-01-23 03:15:50

标签: c++ design-patterns network-programming structure

我无法绕过这个问题,如果这个问题不是很清楚,我会道歉。但我会试试。

为了这篇文章,我会简单地解决一下我的问题。我正在写一个多人游戏Tic Tac Toe的游戏(不是真的,但它足够接近可数)。任何给定的玩家只能做出三个动作:

  1. 允许当前玩家放置标记。
  2. 允许任何一个玩家请求撤消。其他玩家可以选择允许或拒绝该请求。
  3. 任何一名球员都可以辞职。
  4. 我写了一个GameEngine课程,跟踪游戏板,检查标记放置的有效性,并赢得条件。我想编写播放器类,例如TerminalPlayer(从命令行播放游戏),NetworkPlayer(接受来自服务器的移动)和ArtificialPlayer(使其脱机播放)。

    我的问题是:假设每个玩家可以随时发送命令(placeMarker,requestUndo,Resign),我该如何构建这个游戏?

    我可以想到可能有效的解决方案(将每个玩家放在一个线程中,并拥有GameEngine监视器请求),但我提出的所有内容都是如此笨拙和笨拙。我觉得应该有一个很好的模式,但我找不到它。

    具体来说,你能回答:

    1. 解决这个问题的模式是什么?是否存在,或者这比我制作的更简单?
    2. 如果Boost库(或类似的东西)优雅地解决了这个问题,该库的名称是什么?

3 个答案:

答案 0 :(得分:0)

看起来像一个简单的state machine可以让你管理游戏。

答案 1 :(得分:0)

当收到某些输入到服务器时,您需要根据游戏规则进行验证,并确定天气以执行输入或丢弃它。正如Esteban所说,游戏状态将作为一个状态机进行,包括当前预计该玩家需要转弯的状态。

在游戏的不同状态下,将允许不同的输入,

如果可能的状态是:

  • 播放器1转动
  • 播放器2转动
  • 玩家1请求待处理
  • 玩家2请求待处理
  • 游戏结束

然后你有一个动作列表,允许它们以及它们如何改变状态。

玩家1转弯:

允许状态:玩家1转

新状态:玩家2转

玩家1请求撤消:

允许状态:玩家1转

新状态:玩家1请求待处理

玩家2否认请求:

允许状态:播放器1请求待处理

新状态:玩家1转

玩家2辞职:

允许状态:全部

新州:游戏结束

如果玩家轮流移动,只需丢弃它。

答案 2 :(得分:0)

您正在寻找的概念称为游戏循环。该术语对于听起来如何通用而言是相当可谷歌的。它是一个简单的永久循环,用于检查输入,步骤游戏状态和重绘屏幕。对于网络播放器,我可能会在一个单独的线程中运行它并让它发布主游戏循环拾取的事件。