整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

边学边玩 零基础也能学编程

见了,新华电脑学校;再见了,北大青鸟;再见了,山东蓝翔……在线教育铺天盖地的年代,学习编程也可足不出门。有了这些编程网站,从计算机小白变身专业“程序猿”不是梦!

Made With Code:美少女专属编程学习站

给我一个学习编程的理由,Made With Code算吗?颜色粉嫩的界面,结合了流行音乐和电影的课程内容,打开这个网站本身就是一种妙趣横生的享受。

Made With Code提供面向女性的编程项目、故事和资源等。该网站目前提供了13个编程科目,其中也不乏一些有意思的“课程”。例如让“程序媛”们通过代码来设计一 款属于自己的手链,随后这个手链会被 3D 打印出来并邮寄给她们,又或者是通过程序来为“愤怒的小鸟”设计一些动作,这种寓教于乐的方式对枯燥的编程过程显然是有益的。同时网站还有自己的社区,让 有志于或已经成为“程序媛”的萌妹子们可以畅所欲言,交流学习和职场经验。

一个好消息是,Google近期斥资5000万美元投资了该网站,以鼓励更多的年轻女性进行编程学习,这算不算是变相给硅谷的IT男们发福利?

网址 www.madewithcode.com

语种 英文

萌码:搭上你的编程“时光机”

萌码被称为中国版的Codecademy(国外最大的编程学习网站),因为两者实在太像了。二者从功能到界面都近乎一致——左侧栏的几段话是知识点讲 解,讲解后有一个小练习,右侧有一个在线编译器。学习者可以在学习了知识点后,根据自己的理解在右侧输入代码来完成任务,代码输入正确才可“运行”,运行 后才可顺利进入下一课。

如果用户在学习过程中碰到问题,可以在 “提问”栏中输入自己的问题并且提交。萌码还有一个很有趣的功能叫“时光机”,它能让用户回放每一个编程步骤,看每一步的程序运行过程和结果,并以图形化 方式显示,这样用户可以清晰地理解每一步的含义,并找出代码出错的地方进行修正,从而避免在未来的编程过程中再犯类似的错误。

网址 www.codecademy.com

语种 中文

实验楼:编程从打地鼠开始

网址 www.shiyanlou.com

语种 中文

其实标题有点夸张,对于零基础用户来说,一秒学会打地鼠显然是不大可能的。不过在线课程,不但要好用,还得好玩。

实验楼同样提供了 Linux 基础入门和Python 编程语言的学习课程,但别具特色的是,它还有不少项目课程,让用户边学边练。例如,Javascript打地鼠、pygame开发打飞机游戏。并且,实验楼有个专门的页面来统计用户学习的过程。

更重要的是,它提供给用户的不仅是一个简单的在线编译器,而是一台或多台配置好的虚拟机,可以支持更广泛的 IT 内容学习,不再局限于编程领域。

实验楼是基于阿里云,面向计算机相关专业学生及 IT 从业者的在线实验工具,这使得在线实验的应用范围得到极大的扩展。在“实验楼”中,用户可以体验到多样的在线实验内容。不但可以练习编程,哪怕是想要开发 一个网站,从选择技术框架、架设服务器、设计数据库,到开发前后端、上线网站,这些都可以在实验楼进行实践。

文首发腾讯游戏学院 2021年、2020年


<多人PvP射击游戏融入开放世界玩法>地图与关卡设计要点

作者:Reese 腾讯互动娱乐 项目管理

当多人PvP射击游戏融入开放世界玩法,会产生怎样奇特的变化?在众多成熟的同类作品中,我们又该如何分析它们的地图与关卡设计?本篇文章将以“间隔+道路+区域POI”这一结构为切入点,进行深度分析。


*注:本文是从“间隔+道路+区域POI”角度对开放世界LD的分析,而非设计框架与思路。


一、概述


1.1 为什么要开放世界?


当大家都在为塞尔达呐喊时,我在海拉鲁大地里走路,走到了九月九,依然不知去哪做任务,于是我把它当成了《海拉鲁马匹驾驶模拟》,以完成一个欧卡老司机的使命。其实,PvE开放世界的好处显而易见,创造一个足够大的世界任由玩家探索主宰,提供不同的场景给人以新鲜感,于是时间悄然而逝。


而在射击领域,曾经在Dust2里就绕晕的我,面对庞大的PUBG反而又找到了驾驶员的乐子,于是,开始沉思多人PvP枪战游戏世界开始变得开放的好处到底在哪?



相比于传统小地图射击游戏,开放世界在空间和时间上给了玩家更多富余,因此提高了多样性与自由度


  • 空间:包含多种传统关卡的大容器。
  • 时间:完成目标的时间限制更宽松。


且富余的时间与空间可孵化单局内更多的动态变化


(e.g. 20平米的公寓干不了啥,只能躺着switch,甚至just dance都嫌挤;有个大别野就不一样了,院子、卧室、客厅、厨房,体验一下子就丰富了起来,甚至可以叫上一百人来开party)


1.2 多人PvP开放世界射击游戏主要模式


从下表里可以看出,类比传统FPS,不仅世界开放了,目标也开放了,那人也能更开放了吧?



1.3 开放世界射击游戏题材与Z轴关系


刚才说到空间上的开放,其实除了平面地图面积的变大,还有一个很重要的维度就是开放了Z轴(房屋、山谷、高塔等)给游戏带来了多一层次的体验。相对而言,写实类在Z轴的移动性会低于科幻、魔法类,毕竟普通人也不能飞吧。



1.4 以“间隔+道路+区域POI”的结构来看地图



举个例子:假如把CS的各个经典地图都塞进一个大世界里,每个关卡作为一个区域,放置的时候在这些区域之间留下一些间隔,最后用大马路连接起来。一个世界,N张地图,美滋滋啊。


1.5 以“间隔+道路+区域POI”的结构来看PUBG





二、宏观角度


2.1 整体结构



观看战地与Fortnite的地图,第一眼是不是首先会沿着大路看?




2.2 玩家记忆地图序列



2.3 区域间隔


Apex的地图是最与众不同的,因为其没有道路连接区域。其中的原因是Apex不同区域之间间隔较小,玩家可以游走于区域之间,无需道路引导,且其利用峡谷等地形构建了很多天然道路。




