1981 年,微软联合创始人 Bill Gates 和一个叫 Neil Konzen 的开发者,为 IBM PC 写了一个游戏,名称叫 DONKEY.BAS。玩家唯一要做的就是切换车道——别撞上那头驴。撞上了就是 BOOM。
45 年后,有人把这个游戏移植到了浏览器里。不是因为它好玩——说实话它不太好玩——而是因为它是一段历史的活化石。

131 行代码
DONKEY.BAS 跟 IBM PC DOS 一起出货,目的是演示 BASICA(高级 BASIC)的彩色图形和声音能力。整份源码只有 131 行。
它用了 CGA 图形(SCREEN 1,320x200 分辨率),PLAY命令发声,DRAW命令渲染精灵。最硬核的部分是用DEF SEG、POKE、PEEK实现了低级内存访问——检查内存地址&H410来判断是否有彩色图形适配器。
碰撞检测靠坐标比较。爆炸动画用GET/PUT加缩放。分数记两样:你撞了多少次(SD),以及驴有没有错过你(SM)。
今天的 web 端口(donkeybas.com)用 JavaScript 还原了原始的 CGA 体验,加了声音开关、CRT 滤镜、作弊模式和全屏功能。源码在 GitHub 上以教育/保护项目发布。
「45 岁了」
这篇在 HN 上引发的不只是怀旧,还有对软件开发变迁的反思。
在 1981 年,BASIC 是 PC 的入门语言。买一台 IBM PC,开机进入 BASIC,输入RUN,你就能跑一个带图形和声音的游戏。没有包管理器,没有构建工具,没有 CI/CD。131 行代码,一页纸就能打印完。
HN 用户们纷纷回忆自己第一次在 PC 上跑 BASIC 程序的经历。留言中提到的关键词包括:GW-BASIC、QBASIC、GORILLA.BAS(另一只投香蕉的大猩猩游戏)、NIBBLES.BAS(贪吃蛇)、以及那张经典的 5.25 英寸软盘。
有人翻出了 DONKEY.BAS 的完整源码逐行分析,感叹 80 年代的程序员在 320x200 像素和 4 种颜色的限制下能做些什么。讨论中提到了DRAW命令用字符串描述矢量图形的方式——「BM-10,+25;R+1」这样的代码在今天看来像一种失传的手艺。
还有人在争论:DONKEY.BAS 到底是不是微软历史上第一个视频游戏?比它早的还有没有?结论不太统一,但大多同意它是微软第一批公开分发、有商业目的的游戏之一。
一个时代的「编程入门」
DONKEY.BAS 的意义不在于游戏性。它代表了一个时代:计算机厂商附带软件,是为了展示「这台机器能做什么」——不是为了卖软件。
IBM PC 的价格在 1981 年大约是 1565 美元起步(相当于今天的 5000 美元以上)。你花这笔钱买一台机器,里面塞了一个 BASIC 解释器和 131 行游戏代码,然后你可以修改它,重新运行,学习编程。
这和今天的软件生态形成了某种对照:一个 131 行的游戏需要打包成几百 MB 的 Electron 应用,或者依赖数百个 npm 包。
DONKEY.BAS 已经 45 岁了。在今天看来,它像素粗糙、玩法单调、最多能让你分心 30 秒。但它不需要登录、不需要联网、不需要更新。它就在那里,像钉子一样简单。
参考来源: