把那行经典的 C64 迷宫代码压到「零行」:8-Bit Guy 还能教我们什么

查看原文 HN 讨论

文章摘要

这篇文章从那行家喻户晓的 Commodore 64 BASIC「单行迷宫」程序讲起:10 PRINT CHR$(205.5+RND(1)); : GOTO 10。它的原理是 RND(1) 产生 0 到 0.999 之间的值,加上 205.5 再截断取整后,得到字符 205 或 206——这两个 PETSCII 字符正是两种方向相反的对角线,各 50% 概率 不断打印、随屏幕滚动,便拼出一座无限延伸的随机迷宫。

文章的核心是 8-Bit Guy 的一个炫技:他把这行代码做成了「零程序行(zero lines)」——直接在 BASIC 提示符下敲入 FOR A=0 TO 1 STEP 0:PRINT CHR$(205.5+RND(1));:NEXT。这利用了两个特性:FOR 循环可以不带行号直接在命令行执行;而 STEP 0 让计数器永不前进,从而构成死循环。

文章进一步剖析了「加速版」里的三个优化:① 硬件随机数——读取 SID 芯片的噪声寄存器 PEEK(54299) 来替代慢吞吞的 RND();② 查表法——预先算好全部 256 个「字节→二进制」映射,省掉运行时计算;③ 数据与逻辑解耦——只换表的内容(换成别的字符)就能改变输出,而无需改动逻辑。最关键的一课是:8-Bit Guy 通过性能剖析发现,真正的瓶颈其实是 硬件屏幕滚动,而非 BASIC 解释器——识别真实约束,远比过早优化更重要。

HN 评论精华