研机析理:设计出能满足不同玩家要求的射击游戏地图

pexels-photo-271667

简介

这是有关设计有趣的第一人称射击游戏地图的几篇文章的主要内容。

在第一人称射击游戏的地图设计中,我们都希望地图是有趣好玩受到玩家欢迎的。但不同的玩家可能对“好玩”的定义不一样。例如有的人希望战斗节奏不要太紧张太快,而能让自己更多地参与;有的人希望能快速投入战斗而少花费时间在寻找敌人上;有的人则希望玩到对武器装备并不好的人也友好的游戏。除了增加新模式,地图设计也是很重要的元素。我们将在下面展示地图设计是如何影响到游戏体验,并尝试分别设计出能令不同玩家满意的地图。

地图生成

Cube 2: Sauerbraten,是一款第一人称射击游戏,类似反恐精英。这款游戏内置一个地图编辑器。我们将使用程序生成简单的地图。

 

a1.JPG
Cube 2: Sauerbraten的屏幕截图

我们可以用四种方式生成我们的地图。以下是四种方法的简介,详细的请看参考文章[2]。

  • 第一种是网格。即先在孔地图上铺满密度相同的垂直线和水平线。这些线将地图分成许多相同的小方格。然后再去掉其中一些线段,剩下的线段作为墙,得到连通的地图。
  • 第二种是全白,即在空地图上使用特定的算法随机生成一些墙。
  • 第三种是全黑,即先假设地图上全是墙体而没有空隙,然后用特定的算法随机生成一些较短的通道。
  • 第四种是随机挖掘,即先假设地图上全是墙体而没有空隙,然后用特定的算法随机生成通道,再将这条通道随机一直延伸,可以转弯。

由于让人类玩家游玩并反馈,然后再改进是非常费时费力的,我们决定使用全部使用人工智能,也就是俗称bot的机器人来玩这款游戏。这样能大大加快游戏速度,人类需要半小时玩一局,而电脑几秒钟就能模拟出来。

我们使用两个bot对战,然后我们将根据bot的表现,使用遗传算法生成多代地图,并根据公式选出最能让玩家欢迎并满意的地图。

适中的战斗节奏

我们首先讨论如何设计出一张战斗节奏适中的地图。我们使用”全白”的方法生成地图。并设定对战的两个bot的技术以及使用的武器相同。我们使用满意度函数来判断地图是否能让玩家满意。

计算公式

满意度函数(fitness function)。n(lost)为bot进入战斗状态的次数,而n(lost)为bot进入战斗状态后没能杀死敌人而让敌人逃掉的次数,此时bot会退出战斗状态。满意度 f 使用下面公式计算,也就是说 越大,我们认为这个地图的战斗节奏控制越合适,对玩家来说满意度越高。

la2.JPG

满意度函数是很重要的函数。我们使用的是理论上很简单的一种测量满意度的方法。对于其它不同要求的地图,我们会使用不同的满意度函数计算公式。除了满意度函数外,我们还需要其它几个函数帮助我们改进地图。

平衡。我们不希望队伍中只有最厉害的那个杀死了所有敌人,而是希望每个人都能对灭敌都有不少贡献,从而让所有人都能参与到游戏中。

我们使用如下如下公式计算平衡度B。K为一个队伍总杀敌数,而ki为第i个bot的杀敌数。B总会介于0与1之间,0代表杀敌数是所有bot平分,而1代表是一个bot杀死了所有敌人。

la4.JPG

节奏。在游戏中,我们假定”每次战斗间隔” τ 为处于非战斗状态的秒数除以进入战斗状态的次数,并使用下面的公式计算节奏P。P也是间与0与1之间,数值越高说明每次战斗间隔越短,即游戏给玩家带来的紧张感和压力越大。

la5.JPG

连杀数。连杀数是指每次生命中,连续击杀敌人而不被敌人击杀的次数。连杀在战斗人很让人兴奋,不是吗?特别是当你的队友都死亡的时候。其中连杀数L(strk)使用下面公式计算,其中streak(i)是游戏中第i次连杀的杀敌数,N(strk)是游戏中连杀的次数,而不是杀敌数。

la6.JPG

战斗频率。在第一人称射击游戏中,玩家只要还活着,就会处于战斗状态或非战斗状态中。不同的地图设计对这处于两种状态时间的影响很大。我们用如下公式计算战斗频率T(f)。

la7.JPG

地图迭代结果分析

我们使用特定的遗传算法将地图迭代十轮,每轮包括30代75张地图。满意度函数  f  一直在稳定增长从最开始的平均0,最大0.05,到最后平均0.15,最大0.2。

为了有更直观的印象,我们为之前提到的函数制作了散点图。

la8.jpg

 

 

 

 

 

