超级玛丽怎么玩,超级玛丽通关攻略图解

机器之心转载吃蘑菇长大的「超级玛丽」比你想象的更复杂。「超级玛丽」(SuperMarioBros.)应该算是红白机上最著名的游戏了,大部分80后、90后应该都玩过吧。对于这样经典的游戏,「无聊」的游戏

机器之心转载

吃蘑菇长大的「超级玛丽」比你想象的更复杂。

「超级玛丽」(Super Mario Bros.)应该算是红白机上最著名的游戏了,大部分 80 后、 90 后应该都玩过吧。对于这样经典的游戏,「无聊」的游戏计算复杂性研究人员当然不会放过啦。2015 年,Aloupis,Demaine,Guo 和 Viglietta [1] 证明了「超级玛丽」属于 NP-hard。2016 年,Demaine ,Viglietta 和 Williams [2] 证明了「超级玛丽」属于 PSPACE-complete。

今天我们就来详细介绍一下关于这个游戏的计算复杂性的研究。在文中我们将看到如何设置地图使得超级玛丽能够模拟一些计算困难的问题,从而说明该游戏在计算理论的角度下是难解的。

超级玛丽通关攻略图解,本篇的第 1 节介绍一个 NP-hard 框架;第 2 节介绍应用框架证明「超级玛丽」属于 NP-hard;第 3 节介绍一个 PSPACE-hard 框架;第 4 节介绍「超级玛丽」属于 PSPACE-hard 的归约;第 5 节说明如何使归约更完善;第 6 节进行总结。

1. NP-hard 框架

我们先来介绍一个用于证明一类 2D 游戏困难性的框架,这个框架来自文献 [1] 。我们假设在这类 2D 游戏中,玩家操控一个角色在地图上移动,玩家的目的是使该角色到达地图上的某个位置。比如 SMB 的目标就是让玛丽从出生点到达旗杆,再比如之前介绍过的华容道玩具的目标就是让特定的滑块移动到出口,再再比如 STG 游戏就是操纵可以发射子弹的角色避开敌方弹幕和地形到达关底。

框架使用的归约问题是经典的 3-SAT 问题(3-conjunctive normal form satisfiability,3 - 合取范式可满足问题)。该问题指的是给定一个由若干子句的合取构成的公式,其中每个子句包含 3 个项,判断是否存在对变量的赋值使得该公式可满足。我们希望通过使用 2D 游戏模拟 3-SAT 问题,从而将 3-SAT 归约到 2D 游戏。

下载NES格式的超级玛丽游戏,放到FC模拟器的ROM文件夹里面,命名最好用英文。然后就可以玩超级玛丽了。PSP是PlayStationPortable(プレイステーションポータブル)的简称,是日本SONY公司开发的多功能掌机系列,具有游戏、音乐。

我们用一个例子来说明如何进行这样的模拟。对于公式

我们可以构造如下图的 2D 游戏框架

玩家操控角色从 start 部件出发,然后进入一个对应变量 x 的 variable 部件,玩家需要在两个出口之间选择一个,这模拟了对变量 x 的取值。假设选择对 x 赋值为 T,那么玩家操控的角色就从 variable 部件的左侧出口离开,接下来角色可以到达两个 clause 部件并打开这两个部件,这模拟了

这两个子句中的 x 为 T 后整个子句就为 T。接下来无论选择的是从 variable 部件的左侧出口还是右侧出口离开,角色都将进入到第二个 variable 部件,继续对变量 y 的赋值进行模拟。当所有变量的赋值都确定后,角色进入到验证过程(check in 路径),角色需要从右侧依次通过所有的 clause 部件才能最终达到最左侧的 finish 部件。而每个 clause 部件只有当之前角色从上方进入并打开至少一次后,才允许角色从右侧进入并通过。

