文章摘要
这篇文章讲述了开发者如何在25MHz的386 CPU上为1994年的游戏《Pizza Tycoon》实现城市交通模拟系统。经过多次尝试和14年的努力,最终成功让20-30辆汽车在街道上流畅行驶,包括路口排队等行为,为游戏增添了生动的城市氛围。早期尝试曾因过度复杂的锁定系统而失败,直到找到更简洁的解决方案。
文章总结
披萨大亨如何在25MHz CPU上实现交通模拟
背景
《披萨大亨》(1994年DOS游戏)的开源复刻项目《Pizza Legacy》开发者耗时14年,终于破解了原版游戏中流畅的交通系统实现原理。原版游戏在25MHz 386 CPU上实现了令人惊叹的动态交通效果:20-30个车辆精灵在道路网络中穿行,在十字路口排队,为城市注入生命力。
开发者走过的弯路
- 2017年尝试:采用复杂的网格占用检测系统,车辆需申请移动许可,导致同步问题频发
- 现代思维陷阱:过度设计路径查找、碰撞检测等系统,忽视了原版的简洁性
城市道路设计
- 地图由160x120个图块构成,每个图块定义明确方向属性
- 关键设计:所有道路均为单行道,车辆只需遵循当前图块的方向指示
- 转弯逻辑:50%概率直行或转向,但禁止连续两次左转
高效运行机制
1. 移动系统
- 每帧移动1像素
- 每16像素(完整图块)执行一次方向决策
- 初始随机偏移避免计算集中
碰撞检测
- 采用O(n²)简单检测,但通过多重优化:
- 方向冲突预筛(相向车辆无需检测)
- 同车道优先检查
- 碰撞后暂停10帧,自然形成车流队列
- 采用O(n²)简单检测,但通过多重优化:
生成逻辑
- 进入视角时按区域流量密度生成车辆
- 车辆离开屏幕边界时,在反向车道重新生成
- 滚动地图时动态生成新区域车辆
设计哲学启示
原版成功的关键在于"够用就好"的设计理念:
- 利用预设道路网络替代复杂路径计算
- 1像素/帧的移动足够营造流畅视觉效果
- 早期返回机制大幅降低碰撞检测开销
开发者最终通过逆向工程汇编代码(借助LLM辅助分析),用不到200行C++代码重现了这一精妙系统。这个诞生于1994年的解决方案证明:优秀的设计不在于技术复杂度,而在于对核心需求的精准把握。
评论总结
以下是评论内容的总结:
对经典游戏的怀念与喜爱
- 多位用户表达了对《Pizza Tycoon》等经典游戏的怀念,分享了游戏中的有趣体验和挑战。
- 引用:
- "My high school girlfriend and I played this game all the time... I loved building my 'empire'."(评论2)
- "I couldn’t understand why someone would want to reimplement Pizza Tycoon, until I realized I played it’s sequel as a child..."(评论6)
对游戏机制的分析与赞赏
- 用户讨论了游戏中的交通系统设计,认为其简单而高效,并与其他游戏(如《Factorio》)的优化方法类比。
- 引用:
- "You don’t need complex rules for what cars can do at an intersection... You reason about the lanes!"(评论4)
- "By making the roads single-direction and roads owning the movement... factorio’s conveyor belt optimizations might be relevant."(评论11)
对低硬件要求游戏设计的兴趣
- 有用户提出对低硬件要求游戏设计的兴趣,认为这种限制催生了优雅的解决方案。
- 引用:
- "Fascinating how constraint breeds elegance... The old game devs would have appreciated EVM constraints."(评论10)
- "Anyone know of any communities/game jams with the theme of 'has no business running on such low hardware requirements'?"(评论3)
对游戏重制趋势的支持
- 用户表达了对重制经典游戏趋势的支持,并希望看到更多类似项目。
- 引用:
- "I love this trend of people rebuilding old games like this. I hope to see a lot more of this."(评论7)
对游戏Bug和玩法的吐槽
- 有用户提到游戏中的Bug和某些玩法的不足,但同时也表示了对游戏独特乐趣的认可。
- 引用:
- "But after having bought about 200 or so, the game would inevitably crash... I hope this remake won’t have it!"(评论8)
- "But sabotaging the competition was still funnier than handling a normal business."(评论8)
总结:评论主要围绕对经典游戏的怀念、对游戏机制的分析、对低硬件要求设计的兴趣以及对重制趋势的支持展开,同时包含对游戏Bug和玩法的吐槽。