simulation - 模拟网络游戏中的体育比赛

标签 simulation probability

在在线经理游戏(如 Hattrick )中,我想模拟两支球队之间的比赛。

一个团队由 11 名球员组成。每个球员的力量值都在 1 到 100 之间。我把每支球队防守球员的这些力量值计算出来并计算平均值。这就是球队的防守质量。然后我利用进攻球员的优势,我得到进攻质量。

对于每次攻击,我执行以下操作:

$offFactor = ($attackerTeam_offensive-$defenderTeam_defensive)/max($attackerTeam_offensive, $defenderTeam_defensive);
$defFactor = ($defenderTeam_defensive-$attackerTeam_offensive)/max($defenderTeam_defensive, $attackerTeam_offensive);

目前,我不知道为什么我将它除以两个值中较高的一个。但是这个公式应该给你一个稍后需要的进攻和防守质量的因素。

然后我为每个可能发生的事件嵌套了条件语句。例如:进攻方有得分机会吗?
if ((mt_rand((-10+$offAdditionalFactor-$defAdditionalFactor), 10)/10)+$offFactor >= 0) 
{ ... // the attack succeeds

例如,这些附加因素可以是战术值(value)。

你认为这是计算游戏的好方法吗?我的用户说他们对模拟的质量不满意。我该如何改进它们?你有不同的方法可以产生更好的结果吗?还是你认为我的方法很好,我只需要调整条件语句中的值并进行一些实验?

我希望你能帮助我。提前致谢!

最佳答案

这是我会做的一种方式。

攻防质量

首先让我们算出整个团队的平均实力:

Team.Strength = SUM(Players.Strength) / 11

现在我们想将一方一分为二,计算出我们防守球员和进攻球员的平均水平。]
Defense.Strength = SUM(Defensive_Players.Strength)/Defensive_Players.Count
Offense.Strength = SUM(Offense_Players.Strength)/Offense_Players.Count

现在,我们有三个值。第一个,即团队平均值,将用于计算我们的获胜几率。另外两个,将计算我们的防守几率和我们的得分几率。

一支进攻平均水平高的球队会有更多的机会,一支防守高的球队会有更多的扑救机会。

现在,如果我们必须组队,让我们称他们为 A 和 B。

A队,平均80分,进攻85分,防守60分。

B队,平均70分,进攻50分,防守80分。

现在,基于平均值。 A队,应该有更好的获胜机会。但多少?

评分和储蓄

让我们算出 A 队应该进球多少次:
A.Goals = (A.Offensive / B.Defensive) + RAND()
        = (85/80) + 0.8;
        = 1.666

我假设随机值添加了 -1 和 +1 之间的任何值,尽管您可以调整它。

正如我们所看到的,公式表明 A 队应该进 1.6 个进球。我们可以向上/向下舍入。或者给 A 队 1,并计算另一个是否允许(随机机会)。

现在为 B 队
B.Goals = (B.Offensive / A.Defensive) + RAND()
        = (50/60) + 0.2;
        = 1.03

所以我们有 A 得分 1 和 B 得分 1。但请记住,我们希望在 A 的情况下权衡这一点,因为总的来说,他们是更好的球队。

那么A获胜的机会有多大?
Chance A Will Win = (A.Average / B.Average)
                  = 80 / 70
                  = 1.14

所以我们可以看到 A 赢得比赛的几率是 14% (.14)。我们可以使用这个值来查看最终得分是否有任何变化:
if Rand() <= 0.14 then Final Score  = A 2 - 1 B Otherwise A 1 - 1 B

如果我们的随机数是 0.8,那么这场比赛就是平局。

总结和进一步思考

你肯定会想玩弄这些值(value)观。请记住,游戏机制很难做到正确。与您的玩家交谈,询问他们为什么不满意。有球队总是输吗?模拟总是停滞不前吗?等等。

以上大纲深受选材随机性的影响。您将希望将其标准化,因此球队多进 5 球的机会非常非常少。但是一点点随机性是为游戏添加一些多样性的好方法。

还有一些方法可以编辑此方法。例如,除了进球数,您可以使用进球数作为得分机会的数量,然后使用另一个函数根据其他因素计算进球数(即选择随机前锋,并使用该球员个人统计数据和守门员,以确定是否有目标)

我希望这有帮助。

关于simulation - 模拟网络游戏中的体育比赛,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1374868/

相关文章:

algorithm - 生成现实的股票价格

java - n 体模拟幻影力量

math - 超过 2 次分割的分割检验的显着性检验

python - 求多元正态分布中的概率

mysql - 与 6 位随机字母数字代码发生冲突的概率是多少?

python - 遵循某种概率分布,为给定大小的位串生成转移概率矩阵

r - 在 R 中循环一组数字生成命令

python - win32api虚拟移动鼠标

android - 在我的 WebView 中模拟点击

c++ - 这会累积多少浮点错误?