不过,有时候在游戏中直接构造 variable 和 clause 部件可能会比较复杂,所以我们可以对这个框架进行一些修改,使得部件更加原子化一点。修改之后的框架含有 start、finish、turn、switch、merge、one-way、crossover、door 这些部件。start 和 finish 部件的含义与修改之前是一样的;turn 部件用于路径的转向;switch 和 merge 部件其实是同样的,通常是一个三叉路口;one-way 部件保证游戏角色只能向一个方向移动,功能类似单行道;door 部件包含两条互不连通的路径,当一条路径被角色通过后(开门),角色才能通过另一条路径。

超级玛丽详细关卡攻略 1-1.这关主要是入门,开始后第三个管道能进,但不要急着进,往后走,上面第二层砖的右边有个隐藏的加命蘑菇,然后再进管道,吃过金币后上面的管道也可以进,里面有很多隐藏的金币,然后出来就。

对于公式

对应的修改后的框架如下。

游戏角色还是从 start 部件出发,接着进入 switch 部件选择变量的赋值,赋值后可以打开对应的 door 部件,然后回到 merge 部件,接着选择下一个变量的赋值。直到所有变量的赋值被确定进入子句验证过程,角色进入右下方的 switch 部件,然后它需要在三个出口中选择一个已经被打开的 door 部件通过。当所有子句都验证完成后,角色最终进入 finish 部件。

2. 超级玛丽属于 NP-hard

我们使用上一节的框架来说明「超级玛丽」属于 NP-hard,为此我们需要在游戏中实现 start、finish、variable、crossover、clause 这些部件,我们逐一进行说明。

start 部件:玛丽的出生点有一个蘑菇,吃了之后可以变成大玛丽。

finish 部件:需要以大玛丽的状态从左下方进入部件,撞掉一个砖块后才能到达旗杆;如果以小玛丽的状态进入则不能通关。

variable 部件:玛丽从上方进入部件后,可以在左下和右下两个出口中选择,一旦决定后就不能再返回了。

clause 部件:该部件中玛丽需要从最左侧到达最右侧才算是验证成功,但是注意到右侧有足够多的火墙,这使得玛丽即使以最快的速度移动也无法避开。因而我们需要使用游戏中另的一个元素——无敌星星,部件中的三个问号方块都有无敌星星,如果玛丽吃到星星就可以穿过火墙。因此,只有当这三个问号方块中至少有一个方块被撞开过,玛丽才能在验证时中通过 clause 部件。

超级玛丽怎么玩

现在所有的部件都实现了,而且归约显然可以在多项式时间内完成,所以我们就有以下定理

定理 1:「超级玛丽」属于 NP-hard。

超级玛丽怎么玩

3. PSPACE-hard 框架

接着,我们介绍一个用于证明 2D 游戏属于 PSPACE-hard 的框架,这个框架来自文献 [1] 和 [3]。它使用的归约问题是 TQBF 问题(True Quantifified Boolean Formula),指的是问某个含有 「存在」 和「任意」符号的逻辑公式是否可满足,比如问公式

的真值是否是 T。

上图是一个 open-close door 部件,它包含三条平行的、不连通的路径,从上到下依次为 open 路径、traverse 路径和 close 路径。traverse 路径上有一扇门,只有当门在打开的状态下,角色才能穿过 traverse 路径;当角色通过 open 路径时,它可以打开这扇门;而当角色通过 close 路径时,它必须关上这扇门。

这个 open-close door 相当于是一个状态存储器,门的开闭相当于 0 和 1,每一个 open-close door 部件保存了 1bit 的信息。这也是为什么加上这个部件后,框架的复杂性可以到达 PSPACE-hard。

接着我们介绍 alternation 部件,它其实是一个辅助部件,用于简化框架的描述。我们可以用其他部件的组合来实现 alternation 部件,不必真的在 2D 游戏中实现它。