2.4 区域与世界的关系


区域是主要交火发生的地方,也是玩家主要的遭遇点。




2.5 区域评级与权重


并不是所有区域都那么值钱,就像城市也分为市中心与乡下一样。头脑风暴了一下,一个区域的好坏可以由以下几个维度来评判:


  • 资源数量:战术竞技类游戏中的装备、其他游戏里与规则相关的关键资源(e.g. Hunt: Showdown里Boss)。
  • 交通便捷度:是否位于咽喉路径(一夫当关万夫莫开)、是否位于交通枢纽(地图中心四通八达)。
  • 遭遇可能性:其实这是个因变量,也可以理解成风险或制约因素,资源+交通的优越性决定了区域遭遇敌人的风险程度。


举例:记得曾经年少时,朋友因为带不动我,所以老是在战术竞技类游戏里带我跳地图中心有一个会刷车的地方。这个区域就可以理解为“特殊资源”+“交通便捷”,但这个特殊资源对于比赛获胜来说重要程度一般,因此跳那个地方的遭遇风险不算高。




2.6 重点区域/主要遭遇点


定义


“对游戏结果具有战略意义;玩家为获取优势,自愿聚集于此;由于游戏机制设定,玩家必须前往此地。”



重点区域分布


既然区域有高低贵贱之分,那么为了维持全图的均衡性,自然需要有一个合理的分布。不然人往高处走,水往低处流,阶级差距就越来越大了呀!因此在安置重点区域时,需要注意:


  • 错综有序,肥瘦均匀:注意群落的平衡性。
  • 不要忘了在偏远处放置:为确保大地图有存在意义,应尽量确保偏远地区也有玩家前往,激活地图;如果玩家只聚集于开放世界的局部地区,那么就不“开放”了。
  • 关键区域公平可达性:在制定关键区域分布时,需考虑平衡不同玩家到达关键区域的难度、时间。
  • 且此方法可以成为一个过滤器:热爱钢枪/偏好风险的玩家会聚集于此;休闲玩家则会避免主动前往,从而避免风格不同造成体验失衡。


重点区域类别


  • 固定:每次单局不会变化,例如固定任务点、大概率会出现丰富资源处、交通枢纽。
  • 需要在设计时就有意识放置,重点区域位置会引导玩家分布。
  • 需重点进行关卡设计,促进战斗多样性,提高区域重玩性。
  • 局内玩家行为随机触发:主要在于触发行为的设计与分类,重点在于随机性。


2.7 垂直区域-Z轴




2.8 一些其他参数



From: https://www.sportskeeda.com/esports/pubg-map


三、微观角度


3.1 区域空间特性


  • 环境:区域主题、基调与色彩、地形、主要材质、建筑风格、开放度、视线范围、灯光(e.g. 在一次分享上听到的生动例子:迪士尼公园里的不同子区块)。
  • 结构:整体形状、道路分布、建筑分布、室内复杂度。
  • 边界:区域出入口、区域是否有硬边界;开放区域更容易遭遇、更难防守;半开放区域入口更少,更易防守;边界也可阻挡视野范围,避免过多信息干扰。


最重要的一点:让这个区域具有区分度与独特性,便捷记忆且提供差异化体验。



3.2 区域战术特性


路径


区域内部路径更类似传统射击游戏中的的关卡设计,但由于开放世界的开放性,玩家在室外对路径的选择会更为自由,路径起到的战术作用会有所降低。


地形


  • 水平:开阔程度,开阔->更难脱战,正面火拼;隐秘,掩体更多->利于脱战,更多追逐与微战术选择。


举例:建筑/掩体排列方式、密度。


  • 垂直:占领制高点会带来视野优势,低洼处会有劣势;且利用z轴上的差异,对玩家射击要求更苛刻,使玩家的身位更难预测。


举例:山坡、房顶、阳台、特殊高型建筑。


掩体


  • 抵挡伤害:实掩体-背坡、树、石块、墙壁、载具;半掩体(可穿透)-木箱。
  • 阻挡视线:草丛。
  • 分割战场:使玩家行为不可预测,增加战斗多样性。(举例:PUBG名场面,两个对手围着大石头互相绕后。


*人为制造掩体:技能/载具、fortnite。


核心要义:使玩家行为不可预测,使战术选择更有多样性,使战斗更具有深度。



3.3 区域战斗特性



  • LD应根据不同战斗场景设计不同战斗区域,并且使这些区域于世界内均匀分布。
  • 不同战斗区域特性需为整体游戏战斗节奏/战斗风格服务,且资源/Loot等相关系统需配合战斗场景(e.g. PUBG跳伞前期容易拿喷子CQB杀人)。
  • 在战斗过程中,玩家只存在两种角色:攻守方/明暗方。
  • 一个好的关卡,在于其:能支持多少战斗形式/能支持多少种战术行为。

3.4 关键路径/咽喉路径

指的是:连接两块独立区域的独有路径,玩家最优解只有这几条(<=2);这些路径通常较为狭长,战斗方式类似于巷战。


此地易守难攻,一夫当关,万夫莫开,因此需平衡攻守难度。


攻方战术:需利用投掷物突进/多点分散进攻


举例:岛屿与大陆之间的桥梁、两座大山之间的峡谷。


需为攻方提供备选方案,但要付出更高的时间代价


举例:游泳过河、翻山越岭,但偶尔也会给一些惊喜,比如小船。




3.5 任务点


在任务点只有两种角色:完成任务方/守株待兔方。


  • 任务过程抽象


到达任务点-需要一段时间操作(最易受到攻击)-防守一段时间/携带东西离开;总体而言,守株待兔方会更有优势(在暗处),因此需给进攻方更多路径选择=不能让防守方堵住所有的路。


  • 防范老6


任务点旁不可有上帝视角位置;对于在任务点旁蹲点的位置,必须有制约方法(e.g. 增加后路,给老6增加视觉盲区)。


  • 任务位置需要被强调,足够明显


任务点为核心交战地区,需要有足够的标识来吸引玩家聚集;且明显地指引玩家完成任务,而非在任务点附近迷失。


举例:PUBG发着红烟的空投


  • 不同阶段任务分布


在完成主任务的途中分布一些轻松的小任务来给玩家找到事做;且子任务也可以作为引导方式的一种。


举例:塞尔达在主任务途中穿插一些mini game来“开放”地引导玩家走具体的路径。


四、地标与导航


4.1 全局视野


全局地标


作用:让玩家不用打开大地图就能快速判断自身方位,一种更自然快捷的交互方式。


  • 很高,远距离可见的建筑物


举例:城市地标,看到电视塔就知道城市的方位;塞尔达的神塔。


  • 悬浮于空中的自然物


举例:看太阳位置来辨别方位;APEX两只奇怪大龙。



地区位置


  • 区域具有足够的符号化与风格化,用大众普遍可以认知的事物包装。
  • 不同区域需要具有显著的差异化,方便记忆;如果不同区域过于相似,则无法快速记忆。
  • 玩家可以通过记忆区域在地图的大概位置来判断自身方位。(举例:PUBG学校在地图中心位置;机场在地图底端。


4.2 区域内部指示


区域内部的小路更多,且可能更为迂回,玩家容易迷路,因此需放置一些抓人眼球的东西,来作为道路引导/标记具体地点;且具体的实体,可以更方便队友报点。


  • 涂鸦/路标-CS在岔路口有明显的A/B指示特殊物品
  • 特殊物品-利用非对称的物品指示方向:车头向北




参考文献

“Ben's small bible of realistic multiplayer level design” by Benjamin Bauer 2014

以及shane、charlie两位同事对文章给出的补充和建议



PVP玩家特别在意!FPS游戏关卡平衡性分析

作者:Edward 腾讯互动娱乐 游戏策划


本文重点分析PVP FPS游戏中的平衡性对于游戏的意义,以及如何使用博弈论概念,对游戏的平衡性进行设计和分析。本文不涉及很多高深的理论和公式推导,只是较浅层的将博弈论现有研究和游戏的设计经验进行了一定的结合。文中所提到的游戏,均指如CS、COD等的PVP FPS游戏类型。



01)平衡性:是什么?为什么?



a) 平衡性是什么


