超玛一代吧 关注:2,976贴子:47,906
  • 11回复贴,共1

【溢出关卡】65536关卡解密:其实SMB1只有256个关卡

只看楼主收藏回复

相信各位看了@风华正茂999999 的“【溢出关卡】Super Mario Bros.1 全部65536关卡下载!”(http://tieba.baidu.com/p/1768961721 )这个帖子之后,可能会有这样的疑问:65536关卡列表是如何用一个程序生成的?程序所用的“y值列表”是什么意思?等等。
接下来,这个帖子将对这些疑问做出解答。


IP属地:上海1楼2012-08-04 11:07回复
    首先,我们已经知道,SMB1的各个世界的关卡之间是存在一定的重复的,但是重复率究竟有多高呢?
    经过前一段时间的研究,我认为,答案是:100%!
    也就是说,SMB1的每个世界都拥有同样的256个关卡,而且顺序是一样的,只是起始点(每个世界的第1关)不同!
    根据这个结论,只要把SMB1的第1世界的256个关卡全部列出,然后再确定每个世界的第1关在第1世界中的位置,就可以列出SMB1的全部65536个关卡!
    顺便说一句,该结论对SMB1 Hack(至少是常规Hack)也适用。


    IP属地:上海2楼2012-08-04 11:08
    回复
      那么,如何确定每个世界的起始点关卡呢?
      根据楼上的结论,我们可以得出一个推论:每个世界与第1世界的各个关卡之间都存在一个确定的对应关系,即:第z世界的第x关就是第1世界的第(x+y)关,写成公式为:z-x=1-(x+y)
      这样,根据公式可得,z-1就是1-(y+1)。
      每个世界都有一个对应的y值,把256个世界的y值列出来,就是程序所用的“y值列表”。
      那么,又如何确定每个世界的y值呢?
      显然,我们可以直接查找第z世界的z-1在第1世界对应的1-(y+1),但是遇到重复关卡时,这一关就不能唯一确定了。
      这时,我们可以用反推法,在第z世界查找1-1对应的z-(1-y)。在原版SMB1中,这个z-(1-y)是能够唯一确定的,因为在256关中,正常关序列只出现了一次,只要找到一个1-1过了之后是进入1-2的,就可以确定是这一关了。
      注:以上计算中如果出现结果不在1~256范围之内的,可以通过加或减256使结果进入范围


      IP属地:上海3楼2012-08-04 11:08
      回复
        最后,顺便说说我设计的程序“65536关卡列表生成器”
        其实这是个很简单的程序,通过从“底板”和“公式”两个文本文件中读取数据,按照公式指定的顺序排列底板中的关卡,最后生成文本格式的列表文件


        IP属地:上海4楼2012-08-04 11:09
        回复
          嗯,在那个贴吧搜集了不少的情报,基本的大致有了解了。


          IP属地:辽宁5楼2012-08-04 11:12
          回复
            虽不明但我感觉有强烈的杀气=.=b


            来自手机贴吧6楼2012-08-04 11:18
            回复
              这种说法并不严谨,还是65536个关卡,只不过由256个关卡重复256次罢了


              IP属地:山东7楼2012-08-04 11:21
              回复
                我晕死啊,256个关卡重复256次,毕竟也是65536啊,根本不能说是“256个”,怎么就精了呢……


                IP属地:山东8楼2012-08-04 20:47
                收起回复
                  恭喜~研究了这么长时间终于破译了溢出关卡的密秘了!


                  来自手机贴吧9楼2012-08-04 21:16
                  回复
                    虽不懂但觉厉……


                    10楼2012-08-05 09:19
                    回复
                      ...


                      IP属地:湖北来自iPhone客户端12楼2024-02-13 13:14
                      回复