上图是 alternation 部件的结构。该部件中包含两个 open-close door 部件,其中一个 door 处于打开状态,另一个处于关闭状态。不妨假设现在上方的 door 是打开的,下方的 door 是关闭的。角色从左上进入 switch 部件,它只能通过上方的 open-close door 的 traverse 路径,然后再通过 close 路径,这样上方的 door 就被关闭,接着角色通过下方 open-close door 的 open 路径,这样下方的 door 就被打开。可以看到,每次角色通过 alternation 部件后,两个 open-close door 部件的状态就会翻转,这样一来,角色就会从两个出口交替离开。也就是说,当角色第一次进入 alternation 部件时,它会从下方的出口离开,当角色第二次进入时,它会从上方出口离开,以此类推。

现在我们就可以用例子来说明如何构造 PSPACE-hard 框架,对于公式

2D 游戏的框架如下图

角色从 start 部件出发,进入对应变量 x1 的部件,由于限制 x1 的量词是 「任意」 所以这里是 alternation 部件,因为是第一次进入,角色只能选择从对应 x1 的出口离开,接着角色打开所有对应于 x1 的 open-close door,并关闭所有对应于 非 x1 的 open-close door。完成这些后角色来到 merge 部件,之后进入对应变量 x2 的部件,由于限制 x2 的量词是 「存在」 所以这里是 switch 部件。就这样,角色完成所有变量的一次赋值后进入验证过程,这个验证过程与修改后的 NP-hard 框架是类似的。完成一次验证后,角色进入中间上方的 alternation 部件,注意这时角色是第一次进入该 alternation,所以角色只能从左侧出口离开,接下来角色将再次进入对应于 x3 的 alternation 部件,这时角色只能选择对应于 非 x3 的出口,在操作完对应的 open-close door 后又一次进入验证过程,这其实就模拟了 「...... 对任意 x3 的赋值公式的值为 T」。所以,当公式中有 n 个「任意」 量词时,框架中的验证过程可能会被通过 2^n 次,只有当角色完成了所有的验证过程后,才能最终到达 finish 部件。

容易验证,这个框架模拟了 TQBF 问题。因此,如果 2D 游戏中能实现 start、finish、turn、switch、merge、one-way、crossover、open-close door 这些部件,那么这个 2D 游戏就属于 PSPACE-hard。

另外有一点需要提一下,NP-hard 框架中的部件的每条路径只会被角色通过一次,而 PSPACE-hard 框架中的路径就可能会被通过很多次了,这在构造部件时是需要注意的。

4. 超级玛丽属于 PSPACE-complete

为了证明「超级玛丽」属于 PSPACE-hard,我们需要在游戏中实现 start、finish、turn、switch、merge、one-way、crossover、open-close door 部件,其中很多部件是非常简单的,就不提了,这里就介绍一下 crossover 和 open-close door。

注意,这里与 NP-hard 证明中不同的是,玛丽总是处于小玛丽状态的。

上图就是 crossover 部件,玛丽需要以最快的速度移动才能从左上到达右下(或从右上到达左下)。容易发现,这两条路径不会互相干扰,而且玛丽可以无限次地通过这个部件。

现在,我们已经基本证明了超级玛丽属于 PSPACE-hard。而又因为「超级玛丽」游戏的所有状态都能够存储在多项式空间内,所以「超级玛丽」属于 NPSPACE。再根据 Savitch's Theorem,NPSPACE=PSPACE,「超级玛丽」就属于 PSPACE-complete 了。

5. 完善归约

在给出最后的定理前,归约中的两个小 bug 可能需要再讨论一下。

一个 bug 是 open-close door 部件中央的火球。在「超级玛丽」原始游戏中,似乎没有像这样将火墙(球)放置在空格中的例子。不过这个问题比较好解决,只要把中央的火球替换成下面这样的一大排火墙就行了。这样一来,刺猬的移动不受影响,但是玛丽无法通过这些火墙。