平衡性早就不是个新鲜的概念。在双人对抗游戏中,一个游戏平衡的定义是在参与者水平相同,并对游戏的胜利规则都完全理解的情况下(即理性人),多局游戏中两人的获胜概率均为50%;而在n人或n队参与的对抗的游戏中,情况会稍显复杂,仍从胜率角度看,每人或每队的应该在1/n。平衡性就是衡量对局是否能达到设计胜率的参数。



b) 为什么游戏关卡需要平衡性设计


从孩提时的游戏我们就能意识到,在一场与人对抗的游戏中,如果规则或者参与人员不平衡,游戏都会变成毫无意义的活动。试想在“剪刀石头布”中,剪刀变成了可以攻陷所有防御的工具,那么所有玩家都会选择剪刀了。


“游戏是有意义的选择(Meaningful Choice)” ,在PVP游戏中,每个人都没有必胜的选择,此时游戏的无法预测性,更突出了与人博弈的快乐。



c) 博弈论与平衡性


平衡性是一个对抗游戏的基础,下面我们尝试从博弈论的角度解释为什么平衡性在对抗游戏中如此重要。


博弈论(GameTheory)属于经济学的二级学科,一个完整的博弈应当包括五个方面的内容:第一,博弈的参加者;第二,博弈信息,即博弈者所掌握的对选择策略有帮助的情报资料;第三,博弈方可选择的全部行为或策略的集合;第四,博弈的次序,即博弈参加者做出策略选择的先后;第五,博弈方的收益,即各博弈方做出决策选择后的所得和所失。


而PVP游戏中玩家就是博弈的参加者;玩家了解到游戏规则和战场情报是博弈信息;玩家做出的各种选择,是博弈论中的行为和策略;玩家的行为顺序属于博弈次序;而玩家因选择不同而游戏目标完成情况则是博弈论中的收益。可见,Game Theory正如其名,实际上也可以用来分析一场游戏的整体或局部的博弈情况。


博弈有四种基础模型:静态完全信息博弈,动态完全信息博弈,静态非完全信息博弈和动态非完全信息博弈。信息是否完全要看参与者是否对规则和战场情报完全了解(是否实时的了解规则和其他的玩家选择),而动态和静态的区别主要在于,静态是单次的博弈,没有后续博弈,动态则相反。


在PVP FPS游戏中,如CODM手游的几个经典MP模式,其博弈可以抽象为动态非完全信息博弈。


博弈论中,最重要的目标是研究一场博弈的解,也被称为博弈均衡时的策略。一场“平衡”的游戏,其实就是博弈均衡时,玩家的收益应该相等。无论收益正负还是零,相等即为“平衡”。在多人博弈中,用随机来制造平衡是一个常见的设计手段。


在传统的双队对抗的PVP游戏追求的都是通过关卡设计、玩法设计以及匹配系统,来保证游戏的博弈均衡是一场能够分出输赢的零和博弈,即一定有一个胜利方和一个失败方;当然随着设计师们对玩家心理的把握,也有让AI成为失败方来调节玩家体验的方法,我们暂且不在此展开。


当游戏达到博弈均衡时,此时所有理性参与者都都愿意维持现状(稳定状态的),而不愿意改变行动,因为一旦改变行动就会让自己的收益变差。那游戏该如何进行下去呢?


这就要靠游戏机制了。像是胜利条件等机制都是在逼迫玩家从博弈均衡状态中脱离,在不完全信息的动态博弈中,掌握了更准确信息的参与者会有更大几率获得胜利。再有,实际上博弈均衡的假设是基于参与者的完全理性的,在实际游戏中,参与者的状态、心态一定是不断变化的,这便是游戏中“与人斗,其乐无穷”的意义了。


总而言之,一个博弈均衡时玩家收益是否相等,就是游戏平衡的判断标准。而游戏机制就是要不停的把玩家推离均衡点,来造成局部或广泛的动态非完全信息博弈过程。


02)通过关卡设计影响平衡


研究平衡性设计,就要先知道是什么导致了不平衡。



a) 收益、信息与策略


一个理性玩家(清楚所有游戏规则)在游戏中的博弈过程,可以简化成:“收集信息->形成策略->获得收益”的循环,通过游戏关卡设计,可以对这三个维度进行干预和调整,就可以直接影响到游戏的平衡设计。


