2009-09-03 67 views
6

在一个在线经理游戏(如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

在这个模拟中,计算中的10特别代表什么? – 2009-09-03 17:47:51

+0

模拟质量如何,他们不满意? – 2009-09-03 17:56:06

+0

@Kyle Walsh:只使用10s,因为mt_rand()函数只取整数值。我想生成一个-1(或更高取决于其他因素)和+1作为浮点值的随机值。 – caw 2009-09-04 15:09:13

回答

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个球的机会非常非常罕见。但有点随意性是为游戏添加一些变化的好方法。

也有编辑此方法的方法。例如,您可以使用目标数字作为得分机会的数量,而不是目标数量,然后使用另一个功能来计算基于其他因素的目标数量(即选择一个随机前锋,并使用该球员个人统计和守门员,以确定是否有目标)

我希望这会有所帮助。

+0

非常感谢! :)请看看我对Kylotan有关该部门的回答的评论。你认为这个部门比差异更充分吗? – caw 2009-09-08 13:52:49

+0

B.Goals =(B.Offensive/A.Defensive)+ RAND()? – Mathias 2009-10-26 07:50:37

+0

@Mathias与A.Goals =(A.Offensive/B.Defensive)+ RAND()相同,我们将B.变量转换为B.Goals.We比较每个队伍对对手球队的防守进攻情况。随机是有一些变化。 – AAA 2009-10-27 19:39:35

0

平均应该是球员的数量...也就是说,如果你有3名球员的球队:

[4 4 4]

[7 4 1]

第二一个会被认为是较弱的。那是你要的吗?我认为你宁愿这样做:

(总得分/总球员)+(最高得分/总球员),所以在上面的例子中,它会让第二队略胜一筹。

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

+0

感谢您的回答。我知道如何计算平均值,我已经实现了这一点。 $ attackerTeam_offensive是攻击者进攻的平均值,$ defenderTeam_defensive是防守者防守的平均值。但我不知道为什么我用两个值中较高的一个来区分他们的差异。我不知道我的技术/方法是否好。 – caw 2009-09-04 15:12:03

3

在你的例子中的划分可能是一个坏主意,因为它改变了输出变量的规模,取决于哪一方更好。一般来说,在比较两个数量时,您可能需要间隔数据(从另一个中减去一个数据)或比率数据(将一个除以另一个)而不是二者。

在这种情况下更好的方法是简单地将进攻得分除以防守得分。如果两者相等,则结果将为1.如果攻击者比防御者好,则它将大于1,并且如果防御者更强壮,则将小于1。这些数字很容易处理。

此外,取代整个团队的平均值,团队的平均部分取决于所使用的队形或战术。这将允许球队选择进攻或防守,并看到这个利弊。

并写下自己一些更好的随机数生成函数。对于初学者来说,返回-1到1之间的浮点值以及从0到1的浮点值。在你的计算中使用这些,你可以避免所有这些混乱10到处!

+0

非常感谢!我认为将这两种力量值分开是不错的主意。这些因素会以不平衡的方式变化,你会得到一个抛物线:6/1 = 6,6/2 = 3,6/3 = 2这不应该是这样吗?不同的是我认为更好的方式。 – caw 2009-09-08 13:38:31

+0

反对分歧的另一个论据:从4/2到4/3的值正在下降,而从2/4到3/4的值正在上升。这完全是不必要的,不是吗?这意味着:作为一名主队,做强更好。作为嘉宾团队,弱点是很好的。 ;) – caw 2009-09-08 13:45:09

+0

我已经取得了团队各部分的平均值。我有$ attackTeam_offensive和$ attackTeam_defensive。或者你的意思是我甚至应该将攻击分成左右两部分? – caw 2009-09-08 13:46:53

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 

可以使用的东西像什么杰米提出了一个起点,在随机选择的时间,也许挑谁踢进球门基于对进攻球员的加权抽样(即得分越高的球员获得进球得分的机会越高)。你可以玩得开心并且随机添加低概率的事件,比如红牌在球员身上,有人受伤,球员横扫球场...

4

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

如果你使用一般的球员实力,那么你不会失去这种战术,而是会让球队倒退:最强的防守就是拥有一名非常优秀的球员,给予他任何帮助将会使其更有可能成为另一支球队得分了。如果你有一个等级为10的玩家,那么平均值为10.添加等级为8的另一个玩家,平均值下降(至9)。但分配更多的人进行防守应该使其更强大,而不是更弱。

所以首先,你想让所有东西都基于总数,而不是平均值。总数之间的比例是一个很好的与规模无关的确定哪些球队更强大以及多少的方式。比率往往比差异更好,因为他们以可预测的方式与任何范围的优势团队一起工作。你可以设置一个combat results table表示有多少个进球(每场,每半,每一步或其他)。

下一个战术选择是让一个特殊的球员或者几个好的球员更好。您可以通过设置表示游戏中发生的事件的场景来做到这一点,例如一对一,一角或长球。参与场景的参与者首先被随机选择,然后场景的结果被推出。一个结果可能是另一场景开始(中场传球导致交叉导致头球机会)。

最后一步,它将带给你足够的实际足球经理比赛水平,给予球员多种强度等级,例如头球,传球,投篮等等。然后你使用适合他们所处场景的强度等级。

+0

谢谢! “你有后退:最强的防守就是拥有一名非常优秀的球员,给予他任何帮助将会使其他球队得分更高。”你能解释一下这个更详细吗?所以你会采取比率而不是差异? – caw 2009-09-13 18:19:55

+2

如果您有一名玩家的评级为10,则平均值为10.添加评级为8的另一名玩家,平均下降(至9)。但分配更多的人进行防守应该使其更强大,而不是更弱。 比率往往比差异更好,因为他们以可预测的方式与各种优势的团队一起工作。 – soru 2009-09-14 00:31:34