我无法绕过这个问题,如果这个问题不是很清楚,我会道歉。但我会试试。
为了这篇文章,我会简单地解决一下我的问题。我正在写一个多人游戏Tic Tac Toe的游戏(不是真的,但它足够接近可数)。任何给定的玩家只能做出三个动作:
我写了一个GameEngine课程,跟踪游戏板,检查标记放置的有效性,并赢得条件。我想编写播放器类,例如TerminalPlayer(从命令行播放游戏),NetworkPlayer(接受来自服务器的移动)和ArtificialPlayer(使其脱机播放)。
我的问题是:假设每个玩家可以随时发送命令(placeMarker,requestUndo,Resign),我该如何构建这个游戏?
我可以想到可能有效的解决方案(将每个玩家放在一个线程中,并拥有GameEngine监视器请求),但我提出的所有内容都是如此笨拙和笨拙。我觉得应该有一个很好的模式,但我找不到它。
具体来说,你能回答:
答案 0 :(得分:0)
看起来像一个简单的state machine可以让你管理游戏。
答案 1 :(得分:0)
当收到某些输入到服务器时,您需要根据游戏规则进行验证,并确定天气以执行输入或丢弃它。正如Esteban所说,游戏状态将作为一个状态机进行,包括当前预计该玩家需要转弯的状态。
在游戏的不同状态下,将允许不同的输入,
如果可能的状态是:
然后你有一个动作列表,允许它们以及它们如何改变状态。
玩家1转弯:
允许状态:玩家1转
新状态:玩家2转
玩家1请求撤消:
允许状态:玩家1转
新状态:玩家1请求待处理
玩家2否认请求:
允许状态:播放器1请求待处理
新状态:玩家1转
玩家2辞职:
允许状态:全部
新州:游戏结束
如果玩家轮流移动,只需丢弃它。
答案 2 :(得分:0)
您正在寻找的概念称为游戏循环。该术语对于听起来如何通用而言是相当可谷歌的。它是一个简单的永久循环,用于检查输入,步骤游戏状态和重绘屏幕。对于网络播放器,我可能会在一个单独的线程中运行它并让它发布主游戏循环拾取的事件。