
有人说,如果让一百万只猴子在一百万台打字机上打字,它们最终会写出莎士比亚的作品。虽然这和[bbenchoff]不太一样(为什么听起来这么耳熟?),但花费了一些计算周期来生成随机数据,并通过启发式方法在数据中找到有效的雅达利 2600“游戏” 。
正如你所料,这些游戏不会是你想玩一整天的东西。事实上,它们更像是演示版。不过,考虑到它们是随机生成的,其中还是有一些有趣的程序。
这种方法之所以有效,部分原因在于雅达利的CPU基于6502,相当简单,因此代码运行起来非常直接,而且一个完整的游戏只需要4K内存。不过,根据[Brian]的说法,这意味着可能有10^10 ^159个ROM。相比于可见宇宙中大约10 ^80个质子的数量,你就能看出问题的规模了。
为了解决这个问题,你需要一些可以从实际游戏中推断出来的启发式方法。首先,ROM 的前 1K 至少 75% 应该是有效的操作码。此外,写入电视和其他 I/O 设备的代码也很容易识别。显然,一个没有 I/O 的程序不会很有趣。
一些启发式方法旨在减少搜索空间。例如,有效的 ROM 在最后两个字节中会有一个重置向量,因此可以生成随机数据,然后应用少量合法的重置向量。
为什么?真的需要理由吗?如果你手边没有 2600,那就像 [Brian] 那样用模拟器吧。我们想知道这套系统会不会重现 《泰山》的剧情?
原文: https://hackaday.com/2025/06/11/randomly-generating-atari-games/