i. 收益不同造成的不平衡


清楚不平衡的来源后,我们要站在平常在工作中,一个关卡设计师最常做的事就是对场景中掩体的摆放不停推敲;掩体就是最直接造成玩家收益不同的玩法元素。


图2.1 不平衡的区域设计


在如图所示情况中,站在掩体后的玩家占有明显的优势,在这种局势下,谁能最先抢占到掩体后点位,谁就能更大概率的杀死敌方玩家,是典型的不平衡的设计。


如果想平衡这一场景,有很多方法。最简单的是给该空间内对称位置放置一个相同的掩体,只要保证玩家进入掩体的时间相等,空间对称就一定是绝对平衡的了。但是在大多数游戏的设计中,往往不会采用这样简单粗暴的方法。因为这既不真实,又容易造成玩家对方位的迷惑。


图2.2 对称设计的掩体,失去了真实性和引导性。


除了掩体类型,还有高低差也会造成玩家的收益不同。与半身掩体一样,抢占到高点(无论是窗还是台)的玩家,都占有更大的收益优势。


图2.3 二楼窗边的玩家,露出了更少的身体,也处于需要移动视角才能看到的位置,所以更有优势


在相同时间可以抵达的关键玩法区域中,如果一方暴露了更少的躯体部分(Hitbox),那么他的收益一定是大于暴露了更多的。上述半身掩体、高低差的方法都是常见的制造不平衡的收益的方法。


显而易见,在一个平衡的对局中,多打少也会造成收益上的不平衡。往往人数不平衡的对局,就需要在角色基础属性上做更多的调整,以及机制上做随机,以保证没有人有必胜的策略。


ii. 信息差造成的不平衡

信息差在平衡性设计中也扮演了重要的角色。生活中常见的形成信息差的结构就是单面玻璃。


图2.4 一面是玻璃,一面是镜子的单向玻璃


而在FPS游戏中,最常见的由信息差(在这里主要是视差)而造成不平衡的设计是通道转角。


图2.5 由视差带来的不平衡的通道转角


假设玩家A一定要通过转角,同时右边的敌人,玩家B也知道这一信息,那么当玩家A的通道比较狭窄时,玩家A的视角如下图:


图2.6 由视差带来的不平衡的长通道转角


而玩家B的视角如下图:


图2.7 由视差带来的不平衡的长通道转角


也就是说,在玩家A转向看到玩家B之前,B玩家就早已看到了玩家A露出的身位了。这种情况在现实的作战中也是常常存在的,由此产生了应对的CQB转角战术,即:通过通道转角时,一定要贴近转角外侧,并收起武器,以减少视差带来的影响。


图2.8 CQB转角战术


而另一种常见的利用信息差获取优势的方法是“背后的威胁”。如下图所示场景中,在二楼的敌人是不容易注意到从左侧斜坡走上来的玩家的,这就产生了信息差,因为他更可能去注意他的优势防守区域,即视野正前方。


图2.9 “背后的威胁”——玩家视野外的门


假设我们的游戏是完全信息的,一个理性的玩家是可以意识到敌人和可能会从房间中的门来攻击自己,自然也会分出精力来关注门口的情况,甚至在门口架设阔剑地雷。而楼下的敌人则可以趁玩家关注门口的空挡(队友信息或无人机等),来到窗口下方,打到二楼玩家背身。


可以看到,一个玩家视野外的门,就造成了如此丰富的博弈结果。我们假设这个信息差不存在,那么这个关卡会变成怎样呢?


图2.10 玩家视野内的门


二楼的玩家会因为提前抢占了这一位置,在这区域内变成“无敌”的。没人可以在二楼玩家眼皮底下爬上楼来清掉这个点,也没有人敢从楼下的空地穿过。这样的点位除非有特殊设计目的所在,否则便是很破坏游戏体验的设计。


以上的例子,可以看出“背后的威胁”存在的意义。


iii. 策略多寡造成的不平衡


策略(也有翻译为战略)在博弈论中指的是针对博弈的某一阶段,参与者可以进行的选择。在FPS游戏中,这种可选策略的数量,也影响着对局的平衡。


图2.11 猜猜我在哪?


一种更常见的以策略多寡来造成的不平衡的方法是多窗口的建筑。如下图所示。


图2.12 有很多进攻窗口的建筑


下图所示的情况就是CODM游戏中令很多玩家崩溃的场景,如果此时该玩家没有任何其他掩体,存活的可能性微乎其微。


图2.13 Crossfire 打地鼠



b) 平衡性与游戏性


游戏经验丰富的读者一定发现,实际上虽然“不平衡”确实对游戏性有很大的伤害,但是在很多FPS地图中处处都充斥这种不平衡设计,这该如何解释呢?


我们可以先来看看以绝对平衡闻名的关卡地图设计。



i. 绝对平衡的关卡设计


绝对平衡的关卡,换句话说就是对于对抗双方,所处的位置环境和到关键点的距离全都相同。从结构来看,绝对平衡的关卡,一定是对称结构的。再加上对称的复活/出生规则,以及其他对参赛双方完全相同收益的规则,就组合出了一个绝对平衡的游戏模式。


在FPS发展的历史长河中,出现过不少的大小不一的绝对平衡的关卡地图,其中最出名的当属iceworld。


图2.14 iceworld


这种简单重复的结构,加上较小的面积,作为练枪图是最合适不过了。摒除了地图理解和团队配合,每个玩家都可以单纯以枪法一决雌雄。


这种极端的关卡,有些“大巧不工”味道在里面。但不可忽视的是,FPS游戏虽然枪法是核心的玩法,但不是唯一的玩法。关卡设计师如果在大面积的地图上也使用简单的对称结构,往往也会被玩家抱怨“偷懒”和“无聊”。毕竟一个哪里都一样的地图,既不方便玩家判断自己所在位置,有没有任何体验上的惊喜。(甚至玩家游戏输了以后,也少了一个“这个地图玩的少”的甩锅理由…)


但是,在较大型地图的核心区玩法域应用对称结构,再辅以一些美术包装,也可以制作出经典的地图。例如下图所示的COD黑色行动系列Meltdown。感兴趣的读者可以查阅该图的设计,或者下载CODM手游自行体验。


图2.15 Meltdown


