vlambda博客
学习文章列表

《生化危机2》是一道程序员面试必考题

首发订了《生化危机2》,但当时有各种别的任务特别忙,楞就拖到了半年之后才玩的。

开机还是挺兴奋的,上来选了Hardcore,自此,被血虐的旅程就开始了。

玩了一周(是一周不是一周目),跌跌撞撞跑到1/3,总体来说还算是可以活,可被暴君追着满处跑这件事儿,成了最后一根稻草,算是彻底被长久以来的恐怖气氛和缺医少药的绝望给压垮了。心下觉得,这个游戏HardCore模式根本就没法玩儿,普通模式又不甘心,于是,就再没碰过。

白瞎了过程中被氪金买的两把啥用没有的小手枪。

倒是很便宜,但真心啥用没有。

再往后,连《生化危机3》的重制版都出来了,我琢磨着曾经里表路线背得贼熟的《生化危机2》一直都打不下去,这也太丢人了。

正好换了机器,把《生化危机2》就又拿出来玩一下。

(其实没想真玩,但换上了这个98的衣服之后,和Claire同屏效果实在是太逗了)


没想到一玩就是3小时。

这次,超级顺利。

才发现,这货,其实是个策略游戏。

也发现,它其实,一直,就是个策略游戏。

《生化危机2》是一道程序员面试必考题

(只考虑解决局部战斗,一定以最优秀战绩进入下一关,不用通关简单和普通模式也可以打HardCore)


来看看动作游戏的代表《战神》的特征:从头砍到尾;打BOSS走位一定要准,能用翻滚躲闪的,就一定不要慢悠悠走着;不同的武器有不同的攻击动画、范围和强度,有资源对武器的影响但是非常少;物品栏基本不存在除了魔法槽;游戏里一定会考跳和翻滚的技巧。

《生化危机2》是一道程序员面试必考题

(战神1,PS2)


再看看《生化危机2》,其实不管是1还是2,都是一样的:原地战斗效率最高,只要移动+攻击,就会被惩罚;攻击有频率和节奏限制;攻击时候的瞄准,是除了停顿+转圈+躲僵尸的第二套军体拳之外最大的动作考验;武器有升级;游戏流程会严重依赖玩家对物品槽的安排;别说要考跳跃了,根本就都没有跳更不要说翻滚。

《生化危机2》是一道程序员面试必考题

(生化危机2,PS1)


所以这是个动作游戏么?

根本不是啊!

从这个角度上来说,《鬼武者》才是标准的动作游戏,尤其是还有个弹反,比战神还硬。

《生化危机2》迷惑人的,就是有这么一层动作游戏的外衣,让你觉得,能跑,能开枪,能躲,其实,好像,貌似,是能够通过动作本身来通关的。

你错了。

游戏第一个敌人,就完美教学了这件事:狭窄的空间中,你根本就打不过对方。

当然你如果要是选择“简单”,那就当我没说。

末日或者僵尸游戏中敌人的压迫感,《生化危机2》做得算是最好的。

因为狭窄空间群殴基本干不过,只能跑。

也许是被各路突突突的游戏给惯坏了,当看到路上有打不死的僵尸的时候,就特别难受。

从游戏设计的角度也能看出来,游戏里面的敌人,是和场景配套的,哪怕是选择攻击画面穿帮出这个场景,他也都不跑出来。

《生化危机2》是一道程序员面试必考题

(穿帮僵尸堪比门上雕刻)


可是静下来好好想想,20年前玩元祖《生化危机2》的时候,好像也没有当成动作游戏玩,在一开始警局前燃烧的街道上,也是一枪都不开,直接左闪右躲跑过去的。

《生化危机》的123,从来都是精打细算,能躲就一定不扛的游戏方式,那现在怎么就抱怨了呢?

还是这些年的美式突突突,把大家给惯坏了。

小时候就是凭着感觉瞎玩儿,靠记忆力背下来整个游戏流程中所有的获取物品节点,至于里面的真正解法思路,其实不太在意。就好像玩RPG走迷宫,天生就能走出来的人,一般都是直觉上用DFS(深度优先搜索)遍历的:碰到分支路线就左转,触底回退,到最后,一定能找到路。

(仙剑奇侠传,试炼窟,DOS)


《生化危机》稍微难一点,基本没DFS什么事儿。

信息奥赛中,有一种题,叫做动态规划。概念上,就是一个复杂问题,不好解决,想要解决就需要拆分成简单的子问题;这些子问题,我们只算一遍;并且这些子问题的运算的结果数据,一定要成为最终问题的带入值,最后来求出结果。其中,有一种经典的入门级动态规划题,叫做0/1背包:我的背包就这么大,负重有限;眼前有好多物品,每样物品的价值和重量都不一样,如果想要求出装什么物品价值最高,要怎么做?

一般这种题都描述的是《生活大爆炸》里面嘲讽物理学家的笑话:真空中的球形鸡的情况,也就是理想情况中的理想情况。

举个例子:一个山洞中,有很多草药,一样草药只有一棵,每棵草药价值不同,重量也不同,采药的人负重有上限,如何获得最大价值?

肯定不能用贪心算法,只是用价值除以重量找性价比最高的装,那一定得不到解决方案。

如果想要解决,就要做一个DP表,二维数组。