另一个 bug 是关于刺猬怪物的生成。在归约中我们需要将刺猬放置在指定的位置,但在「超级玛丽」原始游戏中,一个在天空中移动的怪物会有规律地抛出怪物蛋,当蛋落地后才形成刺猬。当然,这个问题的解决方法也已经在论文中给出了。我们可以将所有 open-close door 放到整个地图的上部排成一行,当游戏开始时玛丽在这些 door 的上方移动,空中的怪物有规律地抛出刺猬,这些刺猬将通过一些漏斗进入各个 door 部件。我们可以设置合适的距离,使得即使玛丽以最快的速度移动,每个 door 都会有一个刺猬进入。完成这些之后,玛丽可以踩死空中的怪物,然后就进入上面框架中提到的 start 部件。

处理掉这两个小 bug 后,我们终于能放心地得到下面的定理了

定理 2:「超级玛丽」属于 PSPACE-complete。

6. 总结

我们介绍了两个用于证明 2D 游戏计算复杂性的框架,并详细解释了如何用这两个框架讨论「超级玛丽」的计算复杂性。「超级玛丽」最终被证明是属于 PSPACE-complete。事实上,文献 [2] 还讨论了一些含有其他元素(比如使用管道移动、获得金币奖励生命)的「超级玛丽」游戏的复杂性。

不管我是不是玩过这款游戏,提起“超级玛丽”,我的脑海里,都会想起这个穿着蓝色背带裤,戴着红色帽子,大鼻子下面还留着两撇小胡子管道工。虽然现在人都少玩这种单机游戏,而且最经典的《超级玛丽》应当是街机游戏,而非。

如果要评选最有趣的关于电子游戏计算复杂性的论文,我相信「超级玛丽」这个肯定能上榜。最后附一下论文的截图

[1] Greg Aloupis,Erik D Demaine,Alan Guo,and Giovanni Viglietta. Classic Nintendo games are (computationally) hard. Theoretical Computer Science,586:135–160,2015. arXiv 链接

[2] Erik D. Demaine ,Giovanni Viglietta,and Aaron Williams. Super Mario Bros. Is Harder/Easier than We Thought. 8th International Conference on Fun with Algorithms (FUN 2016).

[3] Giovanni Viglietta. Gaming is a hard job,but someone has to do it! Theory of Computing Systems,54(4):595–621,2014.

综述电脑上的超级玛丽用键盘控制玩,上下左右键和空格键。超级玛丽,全名"超级马里奥兄弟",是任天堂公司出品的著名横版游戏。最早在红白机上推出,有多款后续作品,迄今多个版本合共销量已突破4000万套。其中的主角马里奥、路易。

上一篇 2023年03月29 11:27
下一篇 2023年02月09 11:44