这里有个逻辑提醒读者注意,绝对平衡的关卡设计一定是对称的设计,但对称的设计不一定绝对平衡。这一点我们将在下一小节说到。


ii. 不平衡会为游戏带来什么?


事实上,大部分FPS对战地图都是非平衡的设计。不过这里我们要明确,所有的关卡都是要避免绝对不平衡的。


正如上文所提到的剪刀石头布,剪刀永远可以胜利的例子,如果玩家理性并且都可以选择剪刀,那这场游戏就会变成一场永无止境的平局。在博弈论中,这种情况被称为绝对优/劣势解。在游戏中,如果有存在图2.10的结构,哪怕地图是对称的,这种绝对的不平衡就会带来每个理性玩家,都没有理由离开这个结构去冒险进攻。严重情况,游戏的节奏会被严重拖沓甚至无法进行下去。


为了游戏体验的丰富多样,且可以正常进行,让游戏除了比拼枪法外,还存在一定的策略性(分路、特定武器优势点、站位等),局部相对不平衡的设计是必要的。而为了减少地图对游戏机制的依赖,增加关卡的重玩性(避免玩家分到某队就退出游戏),整体的平衡也是必要的。


局部不平衡的设计技巧,可以从空间上和时间上两个维度考虑。


空间上:提供可解的不平衡


如下图实际上是一个典型的策略多寡造成的不平衡区域:玩家如果想穿过桥洞,就要面对来自三个不同地方的威胁。但在COD16中,关卡设计师通过地形上的土坡结合玩家动线,巧妙地将这种威胁一一化解了。


图2.16 COD16 幼发拉底桥


想象玩家从图中左侧移动到右侧,三处不同的威胁就会按照图中标示的1、2、3顺序依次出现。这也就给了玩家一个可以化解不平衡的方法。


类似的设计还有很多,上文中提到的图2.9-10也是个例子。感兴趣的读者可以在以后的游戏中多多留意。


时间上:拒绝永恒不平衡


在有攻守的模式中,防守方往往会先占据一定的优势;但一旦进攻方突破了某条防线或者关键区域,整个游戏“攻守互换”,胜利的天平就又会倒向进攻方。典型的应用了这个思路的游戏模式就是爆破模式。


一个典型的爆破模式,一般为两队对抗。游戏可以分为三个阶段:开局战术实施阶段、下包前对抗阶段、下包后终局阶段。根据统计,爆破模式在比赛的前两个阶段时,防守方胜率是高于进攻方的。而在比赛进行到下包后阶段,攻守互换,进攻方的胜率会再次高于防守方。


为了证明这样的比赛仍然可以做到整体的平衡,我们假设一场爆破比赛的前两个阶段,防守方胜率为70%,进攻方为30%;下包后,防守方胜率为30%,进攻方为70%,而进攻方下包率40%;根据贝叶斯定律,我们知道:


防守方胜率 = 70%*(1-40%)+30%*40% = 54%

进攻方胜率 = 30%*(1-40%)+70%*40% = 46%


可以看出,攻守双方的胜率已经非常接近了。当然,由于这里忽略了下包率与胜率是有一定关联的,概率并不独立,所以只能以此作为一个近似计算。


不过在真实的游戏中,在任何阶段,两方的胜率差如果像上述例子一样大,往往说明某一方确实占据了非常有利的位置;这时就体现出了爆破模式的另一个精妙所在——设计师用两个或以上的爆破点,配合5~6人的参赛人数,让两方队伍可以利用信息不对称,在不平衡的局部关卡中充分斗智斗勇。


iii. 小结


局部的不平衡而整体平衡的设计,是关卡设计中最体现一个设计师想法和能力的地方。在繁冗的3D空间,规划玩法空间;结合游戏玩法,设计关键点位;最终让玩家在看似不事雕琢的环境中,自得其乐,是一个此类游戏关卡设计师最高的追求之一。

总结


一个完整的游戏模式玩法,仅靠关卡是无法保证平衡性的。局外机制如匹配、Ban&Pick,局内机制如随机位置复活、半场换边等,共同构建了游戏起了游戏这个复杂的不让任何一方占优的动态非完全信息博弈体系;游戏通过胜利条件将玩家推离博弈平衡,让参与的玩家都可以根据自己对游戏的理解,构建自己的:信息->策略->收益循环,不断根据动态的场面情况,来与对手玩家斗智斗勇。


在实际设计应用中,不但要通过定性来判断场景、关卡的平衡性,还需要通过用户研究、线上测试等方法,定量分析,切实的统计与模式相关的平衡性数据信息。随着近年AI技术的发展,使用机器学习Agent模拟人类玩家行为,提前发现未上线的地图、模式的问题的方案也很多游戏中有落地应用了。


最后我想说,将游戏设计中的规律形成方法,经验形成理论,在此之中抽象游戏最本质的模型(meta-game),不仅可以指导项目的设计方向,对行业的创新与发展也一定大有裨益。


Reference:

1. 博弈论基础,罗伯特·吉本斯

2. 对抗类游戏平衡性评价与环境预测方法,https://www.youxituoluo.com/522527.html

译局是36氪旗下编译团队,关注科技、商业、职场、生活等领域,重点介绍国外的新技术、新观点、新风向。

编者按:Marc Andreessen十年前说的“软件蚕食世界”不仅完全正确,而且似乎不仅如此:软件正在重塑世界。人类世界的运转已经无法离开软件。在浩如烟海的软件代码当中,哪些对我们起到了关键作用呢?Slate网站邀请了各方人士对那些改变了一切的代码进行评选,这里筛选出36个代码片段。如果你有更好的选项,不妨在评论区留下你的意见。原文作者是Future Tense,标题是:The Lines of Code That Changed Everything。鉴于篇幅太长,我们将分三部分刊出,此为第一部分。

早在2009年,Facebook推出了改变世界的代码段——点“赞”按钮。“赞”是几名程序员和设计师的创意,其中包括Leah Pearlman和Justin Rosenstein在内。他们推测,Facebook用户常常因为太忙而没时间到朋友的帖子上发表评论,所以想如果有一个简单的按钮可以按一下的话,也许互动就会爆发:这可以释放出大量令人兴奋的肯定。就像Pearlman 后来所说那样:“朋友们可以通过这种频繁的多、容易得多的互动手段来相互验证。”

