模拟在线游戏中的体育比赛

时间:2009-09-03 17:39:45

标签: 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

例如,这些其他因素可能是战术价值。

你认为这是计算游戏的好方法吗?我的用户说他们对模拟的质量不满意。我怎样才能改进它们?你有不同的方法可以提供更好的结果吗?或者您认为我的方法是好的,我只需要调整条件语句中的值并进行一些实验?

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

5 个答案:

答案 0 :(得分:19)

这是我要做的一种方式。

进攻/防守质量

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

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

所以我们有得分1和B得分1.但是请记住,我们希望以A的优势来衡量这一点,因为总的来说,他们是更好的球队。

那么A会赢的机会是什么?

Chance A Will Win = (A.Average / B.Average)
                  = 80 / 70
                  = 1.14

所以我们可以看到赔率为14%(.14),有利于A赢得比赛。我们可以使用此值来查看最终得分是否有任何变化:

if Rand() <= 0.14 then Final Score  = A 2 - 1 B Otherwise A 1 - 1 B

如果我们的随机数是0.8,则匹配是平局。

收集和进一步思考

你肯定想要玩这些价值观。请记住,游戏机制很难做到正确。与你的球员交谈,问他们为什么不满意。队伍总是在输球吗?模拟总是停滞不前吗?等

上述大纲深受选择随机性的影响。你需要将其标准化,以便球队获得额外5个进球的机会非常罕见。但是一点点随机性是为游戏添加一些变化的好方法。

还有一些方法可以编辑此方法。例如,您可以使用目标数字作为得分机会的数量,然后根据其他因素计算目标数量(即选择一名随机前锋,并使用该球员个人),而不是目标数量统计数据和守门员,如果有目标,可以计算出来)

我希望这会有所帮助。

答案 1 :(得分:4)

足球最基本的战术决策是选择formation,这是一组三个数字,分别将10个外场球员分配到防守,中场和攻击,例如: 4/4/2。

如果你使用普通球员的力量,你不仅会失去那种战术,而是让它倒退:最强的防守是一个有一个非常优秀的球员,给予他任何帮助将使其更有可能是其他球队得分。如果你有一个等级为10的玩家,则平均值为10.添加另一个等级为8的玩家,平均值下降(为9)。但是让更多人参与防守应该让它更强大,而不是更弱。

首先,你想让一切都基于总数,而不是平均数。总数之间的比率是一种很好的与比例无关的方式,可以确定哪些球队更强,哪些更强。比率往往优于差异,因为它们以任何范围的优势团队以可预测的方式运作。您可以设置一个combat results table,说明有多少目标得分(每场比赛,每半场,每场比赛或其他什么)。

下一个战术选择是拥有一个特殊的球员或几个好的球员是否更好。你可以通过设置代表游戏中发生事情的场景来解决这个问题,例如: 1对1,角球或长球。首先随机选择参与场景的玩家,然后滚动场景的结果。一个结果可能是另一个场景开始(中场传球导致交叉导致头球机会)。

最后一步,它将带给你几乎达到实际足球经理比赛的水平,是给予球员不止一种类型的力量等级,例如前进,传球,投篮等。然后使用适合其所处场景的强度等级。

答案 2 :(得分:3)

你的例子中的除法可能是一个坏主意,因为它改变了输出变量的比例,这取决于哪一方更好。通常,在比较两个数量时,您需要间隔数据(从另一个中减去一个)或比率数据(除以另一个),但不是两者。

在这种情况下,一个更好的方法是简单地将进攻得分除以防守得分。如果两者相等,则结果为1.如果攻击者优于防御者,则大于1,如果防御者更强,则小于1。这些都很容易使用。

此外,根据所使用的阵型或战术,不是平均整个团队,而是团队的平均部分。这将允许球队选择进攻或防守,并看到其优缺点。

并为自己写一些更好的随机数生成函数。一个返回介于-1和1之间的浮点值,另一个返回0到1的浮点值。在你的计算中使用这些,你可以避免所有那些混乱的10s!

答案 3 :(得分:3)

您可能还想询问用户他们不喜欢的模拟。有可能的是,他们不想看到比赛的最终结果,而是想知道他们的球队有多少次有机会进攻,但防守重新获得控制权。而不是

"Your team wins 2-1"

他们希望看到匹配亮点:

"Your team wins 2-1:
 - scored at minute 15,
 - other team took control and went for tried for a goal at minute 30, 
   but the shoot was intercepted,
 - we took control again and $PLAYER1 scored a beautiful goal!
... etc

你可以使用Jamie建议的起点,随机选择时间,也可以根据进攻球员的加权抽样选择得分的球员(即得分较高的球员获得更高的机会)是得分的人)。你可以玩得很开心,并在玩家身上添加随机的低概率事件,如红牌,有人受伤,穿过场地划线......

答案 4 :(得分:0)

平均值应该是玩家数量...如果你有3个玩家团队,则使用最大值:

[4 4 4]

[7 4 1]

第二个被认为较弱。那是你要的吗?我想你宁愿做类似的事情:

(总得分/总玩家数)+(最高得分/总玩家数),所以在上面的例子中,它会让第二支队伍稍好一些。

我想这取决于你对球队应该如何平衡的感觉。