2017年,两位科学家加拿大的John Aycock和英国的Tara Copplestone 发表了对Atari 2600视频游戏机经典游戏Entombed 的分析。这款游戏于1982年发布,其机制极其简单:由玩家控制的考古学家必须从下而上穿过地下墓穴,躲避僵尸。 Atari 2600只有128字节RAM。然而,每次发射时,看似无尽的迷宫都是新的。在内存中生成。程序员如何管理它?这是38年前创建此游戏的程序员Stephen Sidley的评论:
- . , , . , , , , , .
维基百科列出了十二种用于生成迷宫的不同算法。游戏机最受关注的是“ Eller算法 ”,它是由Microsoft 的Martin Eller于1982年在同一年创建的。 Eller的算法允许您不循环地逐行创建连接的迷宫,并生成无限高度的迷宫,仅将最后两行存储在内存中就足够了。看来这正是Entombed所需要的!但是,可惜的是,埃勒(Eller)的算法与垂直滚动器的游戏机制不兼容,因为在产生的迷宫中,您必须定期绕过障碍物。为了说明这一点,我对Eller算法进行了一些修改,以使迷宫在“墙”和“通道”的矩阵中创建,如Entombed中所示:
使用递归等的更复杂的算法将不适合128字节的RAM。因此,Entombed算法的要求是:
- 逐行生成无限高度的迷宫;
- 创建的迷宫应具有尽可能少的断开部分;(玩家“突破墙”的能力有限,因此罕见的不连贯性不成问题)
- 产生的迷宫应主要由分支和连接垂直通道组成-这样迷宫的通道就不需要向上移动;
- 仅应使用生成的最后几行来生成迷宫的新行。(由于Atari 2600没有视频缓冲区,因此屏幕上可见的迷宫的所有行都必须以某种形式存储在128字节的主存储器中)。
谁以及如何创建此算法?
两位自称为“视频游戏考古学家”的科学家决定从Entombed开始研究。Entombed是一款关于迷宫中的考古学家的游戏。在研究过程中,他们追踪了Stephen Sidley并询问他使用什么算法生成迷宫。正如已经提到的,Sidley告诉他们,即使算法的作者也不记得他的算法是什么,而Sidley本人则更是如此。然后研究人员试图找到创建此算法的“垃圾”。故事的下半部分是在2008年发布的一次采访中发现的:
Entombed [Duncan Muirhead] [Paul Allen Newell]. - , , , . , . , VCS [Atari 2600], . , . , , . , Towering Inferno,在那里使用我们算法的一部分,然后退出。我离开后,公司聘请了斯蒂芬·希德利,并将迷宫发生器交给了他。他必须删除我的代码的很大一部分,才能为游戏机制腾出空间。[在雅达利2600,除了对RAM和ROM的数量的严格限制,它也是每行像素的产生恰恰是76个周期的要求作者注 ]。
Sidley提到迷宫生成器代码是用6502汇编语言编写的,没有任何注释。这本身看起来像一项壮举:如前所述 希姆,“这组命令是如此有限且弯曲,以至于在编写程序时出现了主要问题,”我如何在这个奇迹上写下任何东西?尽管如此,研究人员研究了游戏代码,发现迷宫的生成方式如下:对于所生成行的八个单元格,每一个都考虑了五个已经生成的单元格(顶部三个,左侧两个),并根据“魔术表”选择了新单元格的状态(通道,墙或随机选择)。最左边的两个单元始终充满,并且不存储在内存中。迷宫的右半部分只是左半部分的镜像。
未解决算法核心的神秘表
生成的迷宫的属性取决于先前生成的每五个迷宫的新单元集的状态。桌子缝入了Entombed,许多研究人员感到困惑:“即使我们有几种方法以卡诺地图的形式展示它,我们也没有注意到它的任何定律。”盛德以同样的方式说:“对我来说,这仍然是个谜:我无法解开它,而将其用作黑匣子。”但是,表中没有规则性有点夸张:例如,在卡诺图上,您可以看到当c = 1(当前单元格左上角的墙)时,X = 1(当前单元格中的墙)将不会生成。
英国广播公司在其报告中关于“数字考古学”,她采取了更为戏剧化的夸张:“桌子真的很聪明:每次启动游戏时,都会创建一个新的迷宫,您可以从头到尾走过去。如果此表中的值甚至略有不同,那么迷宫很有可能无法通行。莫名其妙。” 在上hackaday.com转贴配制更加理直气壮:“一个神秘的表总是创建差强人意迷宫,但如果你在它改变任何位,谜题将成为不溶性的。”实际上,迷宫游戏并不总是连贯的,就像从游戏视频中可以看到的那样;表格中的细微更改对产生的迷宫效果没有明显影响:我制作了JavaScript版本,您可以自己玩“神秘桌子”-随时随地更改它,并观察迷宫效果如何变化。保罗·纽厄尔在访谈中提到的迷宫连接性保证可能会随着代码的删除部分而丢失。
电子游戏考古
约翰·艾考克(John Aycock)评论了Entombed如何成为他研究的对象:他为学生准备了一项逆向工程任务,并选择了一个相对鲜为人知的游戏,因为对于流行的游戏,学生可以在网上找到已经解析的代码。如果在随机选择的游戏中遇到了如此出色的发现,这是否意味着在当时的几乎所有游戏中都会有出色的编程解决方案,您只需要更深入地研究?斯蒂芬·西德利(Stephen Sidley)将Atari 2600的设计(具有微薄的指令集,128字节的RAM和每行像素的76个时钟)与“在没有氧气罐的情况下攀登珠穆朗玛峰”进行了比较:该平台的局限性迫使程序员发明了精巧的算法。
深入挖掘不仅仅是一个隐喻。记录经典媒体的脆弱性以及将旧游戏视为无趣的垃圾都使经典视频游戏的研究变得复杂。 1983年,雅达利(Atari)在一个垃圾场中倾倒了 47吨雅达利2600弹药筒-不少于12辆满载的卡车!这些弹药筒被沥青压路机碾碎并倒入混凝土,放置了三十年,直到2014年,“数字考古学家”获得了挖掘和回收尚存的弹药筒的许可。挖出的墨盒都无法正常工作,但是至少其中一个通过焊接部件得以恢复。
Atari的行为是将混凝土倒入盒中以保护其免受“小偷”的侵害。这是版权持有者的典型代表。他们更容易将自己的作品委身于永恒的遗忘中,而不是因为知识产权将其免费获取给他人而遭受“损失的利润”。但是也许通过允许免费复制已经失去商业价值的程序来保护20世纪的“虚拟文化层”还为时不晚吗?