这个点子奏效了,也许有点太好了。通过把“赞”做成一个零阻力的手势,到了2012年,大家的点赞次数已经超过1万亿次,并且的确释放出了大量的验证。但是它的副作用也令人不安。我们发布了一张照之后片,就会坐在那里焦急地不断刷新页面,等待点赞数的增加。我们想知道为什么别人拿到的点赞数会比自己的多。于是我们开始给自己日常的在线行为放大功率:想变得更有趣、更刻薄、更迷人、更极端。

代码塑造了我们的生活。就像风投家Marc Andreessen所写那样:“ 软件蚕食整个世界”,尽管此刻说软件正在消化世界可能会更准确些。

从文化角度上来讲,代码是比较下层的存在。我们可以感觉到它对我们日常现实的神秘影响,但是却很少能看到它,而且对于非初学者来说有点高深莫测。(硅谷的人喜欢这样这有助于他们自我神话为巫师。)我们给电影、游戏和电视都立了十大排行榜,让那些塑造了我们灵魂的作品扬名立万。但是,即便代码跟这些类型的作品一样反映了时代思潮,我们却未曾坐下来汇编过世界上最重要的代码清单。

所以Slate杂志决定自己来做这件事。为了弄清楚有哪些让世界为之倾斜的软件,杂志编辑对计算机科学家、软件开发人员、历史学家、政策制定者以及新闻工作者进行了民意调查。这些人需要做出以下选择:哪些代码段影响巨大?哪些代码改变了我们的生活?约有75位受访者提出了各种各样的想法,Slate从中选择了36位。鉴于写成的有影响的代码如汗牛充栋,这里的清单并不完整,也不可能完整。(我很喜欢的一个并没有人选:快速排序算法!或者Ada Lovelace的伯努利算法也许也算一个。)就像所有的榜单一样,它的目的是启发,去帮助我们重新思考代码是如何影响我们的生活,以及程序员所做的决策是如何影响未来的。

里面的有些代码你可能已经听说过,比如HTML什么的。有的代码功能强大(比如用来对概率建模的蒙特卡洛模拟),但一般人完全不知道是什么。有的则包含了致命错误,比方说波音737 Max的缺陷。还有一些令人毛骨悚然,比方说让营销人员知道你是否已打开电子邮件的像素跟踪。

有一个趋势是很明显的:最重要的代码往往会通过消除阻力来塑造新行为。当软件让做某件事情变得更容易时,这种事情我们就会做得更多。1988年编写的代码第一次建立起“Internet Relay Chat(IRC,多人在线交谈系统)”,这使得早期的网民彼此可以实时进行文字聊天。现在,实时文字聊天已经无处不在,从令人应接不暇的Slack职场闲聊吹水,到Twitch直播的钓鱼和反钓鱼之战,不一而足。

某些代码什么时候具备了划时代意义未必总是很清晰。一开始它只是个怪异的尝试,一个实验气球。《Spacewar !》是第一个获得病毒式流行的视频游戏。可是在1961年的时候,用价值12万美元(相当于2019年的100万美元)的机柜式计算机万游戏被视为一种相当无聊的使用方式。但是它独创了很多帮助计算机进入主流的概念:用图标表示数据,让用户用手持控制器操作这些图标。

代码的影响可能会让所有人感到惊讶,包括写代码的人在内。—Clive Thompson,《程序员: 新部落的形成和世界的重塑(Coders: The Making of a New Tribe and the Remaking of the World)》作者

1、二进制穿孔卡片

年代:1725

第一段代码

二进制编程早在计算机诞生之前就有了。大家认为Basile Bouchon 是第一个给纸片打孔并用来控制机器的人:1725年,他发明了一种织布机,这种机器可以根据送入的穿孔卡片的指令编织图案。打孔的是“1”,没有打孔是“0”。尽管此后东西发生了很大的变化,但代码的基本构建块并没有改变。— Elena Botella ,Slate

2、执行的第一段现代代码

年代:1948

既开辟了计算机代码的使用,也引领了塑造冷战军备竞赛的核毁灭计算机模型的使用

ENIAC(电子数字积分计算机)是第一台可编程的电子计算机。机器于1945年建成,每解决一个新问题都要靠重新连线许多部件来完成。当一项任务(比如加法)完成时,会用一个脉冲来触发下一项任务。但是几年后,克拉拉· 丹·冯·诺依曼和洛斯阿拉莫斯的科学家Nicholas Metropolis对ENIAC重新进行了接线,让这台机器跑出来有史以来在任何计算机上执行的第一段现代代码:从可寻址只读存储器(ENIAC的函数表开关)执行数百条数字指令。他们模拟了新墨西哥州洛斯阿拉莫斯国家实验室正在评估的几种原子弹设计的爆炸情况,用蒙特卡洛技术来模拟一个复杂系统,几乎是一步步地把可能结果的概率分布呈现出来。冯·诺依曼和Metropolis)向洛斯阿拉莫斯的核科学家发送了20000多张卡片,跟踪弹头引爆后模拟中子的变化情况。知道今天,这段代码的子孙后代还在洛斯阿拉莫斯那里发挥作用。—Thomas Haigh ,《ENIAC in Action: Making and Remaking the Modern Computer(ENIAC实战:现代计算机的制造和改造)》合著者

3、Grace Hopper的编译器

年代:1952

令计算机处理文字成为可能

IF END OF DATA GO TO OPERATION 14 .

来自维基百科

当Grace Hopper决定通过以人类语言为基础来简化整个过程时,她正在对一台早期计算机进行编程。二战期间,Hopper加入了美国海军预备队,她知道,像她在部队的上司一样,大家都在努力去理解二进制代码。而如果编程语言是基于英语的话,那么这项工作就不会那么容易出错,并且对于那些没有数学博士学位的人来说也更加平易近人了。

一些人对这种想法嗤之以鼻,但1950年代初时,她设计出了一种编译器,也就是一组可以将更容易理解的代码转化为由机器处理的较低级代码的指令。通过这一工具,她和她的实验室开发出了FLOW-MATIC,这是第一种将英语纳入该过程的编程语言。——Molly Olmstead,Slate

4、星际飞行(Spacewar)!

年代:1961年

发行的第一款视频游戏

