在在线经理游戏(如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
例如,这些其他因素可能是战术价值。
你认为这是计算游戏的好方法吗?我的用户说他们对模拟的质量不满意。我怎样才能改进它们?你有不同的方法可以提供更好的结果吗?或者您认为我的方法是好的,我只需要调整条件语句中的值并进行一些实验?
我希望你能帮助我。提前谢谢!
答案 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]
第二个被认为较弱。那是你要的吗?我想你宁愿做类似的事情:
(总得分/总玩家数)+(最高得分/总玩家数),所以在上面的例子中,它会让第二支队伍稍好一些。
我想这取决于你对球队应该如何平衡的感觉。