在1982至1983年间,少年程序员格雷格·库珀伯格(Greg Kuperberg)为IBM-PC平台开发了三款技术上极为出色的街机风格游戏,展现了他在汇编语言编程方面的非凡天赋。尽管这些游戏多为经典作品的改编,但其流畅度和技术实现在当时被认为几乎是不可能的。然而,库珀伯格并未继续游戏开发的道路,而是进入哈佛大学深造,最终成为一名杰出的数学教授。他认为自己对数学的热爱远超游戏,并反思了如何在当今时代为年轻人点燃那份对技术与科学的“兴趣火花”。
一次意外的发现:PC-Man
在1980年代初,为昂贵的 IBM-PC 寻找一款优秀的快节奏街机游戏几乎是一项不可能完成的任务。多数游戏图形简陋、体验不佳,凸显了该平台在游戏方面的局限性。然而,1982年由 Orion Software 发行的 PC-Man 是一个例外。
与同期粗糙的仿制品不同,PC-Man 提供了令人惊讶的高品质体验和流畅玩法。它给人的感觉不像是一个业余作品,而是一款真正理解街机游戏精髓的专业游戏。
- 技术卓越:游戏使用汇编语言编写,运行极为流畅,远超当时普遍使用 BASIC 语言开发的游戏。
- 视觉巧思:尽管受限于CGA四色模式,但游戏通过一种称为“有序子像素抖动”的技术,巧妙地模拟出更多色彩,视觉效果出色。
- 独特设计:为了适应 PC 屏幕的宽高比,库珀伯格创造性地将迷宫旋转了90度。
对于那些花费数千美元购买“严肃”电脑的用户来说,能在 VisiCalc 或 dBase 的工作间隙玩上一局 PC-Man,无疑是一种“不正当”的快乐。
神童程序员的三部曲
PC-Man 的成功并非偶然。库珀伯格在短短一年半的时间里,为 Orion Software 开发了三款广受好评的游戏,当时他年仅14至15岁。
- Paratrooper (1982):一款类似《导弹指挥官》(Missile Command)的射击游戏,灵感来自 Apple II 上的《Sabotage》。作为库珀伯格的首款作品,它已经展现出成熟的打磨和流畅的操控感。
- PC-Man (1982):一款《吃豆人》(Pac-Man)的克隆游戏,因其技术水准和流畅度而脱颖而出。
- J-Bird (1983):一款《Q*bert》的克隆游戏,被认为是当时 PC 平台上对原作最精确的再现之一,同样令人印象深刻。
这三款游戏的接连问世,让许多人认为一位游戏设计领域的“作者”(auteur)正在冉冉升起。
技术揭秘:流畅体验背后的魔法
库珀伯格的游戏之所以如此流畅,源于他对底层硬件的深刻理解和对编程效率的极致追求。他几乎完全绕过了 IBM-PC 缓慢的系统图形功能。
“在 Paratrooper 中,我发现仅用于绘制枪管子弹的那个系统图形调用,几乎和游戏中其余所有屏幕动画一样慢。从那以后,我完全避免了使用系统图形功能。”
他的成功秘诀可以归结为几个核心原则:
- 直接写入内存:他的程序直接将图像数据写入与屏幕显示相关的计算机内存区域,从而绕过了低效的系统调用。
- 固定帧率:他将游戏动画以固定的速率(约每秒18.6帧)进行时钟同步,而不是依赖 CPU 性能来控制节奏。他认为“恰当的游戏动画类似于电影胶片”,这是他的游戏流畅的首要原因。
- 遵循物理定律:他关心一致的运动规律。例如,当物体下落时,它们会沿着抛物线运动。
- 精通汇编语言:所有游戏都使用汇编语言编写,并使用最基础的行编辑器(Edlin)完成。
他的代码质量甚至得到了专业工程师的认可。意大利电脑公司 Olivetti 的团队在测试其 IBM 兼容机时,专门使用 J-Bird 作为基准。他们逆向工程了代码后评价道:“代码组织良好,他(库珀伯格)的工作非常出色。”
从游戏开发到数学研究的转向
尽管在游戏开发上取得了惊人的成就,库珀伯格却在16岁进入哈佛大学后选择了另一条道路。他后来获得了博士学位,成为加州大学戴维斯分校的数学教授。
“最终,我清楚地认识到,我真正的热爱是数学研究。对我来说,游戏开发就像是和高中朋友们度过的有趣的夏天,而我作为数学家的研究记录则更像是与我一生的挚爱结婚。”
他坦言,如果当时未能成为一名研究型大学的数学教授,他很有可能会成为一名软件开发者,但不一定是游戏开发。他对计算机图形学同样抱有浓厚兴趣。他承认自己的游戏缺乏原创性,这主要是因为当时他将街机游戏视为“大联盟”,由经验丰富的专业团队打造,而他只是一个试图做出专业级作品的青少年。
寻找当代的“兴趣火花”
库珀伯格的编程之路始于10岁左右,最初在大学计算机中心接触 BASIC 语言。他对编程的喜爱与对数学的喜爱源于相同的逻辑和解决问题的乐趣。他认为,在当今时代,Python 扮演了过去 BASIC 的角色,成为了许多孩子和大学生的入门语言。
然而,他也指出了一个令人担忧的趋势:
“我认为遗憾的是——这个趋势在人工智能革命之前就早已存在——好的 BASIC 或 Python 编程应用变得难以找到,除非你已经知道自己对此感兴趣。曾经在 IBM PC 上人人可得的东西,现在变得晦涩难懂。”
他认为,他之所以能在数学和编程上取得早期成功,很大程度上得益于其数学家父母的积极影响和家庭环境的熏陶,而非强迫。这就像生活在滑雪胜地的孩子更容易学会滑雪一样。对他而言,那份“兴趣的火花”,是他与家人共同分享的。