/ this routine handles a non-colliding ship invisibly

/ in hyperspace

hp1, dap hp2

count i ma1, hp2

law hp3 / next step

dac i ml1

law 7

dac i mb1

random

scr 9s

sir 9s

xct hr1

add i mx1

dac i mx1

swap

add i my1

dac i my1

random

scr 9s

sir 9s

xct hr2

dac i mdy

dio i mdx

setup .hpt,3

lac ran

dac i mth

hp4, lac i mth

sma

sub (311040

spa

add (311040

dac i mth

count .hpt,hp4

xct hd2

dac i ma1

hp2, jmp .

Steve Russell,收集自Bitsavers.org

1961年末,一群年轻的MIT雇员、学生和同事(其中很多是Tech Model Railroad俱乐部的成员)拿到了最近别人捐赠的DEC PDP-1计算机的深夜使用权。属于非军事计算前沿技术的PDP-1售价为12万美元(按今天计算将超过100万美元),字长达18位,程序存储用的是纸带。这帮程序员用五个月的时间开发了一个游戏,里面是两名玩家控制着飞船(针和楔形物)进行一对一的太空战,同时还要避开位于屏幕中心的恒星的引力。

很快,星际飞行!就在早期的“黑客”社区中传播开来。后来DEC把它预装进了每一台PDP-1里面,并预装到核心内存里面,准备在安装时进行演示。这个程序对1960年代规模还很小的编码社区产生了重大影响,并启发了后面数代的视频游戏创作者。现在它还从模拟者那里找到自己的存在,并且在计算机历史博物馆的最后一台可操作PDP-1上还在定期演示。2018年,游戏的首席开发者Steve Russell在史密森尼学会上说:“它已有50多年的历史。没有未解决的用户投诉。没有崩溃报告。而且支持依旧提供。”——Arthur Daemmrich ,导演,勒梅森发明与创新研究中心

5、电子邮件的起源

年代:1965

拜托,这是电子邮件。

WHENEVER A(1).E.FENCE.OR.A(2).E.FENCE.OR.A(3).E.FENCE

PRFULL.($'R'1INSTRUCTIONS:$)

PRFULL.($ '4MAIL NAME1 NAME2 PROB1 PROG1 PROB2 PROG2 ...$)

PRFULL.($ WHERE '=NAME1 NAME2'= IS THE FILE TO BE MAILED,$)

PRFULL.($ AND '=PROBN PROGN'= ARE DIRECTORIES TO WHICH '8$,

1 $IT IS TO BE SENT.'B$)

CHNCOM.(0)

END OF CONDITIONAL

CTSS 程序员MAIL手册页

1961年,麻省理工学院的黑客开发了一个系统,这个可以让多个用户登录到同一台计算机上,然后他们开始互相给对方简短留言。1965年,一群编码人员决定开发一个正式的命令系统来发送、接收和显示这些数字化的信函。对于“MAIL”这个命令一开始上级是拒绝的,觉得有点轻率,但它的使用却大行其道,以至于到1971年,麻省理工学院甚至出现了第一条垃圾邮件:一条反越战的信息。——Clive Thompson

6、警察巡逻算法

年代:1968

现代预测警务和种族定性计算机化的开始

1965年,当林登·约翰逊总统组建总统执法与司法委员会时,他下令该委员会研究如何利用计算机来帮助解决美国的的“犯罪问题”,他和该委员会对这个问题的定性是“城市问题”和“黑人问题”。这个问题的答案是“警察巡逻算法(Police Beat Algorithm,PBA)”,该算法旨在解决规划问题,比方说在城市的特定区域需要安排多少名警察巡逻之类的问题。通过将PBA与犯罪数据库相结合,警方可以在犯罪实施之前根据种族人口统计数据自动生成嫌犯档案,并相应部署资源(警察,武器和其他装备)。今天的预测警务对黑人和棕色人种监视并定罪的情况相对不成比例。就像PBA的故事提醒我们那样,这种情况并不是不可预见的技术故障的结果:相反,这是这项技术50年设计的完美体现。——Charlton McIlwain,《黑人软件(Black Software: The Internet & Racial Justice, From the Afronet to Black Lives Matter)》作者

7、阿波罗11号登月舱的紧急救助代码

年代:1969

防止登月舱的计算机在太空中耗尽空间的代码

POODOO INHINT

CA Q

TS ALMCADR

TC BANKCALL

CADR VAC5STOR # STORE ERASABLES FOR DEBUGGING PURPOSES.

INDEX ALMCADR

CAF 0

ABORT2 TC BORTENT

OCT77770 OCT 77770 # DONT MOVE

CA V37FLBIT # IS AVERAGE G ON

MASK FLAGWRD7

CCS A

TC WHIMPER -1 # YES. DONT DO POODOO. DO BAILOUT.

TC DOWNFLAG

ADRES STATEFLG

TC DOWNFLAG

ADRES REINTFLG

TC DOWNFLAG

ADRES NODOFLAG

TC BANKCALL

CADR MR.KLEAN

TC WHIMPER

数字化:Virtual AGC与MIT Museum

阿波罗制导系统计算机(AGC)是一个奇迹:就像计算阿波罗重返地球轨迹的Poppy Northcutt告诉我那样,AGC的计算能力还比不上今天记录个人信息的贺卡。但是,它却做到了该做的。

有限的计算能力和存储空间意味着必须细致地管理好任务,因此AGC始终聚焦在最重要的工作上。如果它没有足够的空间来执行任务,那就不可能完成任务。AGC软件团队知道,总有些事情是自己计划不到的。因此,他们开发了BAILOUT。当计算机有空间用完(或“溢出”)的风险时,AGC会触发BAILOUT把不太重要的数据和操作调走,从而让重要的数据和操作保持正常运行。

当Eagle着陆器准备降落到月球表面时,大概在30000英尺高空处,AGC 发出了“1202”的警报,尼尔·阿姆斯特朗和休斯敦的飞控都没有马上意识到这一点。但是在不到30秒的时间内,指挥中心的计算机专家表示,AGC软件正在按预期的方式运行:放弃了低优先级的工作并重新开始重要的工作(这个过程很快,以至于大家都无法察觉)。阿姆斯特朗和Buzz Aldrin可以继续从AGC那里得到他们绝对需要的东西,好继续安全着陆。

在阿姆斯特朗说出“鹰已降落”之前,溢出警报还会再响三声,但永远是因为事情按预期进行才会响。“救助”一词通常表示任务以失败结束,但在这里却让人类的最高成就成为现实。— 史密森尼国家航空航天博物馆主任Ellen Stofan

8、Hello, World!程序

日期:1972年或更早

把世代引入代码的一句话

main{ printf (“ hello,world \ n”); }

当你坐下来学习一门新的编程语言时,教程要你做的第一件事就是让计算机显示出 “Hello,world!”这句话。也许早期最著名的例子来自贝尔实验室备忘录,《C语言编程教程》。 这本书写于1974年,尽管有人发现在1972年的B语言手册里面也发现了它,而且可能时间比这还要早。

Hello, World!是一个很美丽的教材。这是一项很小的、可完成的任务,可以让人早早获得成就感。这已成为了标准,有助于说明不同编程语言之间的差异。对于高级程序员来说,这也是一个快速简便的方法,可确保在安装新环境后一切正常。(有时候程序员会用“实现'hello world'的时间'作为比较语言和环境的速度测试。)也许最重要的是,“Hello,world!”天真、友善,而且有助于说明新程序员的代码可产生的影响范围。那就是全世界。——IBM AI设计主管Chris Noessel 。

9、空终止串——Null

年代:1972

计算史上最灾难性的设计错误

char yellow[26] = {'y', 'e', 'l', 'l', 'o', 'w', '>char yellow[26] = {'y', 'e', 'l', 'l', 'o', 'w', '\0'};<'};

GNU C参考手册

1972年,丹尼斯·里奇(Dennis Ritchie)做出了一个重大决定:自己的新语言要用一种所谓的“空终止串”来表示文本。这个概念其实早就出现了,但是他在自己的新语言,C语言里面把它奉若神明,而这一决定的遗产从此就一直缠住了我们。

编程语言表示一段文本的主要有两种方式:它可以是内在的固定长度的——“我就包含10个字符,就这么多。”也可以用过空值(null)结尾——这里有一堆的字符,你尽管看下下去,直到最后到达零字节为止,祝你好运!”

C代码中一个极其常见的错误是把一个长字符串复制到一个较短的字符串,造成结尾处溢出,这意味着你破坏了刚好在附近的其他数据。就像在白板边上写东西一样。

除了只是导致程序发生故障外,此类错误还可以用来说服程序用经过精心设计的特定数据去覆盖某些内容,从而改变程序的行为。这就是缓冲区溢出攻击。但凡你听说过的安全漏洞几乎都是从这里开始的,其始作俑者就是1988年的莫里斯蠕虫病毒(Morris Worm)。

仔细写代码可以避免在C语言中出现此类错误,但是这种语言的特点导致此类错误产生容易检测难。几乎所有的现代语言都避开了以null终止的字符串,但是从路由器到“智能”灯泡,C和C ++仍然在世界的基础处运行着。因此,在将近50年后,我们仍跟这类bug在玩打地鼠的游戏。——Jamie Zawinski,Netscape开发者,Mozilla.org创始人,DNA Lounge老板

10、Telenet远程网

年代:1975

第一个基于数据包交换的公共数据网络,是当今互联网的骨干

互联网的前身是ARPANET,这是一个供高级研究计划局(现为DARPA)研究人员机器之间交换数据的计算机网络。随着ARPANET在政府内部的扩张,网络搭建者意识到这项技术可能对普通大众也很有价值,以及参与到其中可以催生多少的商机。1975年8月,ARPANET的商业版本Telenet 在七个城市上线,该网络可让最早期的客户(主要是计算机或数据库公司)用电话拨号方式上传下载(如电子邮件原型消息)或远程访问存储在中央计算机上的代码。虽然ARPANET通常被认为是现代Internet的鼻祖,但实际上为公众消费而设计的Telenet才是Web的前身。实际上,1980年代Telenet的最大客户之一就是Quantum Link,后者后来成为AOL。——Jane C. Hu,Future Tense contributor

11、温哥华证券交易所的舍入误差

年代:1982

一个小小的小数点之别付出的巨大代价

- return floor(value)+ return round(value)

温哥华证券交易所使用的代码大概是这样的。

1982年初,温哥华证券交易所推出了一种一开始锚定基点为1000点的电子股票指数。但是推出后在两年的时间之内,它就跌到了原始价值的一半,这种走势在牛气冲天的1980年代初期是一个令人困惑的反例。一项调查显示,对指数的计算在一个地方出了问题,那就是用floor而不是round。用floor意味着指数被舍入而不是取整到小数点后三位。(数字计算机必须要有有限的精度,因此需要四舍五入或截断。)因此,如果指数计算值为532.7528的话,计算机保存下来的值是532.752,而不是四舍五入为532.753。这一点点的差异本来关系不大,但由于每天都要对指数进行数千次计算,这种看似很小的差异(基本上每次都进行不进位舍入)导致指数值出现急剧下降。这个编程错误最后在1983年11月被修正,当时的某个周五收盘时指数已经降到500左右了。到了下周一指数以超过1000点开盘,损失掉的价值被恢复回来了。——伊利诺伊大学香槟分校助理教授Lav Varshney

12、Therac-25代码

年代:1985–1987年

事实证明,过分自信会杀死人

当真相显现时,头条新闻就现代化发出了警告。《洛杉矶时报》宣称:“复杂时代的软件故障会死人。” 一种本来用于治疗癌症的机器由于在几家医疗机构对六名患者进行了过大剂量的放射,造成了至少三人死亡。

研究人员经过调查发现,Therac-25的程序允许致命错误的出现。本来这台机器提供的是低功率和高功率两种类型的治疗,而后者需要金属设备来过滤光束。但是由于软件存在的错误,操作员可以在没有合适的金属设备就绪的情况下意外触发高功率模式。

在设计上,Therac-25是Therac-20的“改进”版,而且这种软件被认为已经万无一失,因此不需要外部的安全检查。结果:重大死亡的责任要归咎于过度自信的工程师,因为他们没有对错误发生的可能性做出解释。——Molly Olmstead

人类历史上最重要的36个代码片段(二)

人类历史上最重要的36个代码片段(三)

译者:boxi。