第一维,说的是,这些物品,从没有到全部,依次考虑装包的可能性。

举个例子,在这一维中,序号0,是没有物品需要考虑;序号3, 是前三样物品(草药1, 草药2和草药3),都考虑。

具体拿哪一个,还需要另一维,也就是负重。

动态规划,主要是动态两个字看起来很唬人:当你拿了物品1,你的负重就降低了,就会影响到获取其他物品的能力,就产生了很多可能性。

所以要找到状态转移方程。这个东西听起来更唬人,但实际上很简单:我当前想要找到的最佳情况(i个物品,m这么多的负重),一定取决于我没拿这第i个物品的状态(而,i-1则是取决于i-2,以此类推)。所以,我只要比较不拿(已经做好了),和要拿(这个要算拿了之后,回报是多少),这两个哪一个的DP值比较大。

这就是状态转移方程:DP[i][m] = maxi {DP[i-1][m], DP[i-1][m-Weight[i]] + Value[i]}

DP[i][m],这是要拿i,和m这么多负重。

DP[i-1][m],这是不拿i,所以还是m这多负重。这个应该已经在DP表中算好了。

DP[i-1][m-Weight[i]],这是不拿i,同时负重减少,Value[i],这是i的价值,俩加一起,就是拿了i,回报是多少。

有人可能会说,那我拿了一定比不拿回报要多啊。

又错了。

如果拿了,那就要把负重减掉,所以审视的,可不是刚刚没拿的状态了,而是再往前的某个DP值,所以不一定是一样的。

听起来挺抽象的,那不如看看生化危机的例子:我手头的箱子里有很多道具,看起来比较有用的,有以下几种:喷雾剂两个(大回复剂),绿色药草一个(小回复剂),手枪M(普通型,单位时间攻击力,差不多是10),手枪SC(氪金型,单位时间攻击力,13),15发子弹,存盘用的打印机色带,一把耗材性质的战斗刀

一共8个格子,似乎都能放进去?

(道具列表)


首先肯定不能都放进去,因为,生化危机中,不是要看8个格子中能拿的武器弹药回复剂在当前的最大价值,而是要看放入的道具,如何能帮助玩家生存并且进行到下一步的存盘点的这个过程中的价值。

所以,在生化危机的世界中,还多了一维,时间。

那就来看看这些道具:

1- 道具中的小红书,关键道具,而且马上要用到,所以有必要放在道具栏中。因为这是游戏进行的关键道具,而且马上就能消耗掉,性价比非常高。

2- 大回复剂,两个都不需要,原因很简单,只有空血状态才需要回复剂,那么现在是满血,从时间这一维来考虑,大回复剂,在玩家满血的时候,其在时间上的价值,就非常低了。

这也符合law of diminishing marginal utility,也就是边际效应递减法则。

通俗一点解释,就是当你夜晚步行10公里回家又累又饿时,看到一家路边7/11亮起的灯,它在你眼中都能冒圣光,可平时7/11你看都不看。

因为你现在饿。

3- 小回复剂,恢复1/3的血量,虽然满血,但你还是会想带着,因为身经百战的你,知道轻伤可以吃了,不吃的话后面搞不好什么地方会有棵红色药草(组合之后,占一个位置,满血药),价值高。

4- M或者SC手枪,一定要带,而且只带一把。在知道单位时间攻击力之后,就好选择,如果不知道,就不好选,本着氪金就是优秀的原则(其实并不太对),随便选一下就好了,左右都是要有把手枪。毕竟手枪是帮助玩家生存的初级助力工具,如果没有其他的武器,手枪这个道具作为武器在时间轴上的比重,是无限大的。

5- 15发手枪子弹,一定会带,因为对地图了解与否,都能知道后面一定能够找到类似的物资,都是要占一个格子,不如现在就准备。

6- 色带,正常情况,一定不带。因为这东西是用来存盘的,也只有存盘的时候能用到。但实际操作上,这种色带有时候需要带一个。原因是,色带本身有使用次数,用不完不消失,就要放在箱子里;开箱子有可能降低通关评价;色带一般有两个,放进箱子就会合并,合并之后就又增加了开箱数量。所以不如放一个在身上,以备存盘之需。

7- 耗材刀,危急时刻使用的副武器,在不清楚前方地图的时候,需要,如果前方会有新的副武器,一定不带。

于是我们简单有了这些道具在时间上的价值。

至于怎么决策,其实简单。游戏开发者都已经帮助玩家断了舍离了:一共只有8个格子,还有预留出最少3到4个格子为了后面关卡做道具拾取准备,就剩下4个格子,于是这道动规题就变得很简单了,肉眼都能看出来结果。

唯一的问题就是,你需要通过后面的战斗来了解你做得选择是不是最佳。

而且,就算是你的选择是正确的,后面也有可能因为误操作,而把一手好牌打坏。

但有一点能够确定,那就是,如果这一步你打得不好,浪费了子弹,浪费了药,还存了盘,那么,这一步一定不是最优的。

要么就是你的技术有问题,要么就是你的策略有问题。

一旦存盘覆盖掉以前的,那就不可逆,在后面,就会举步维艰。

积累几次之后,别说最后通关是不是最优了,连最后能不能通关都是个问题。

所以,再仔细想想,从《生化危机1》开始到3,这个系列就是一道奥赛题......

正经八百的DP。