相关推荐

  • 为什么叫小楼电竞名媛,lol四大解说男人装

    电竞经过一代又一代人的努力,终于从不务正业走向了体育比赛必备项目,lol四大解说男人装,而如今的中国电竞也让世人看到了,原来中国电竞,真的很强大!在2018年的亚运会《英雄联盟》项目的比赛以中国队的夺

    2023年04月17 277
  • 月下美人怎么合成,真三月下美人适合什么英雄出

    月下美人这个名字真的好听,另一个方面,玩过真三国无双的人都应该知道有这样一把隐藏装备,名字很好听,也叫月下美人,怎么合成?看月下美人=黄忠弓+铁枪+铸造锤。小科普一下,今天说的不是和这武器,同名的一件

    2023年02月07 214
  • qq怎么设置自动回复,温柔到爆的神仙自动回复

    以前手机QQ是不支持设置在线状态及自动回复的,需要电脑端才能调整在线状态及自动回复。但是QQ更新8.0.6(2019年6月1号左右)版本时候,升级了此项功能,温柔到爆的神仙自动回复,所以现在手机版QQ

    2023年01月09 245
  • ps怎么去除马赛克,ps怎么去除两层马赛克图片

    我们已经见识过很多种AI的神奇应用方式:下围棋、聊天、融合两张图片的风格、创作小说……按理说,已经没什么可以让人感到惊喜了。但,如果连万恶的马赛克都能消除呢?一般的水印或者马赛克,用Photoshop

    2023年01月29 285
  • 百里玄策为什么没人玩,司马懿那么强为什么没人玩

    可能大家玩过王者荣耀的玩家一定都知道,打野位置一直都是比较受大家欢迎的玩家。男玩家们都想成为一个野王,司马懿那么强为什么没人玩,然后上分摘星撩妹。而女玩家也想找到一个野王,带他们轻松上分以及CPDD。

    2023年04月21 277
  • 光明大陆首饰盒哪里弄,光明大陆神器怎么弄

    千年银杏旁的杏缘书吧里,光明大陆神器怎么弄,收藏着几十年前的老式收音机、首饰盒和煤油灯;木头和红砖搭起来的古朴小屋中,码着整整齐齐的柴火;溪水穿村而过,由村民们亲手搭建的沿岸长廊已基本完工……第一次来

    2023年02月17 247
  • 为什么我没有荣耀称号,以前的荣耀称号没有了

    以前的荣耀称号没有了,王者荣耀新赛季到来,玩家们在排位时往往会有发自己战绩的习惯,能显示出特定英雄的荣耀称号标签自然是非常硬气了。荣耀称号怎么弄、如何在发战绩时显示出来?荣耀王者后缀专属称号要如何获得

    2023年04月16 239
  • 枪神纪女狙击多少钱,枪神纪母猴觉醒花费图

    现在一提到FPS游戏,大多数人想到的就是《绝地求生》和《守望先锋》,枪神纪母猴觉醒花费图,《绝地求生》姑且不谈,这《守望先锋》刚推出来的时候可以说是红极一时,虽然现在有些没落,但在FPS里仍然算比较火

    2023年03月27 296
  • 狂铁怎么玩,狂铁的连招顺序口诀

    狂铁是一个非常典型的战士,铭文推荐百穿狩猎。出装也是非常标准的战士出装。当然满cd的狂铁在人群里打滚也是一种愉快的体验大家都在说狂铁没能量时没输出没控制。有能量时用脸都能玩。1、一技能使狂铁向前挥舞两

    2023年01月16 267
  • 路亚怎么绑线,路亚怎么绑线轮子

    路亚钓法中的线结绑法,路亚怎么绑线轮子,包含主线和线轮绑法、主线和前导线结绑法、子线绑法(前导线绑法)、前导线和别针连接环绑法、前导线和路亚连结绑法等。这里用图片的方式向大家介绍最常用也最简单的快速线

    2023年05月20 276
  • 枪界怎么注册,枪界为什么登不进去

    纯真与可爱,也许离已历世事纷乱的我们太远,但只要心有本真,就能在二次元世界找回那分萌动。就算复杂的社会上已难寻可爱,但在《枪界》的世界中,我们仍能追寻最单纯的喜爱。这就是二次元游戏的力量,不光有萌娘相

    2023年02月03 269
  • 我的世界打火石怎么做,我的世界电脑版打火石怎么做

    燧石(Flint),繁体中文称砾石,是主要用来制作箭和打火石的原材料。它是通过挖掘沙砾得到。沙砾拥有10%的机率掉落燧石而不是沙砾本身。在放置了一堆的沙砾向下挖来刷燧石是可以做到的。同时,此程序不可逆

    2023年01月23 293
  • dnf镶嵌栏怎么开启,dnf光环镶嵌栏怎么开启

    在拥有一套百级史诗装备后,回归小伙伴虽然和大佬们穿戴同一套装备,但伤害总是差了大佬一点点。实际上,回归小伙伴和大佬们差了非常多的细节,完善这些细节,追平大佬伤害可谓轻轻松松。1、buff换装现在所需的

    2023年02月02 236
关注微信