有一个名为Soccerstar的浏览器游戏,用户可以在一支足球队中比赛,并在比赛中与其他球队比赛。比赛安排在一天中的特定时间,并自动播放,当用户登录时,他可以观看代表最后一场比赛的动画。
现在,我想实现一个类似的特性:根据玩家的统计数据和战术选择在服务器上模拟匹配,并将有关比赛进展的信息存储在数据库中。请注意,我想要的结果球员的行动(铲球,投篮等)。不是完全确定性的,因为我想介绍一些随机性。一旦对匹配进行了模拟和存储,客户端就可以随时检索信息并生成动画。
我主要怀疑的是如何表示和存储有关比赛进展的信息:什么是最聪明的方法?
发布于 2019-01-18 07:05:13
大多数伪随机数生成器都可以用种子值初始化。当你用相同的种子初始化它时,你会得到相同的随机数序列。这意味着,即使是使用伪随机数的算法,如果您用相同的值为RNG种子,也可以精确地再现。
这意味着您只需将种子值存储在数据库中,就可以准确地再现所有随机事件的匹配结果。
但是,在您的情况下还有一个额外的问题:游戏是异步进行的。当一名球员在其他球员打完比赛几小时后观看比赛时,一些影响比赛结果的变量可能已经改变。例如,对手可能已经改变了他们的团队组成。因此,您需要确保比赛总是在比赛计划的时间点用游戏状态来模拟,而不是当前的游戏状态。
如果您的数据模型有一个内置历史(这也可能对许多其他原因有用),这是微不足道的。如果您的数据模型没有保存历史记录,那么您需要存储与比赛结果相关的游戏状态的所有部分以及RNG种子。
另一个问题发生在您决定更改算法时,该算法用于在您的游戏已经公开时决定匹配。当一个玩家在你发布更新之前观看游戏,而另一个玩家在发布后观看它,他们会得到不同的结果。您可以通过保留旧的匹配算法来避免这个问题,并且总是根据调度匹配时的当前算法来确定匹配。
https://gamedev.stackexchange.com/questions/167235
复制