用我最喜欢的游戏《波斯王子》分析前沿模型的进展
我第一次在1995年在IBM PC XT上玩《波斯王子》。我时不时会重新玩这款游戏:逐帧动画、王子悬挂在边缘的方式、关门时的叮当声。三十年后,它依然感受独特。2012年,乔丹·梅赫纳出版了原版苹果II的6502汇编源代码,恢复自在箱子里放了超过20年的3.5英寸软盘(恢复过程本身也是个故事):github.com/jmechner/Prince-of-Persia-Apple-II C#是我最喜欢的语言,所以我给自己设置了一个实验。我把那个源代码交给一个AI模型,要求它将游戏移植到C#。我不会阅读或修改代码。我唯一的工作就是玩结果并指出问题。每一个新出的前沿模型都接受了同一个项目,只有提示。源代码在https://github.com/priyanr/PrinceOfPersia_C-Sharp_Port_By_AI 以下是我的实验进展。第一轮——Claude Opus 4.6(2026年2月)我的第一个提示很简单:“这个原始代码里有波斯王子的6502汇编代码,使用保存的关卡文件,尝试在C#控制台中实现。”经过两天,Opus 4.6制作了一个C#控制台游戏,接着是一个关卡编辑器,然后是一个Raylib图形版。它正确解析了原始关卡文件:房间、砖块、门、守卫位置。它甚至渲染出了一些看起来像苹果II游戏的东西。但它不像《波斯王子》那样好玩。那段时间我的提示讲述了故事:“这太糟糕了,不能玩,运行时画面都乱了。” “现在角色出现了,但一切运动都错了...王子不在地板上。” “现在他掉到地板下,箭头键也无法移动。” 核心问题,正如我后来了解到的,是架构。王子一次移动一个砖块,从一个单元跳到另一个单元。真正的游戏播放手绘动画帧,每帧移动很小。第二轮——OpenAI Codex(2026年3月)我也尝试了Codex,虽然我忘记了它是哪个模型。我给它同样的代码库:“这就是波斯王子的原始汇编代码到C#的移植,由Claude完成,但图形不好,可以修复吗。”它做了一些合理的小修复:清晰的像素过滤,使艺术不模糊,透明的精灵背景,可以穿过的打开门,以及不再作为墙壁的柱子顶部。王子仍然出现在错误的位置并且仍然卡住。它抛光了表面,但下面的引擎仍然存在问题。第三轮——Claude Opus 5(2026年9月)这是我稍微改变规则的时候。我编写了两个Claude Code技能:一个控制DOSBox(启动程序、发送按键、截图),一个控制任何Windows程序。然后我将Opus 5指向我原始的《波斯王子》DOS副本,说道:与真实版本进行比较,直到成功或直到早上6点。它工作了一整夜,首先做的就是诊断架构问题。旧引擎是一个砖块网格引擎,而真正的游戏是由帧序列驱动的。因此,它围绕原始的设计重建了引擎。然后它的工作超出了我的预期。它识别了DOS游戏文件的格式,并直接从中读取真实数据:王子的每一帧动画、地下城的艺术作品,以及所有15个关卡。它通过搜索从苹果II源代码中识别的字节模式找到PRINCE.EXE内部的原始动画表,并在信任之前确认每个表格与第二个已知值的匹配。游戏的版权数据没有进入我的库。C#程序实时读取我自己的DOS安装。在早上,我得到了可以玩耍的东西。王子落入,着陆,转身,奔跑,跳跃,掉入缝隙并屈膝着陆,所有动作都真实的动画。在第二次会议中,我在DOSBox中玩了前几屏幕,而它观察我的截图,并发现了一个关于如何检测边缘的错误:它在错误的单元中寻找边缘。它通过返回到原始的汇编例程来修复那个错误。可是,关卡看起来仍然不对。砖块、门和装饰都稍微有些偏差。Opus 5通过将每个部分与截图一一匹配来放置所有内容,对于它无法解释的内容,它通过猜测填充。第四轮——Claude Opus 5.5(2026年9月):一个提示 当Opus 5.5发布时,我给了它一个提示:“角色移动、奔跑、跳跃,但门的位置、砖块都不同,你是新的模型,让我们看看你能改进什么。”它采取了完全不同的方法。它没有通过肉眼调整位置,而是找到了原游戏自己的绘制房间例程,正如Dávid Nagy和princed.org社区在SDLPoP中所记录的一样,SDLPoP是一个从其反汇编重建的DOS游戏的开源移植,并移植了这一例程。结果,DosRoomDrawer.cs 是SDLPoP房间绘制代码(src/seg008.c)的直接C#移植,该文件在其头部标明了这一点。SDLPoP的文档解释了早期会话仅仅猜测的内容:“随机”砖块图案并不是随机的。
本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。
☕请我喝杯咖啡