如左图a,b所示,随着满意度函数  f  增长,平衡度和连杀数几乎不变,而节奏和战斗频率则下降很快。

在参考文献[1]中还列出了其它的函数的变化结果。

 

 

 

 

 

我们也将不同满意度地图的生成结果作了对比,总结能让战斗节奏变得合适的地图设计方法。

以下是用全白方法生成的地图,蓝点代表出生点,绿点代表可以拾获武器的地方。以及他们相应的heatmap,即bot死亡的位置,颜色越深代表死亡次数越多。

la9.JPG

la10.JPG

可以看到,在低满意度的地图中,结构更加简单,地图主要是由几个大空间为中心,连接旁边少数较小的过道。而高满意度的地图中,地图则由更多的小通道连接,有更多的环形路径。有趣的是,在从地图e到地图f,我们仅仅是减少了一个过道,将一个大空间分割为两个较小的空间,满意度却提升很大。

也许仅仅这些还不足以设计出一张受欢迎的地图,但我们证明了,就算是地图设计上很小的变动也能对游戏体验有影响。我们可以通过计算机程序迭代地图,从中发现能设计出一张令人满意地图地图的“秘籍”。

快速投入战斗

我们现在再来讨论如何设计出一张能让玩家快速投入战斗,而少浪费时间在搜寻敌人的地图上。我们使用了一种不同的满意度测量方式。在下面的公式中,T(f)为平均每位玩家经历的战斗时间,而S为地图中可自由活动区域的大小。

la12.JPG

我们让bot使用的武器和战术一样,并尝试使用之前提到过的四种方法生成地图,经过10轮30代迭代生成的满意度最大的四张地图。再比较它们看看能发现什么。

la11.JPG

第一行地图是使用全白方法生成的,第二行使用全黑方法生成,第三行使用网格方法生成,第四行使用随机挖掘生成。

可以看到使用全白方法和网格方法生成的地图满意度最大。它们没有统计学意义上的差别。

第一人称射击游戏中有个经典的模式叫“死亡竞赛”,即被射杀后能快速重生重新投入战斗。再配合我们专门为此设计的地图,对于那些想体验战斗快感的人来说,简直不要太爽。

平衡实力悬殊的双方

如果我们希望武器装备普通的玩家与武器装备精良的玩家对战也不至于处于完全劣势,又该怎么办呢?

我们仍然使用全白的方法生成地图。不过bot使用的武器却不一样。bot1使用可以快速射击的步枪,bot2使用射击缓慢且难以操作的榴弹炮。该怎样平衡它们呢?

我们可以为bot设定了技能值。技能值会影响bot的命中率和边移动一边开火的能力等,详细参数不再列出。我们设定bot1的技能值为20,bot2的技能值80。但在一般的地图上,依然是bot1碾压bot2。我们同样需要改进地图。

我们使用之前使用的平衡度函数作为这次的满意度函数。S1为第一个bot的杀敌数,S2为第二个bot的杀敌数。

la17.JPG

同样地图经过10轮30代迭代,满意度稳定上升。在下面两个地图例子中,左边地图满意度为0.93,而右边地图的满意度为0.98。红圈标出的地方是改动过的地方。

la16

下图为两个bot杀敌比率,X轴为bot1的技能值从0到100,Y轴为bot2的技能值从0到100。图中颜色代表bot1胜利所占比例,颜色越深代表比例越高。可以看到经过地图改进,bot1从碾压逐渐过渡到了平衡。这证明我们的方法确实有用。

la15

总结

在第一人称射击游戏的地图设计中,我们尝试为不同需求的玩家设计合适他们的地图,并使用不同的满意度函数作为地图迭代的依据。我们发现这种方法确实可以用来研究如何设计出令玩家满意的地图,并通过比较高满意度地图和低满意度地图,来发现不同满意度的关键所在。

尽管使用这些满意度函数来评判地图是否有效,还没有得到人类玩家的证实,但我们觉得这是非常有趣的。这也是我们未来的一项工作。

参考

[1]Daniele Loiacono & Luca Arnaboldi Fight or Flight: Evolving Maps for Cube 2 to Foster a Fleeing Behavior . IEEE Conference on Computational Intelligence and Games 2017 Evolving Maps for Cube 2 to Foster a Fleeing Behavior

[2] Luigi Cardamone1, Georgios N. Yannakakis2,Julian Togelius2, & Pier Luca Lanzi . 
Evolving Interesting Maps for a First Person Shooter . Evolving Interesting Maps for a First Person Shooter

[3] Pier Luca Lanzi , Daniele Loiacono & Riccardo Stucchi . Evolving Maps for Match Balancing in First Person Shooters .Evolving Maps for Match Balancing in First Person Shooters

[4]Application of Evolutionary Computation.

 

 

 

 

 

 

 

Leave a Reply