总结
人们在这里使用 AI 来处理大型遗留 C++ 游戏代码库的经验是什么样的?它在这种应用中工作得怎么样?哪些具体的预防措施和实践(除了与 AI 编程相关的那些)是值得注意的?
背景和历史
项目
多年来,在 AI 的前几年,我一直在开发一个开源交通游戏 Simutrans 的分支。我的分支被称为 Simutrans-Extended。近年来,我没有有时间来完成下一个需要做的事情,这是一个非常复杂的工作,非常关键于游戏平衡的实现(我们当前使用的平衡是相当粗糙的),它需要对乘客/邮件/货物路径寻找算法进行复杂的修改,这个算法我并没有写。过去,我已经成功地对这个算法进行了更小的修改。
Simutrans 是一个遗留的代码库,始于 1997 年(发布于 1999 年),并在 2004 年开源。它以其时的风格编写,使用原始指针,字节顺序敏感的保存文件需要非常精确的版本控制和保存/加载程序的精心编写,自定义集合类和自定义内存管理。它最初以所有变量名为德语编写,后来大多数变量名已经被翻译为英语。它是一个足够大的开源项目,使得大多数 AI 都有对其代码库的某种本能的了解。通过在 Simutrans-Extended 上工作,我主要关注的是中间逻辑层,很少涉及 UI 和几乎没有涉及低级别的东西。
以下是 GitHub 仓库的参考:https://github.com/jamespetts/simutrans-extended
我的经验
我不是一个专业的软件工程师(我的职业是法律),在 Simutrans-Extended 之外,我只有非常有限的编程经验,尽管在这个项目上工作了很多年(从约 2008/9 年开始)我学到了很多东西。
在 AI 助力开发的世界中,我最近(2025 年后)使用 GPT 通过 M356 Copilot:
创建一个大型的互联的脚本套件来管理模型铁路软件 JMRI 的时间表自动化系统(GitHub:https://github.com/jamespetts/Timetable-Automation-System );
创建一个 JMRI 的补丁来添加一些与物理加速/减速和停止点相关的功能,这个补丁已经被批准用于下个月将要发布的版本中;
创建一个小型的浏览器游戏,类似于 1980 年代的平台游戏,但反转,使用路径寻找算法代替人类玩家,并且人类玩家放置陷阱/敌人(点击这里查看:https://bridgewater-brunel.me.uk/games/curse_of_the_tomb.html ); 和
创建一个开源的浏览器游戏引擎来支持早 1990 年代的点与点冒险游戏(GitHub:https://github.com/jamespetts/pointnclick ; 点击这里查看最小的测试游戏:https://bridgewater-brunel.me.uk/games/pointnclick/ ),一个非平凡的游戏正在开发中。
问题和更多详细的问题
我知道我使用 AI 的方式有些非标准。我的 AI 是通过 M365 Copilot 访问的,这相当于没有成本限制,拥有最新的模型(GPT 5.5),可以做出创造算法的出色表现,但我知道这远远超出了开发人员现在常用的绑定系统。通常我对 AI 助力项目的设计有很高的控制,但在某些方面,AI 自动完成了设计工作,我没有干预。但是所有的项目都远远超出了一次性项目。
我也知道大型遗留代码库对 AI 来说是一个非常挑战性的问题,因为它们难以理解上下文,并且难以维持对如何维持这些代码库中状态的理解(即使在 .cc 和 .h 文件中)而且在这些文件中有非常多的代码。基于我的当前系统,我认为我无法使用 M365 Copilot 来完成 Simutrans-Extended 的工作,任何工作都需要通过编码绑定系统并且非常谨慎地引导。通过对代码的清晰理解,我知道代码需要做什么,但实际上实现它并且更新所有需要的东西来使它完全工作将是一个非常耗时和耗力的事情,如果以传统方式完成的话,因此我感兴趣的是使用 AI 来大大加快这个过程,并且允许我最终完成一个曾经被时间限制了多年的项目。
这里有人曾经工作过这个类似的项目吗?什么样的方法是有效的?更强大的模型是否会对项目产生重大影响,还是最近的改进在于上下文管理而不是基础模型性能?我是否需要最强大的模型来完成这个项目,还是 GLM 5.2 在相对密切的监督下会很有效?如果我使用付费的模型而不是我当前的 M365 Copilot 解决方案,什么样的 token 成本会对这个重构产生重大影响?
感谢大家的帮助!
评论 (0)