重讀《Pizza Tycoon》的交通奇蹟:25 MHz 也能跑出「活著的城市」

本篇文章更新時間:2026/04/10
如有資訊過時或語誤之處,歡迎使用 Contact 功能通知或向一介資男的 LINE 社群反應。
如果本站內容對你有幫助,歡迎贊助支持


如何在 25 MHz 的 CPU 上跑出交通流動感?讀《How Pizza Tycoon simulated traffic》有感

編輯前言:這篇文章讓我重新思考:很多看似複雜的系統,其實靠極簡邏輯就能呈現驚人的效果。尤其是遊戲開發中,我們常常不小心「想太多」。原文出自《How Pizza Tycoon simulated traffic on a 25 MHz CPU — Pizza Legacy Blog》。

核心觀點 (Key Takeaways)

  • Pizza Tycoon 的交通系統幾乎完全依靠「一律單向的道路」與「每塊 tile 自帶方向」來達成看似複雜的車流。
  • 移動邏輯極度簡化:每 tick 移動 1 pixel,每 16 pixel(即一格 tile)才處理一次轉彎判定。
  • 碰撞偵測不是高深演算法,而是便宜的 O(n²) 配對,但因為大量早期退出,使得成本非常低。

深入解析

原作者在重製 Pizza Tycoon 的過程中,花了 14 年才成功重現遊戲中最迷人的交通效果。這段故事對我來說有種「打開舊遊戲黑盒子」的快感,也讓我看到當年遊戲工程師如何用極少的計算資源,達成如今看來仍不失魅力的動態城市感。

「I went into it with a brain full of modern concepts… and of course plenty of CPU to run it all!」

我覺得這段話正中許多現代開發者的痛點:我們慣性使用 pathfinding、collision system、scene graph,但 Pizza Tycoon 根本不需要這些。

一、道路本身就決定車流方向:完全不需要 pathfinding

文章最讓我驚訝的,是遊戲的道路 tile 本身就包含方向資訊,例如:

  • 0x16:水平道路,只能左到右。
  • 0x06:右到左。
  • 0x26、0x36:上下方向類似規則。
  • 拐彎 tile(例如 0x56)提供兩個可能方向,車子直接「丟硬幣」決定。

換句話說,地圖是一座巨大的單向道路網。一旦車知道當前 tile,它就知道下一步該往哪裡。

這個方法排除了所有複雜的 pathfinding——因為遊戲根本不打算讓車「知道目的地」,車只需要一直開下去就好了。

二、「1 pixel per tick」+「每 16 ticks 才判斷轉彎」

車輛邏輯被拆成兩層:

  • 每 tick:車往 X 或 Y 加減 1。
  • 每 16 ticks:才計算下一個 tile 的方向與車頭朝向。

這個架構有兩個漂亮特點:

  • 大部分時間只是加減 1,非常便宜。
  • 複雜的轉向邏輯只在跨 tile 時執行,頻率直接少 1/16。

加上車在生成時會隨機 offset 進度,使得所有車不會同時做 tile-boundary 計算,CPU 壓力被完美攤開。

三、碰撞偵測看似笨重,實則極快

乍看:O(n²) 好可怕?但實際上幾乎都在第一兩行就 early exit 了:

  • 車向東、車向西?永不相撞,立刻跳出。
  • 方向不同但不會在同一條道路相遇?跳出。
  • 只有「同向且同 lane」才開始比較座標。

以典型 25 台車來說:

  • 625 組 pair
  • 但真正進入座標運算的只有「個位數」

最後用一個「被擋時等待 10 tick」的計時器自然形成功能性車陣。沒有車物理、沒有速度曲線,但就是看起來合理。

筆者心得與啟發

讀完後,我最大感觸是:

很多時候,我們的問題不是做不到,而是做太多。

在現代技術堆疊的思維下,遇到交通系統、AI、碰撞,我們會立刻想到 pathfinding、bounding boxes、多層級資料結構。但 Pizza Tycoon 的工程師反其道而行:

  • 道路本身定義車流,不給車選擇。
  • 車的出現與消失由畫面邊界自然處理。
  • 遇到阻礙就停 10 tick,不做物理模擬。
  • 幾乎所有計算都能早期退出。

這種極簡邏輯,不但符合硬體限制,更重要的是:呈現效果已經足夠好。這讓我重新反思:在開發或設計系統時,我是否過度追求「真實」?是否忘記「好看就好」?

如果你正在做模擬系統、城市生成、AI 代理人、交通視覺化等相關專案,我非常推薦你去看看原文。它提醒我:

有時候,只要抓到對的抽象,世界就會自己動起來。


Share:

作者: Chun

WordPress 社群貢獻者、開源社群推廣者。專注於 WordPress 外掛開發、網站效能最佳化、伺服器管理,以及 iDempiere 開源 ERP 導入與客製開發。曾參與 WordCamp Taipei 等社群活動,GitHub Arctic Code Vault Contributor。提供資訊顧問、WordPress 開發教學、主機最佳化與企業 ERP 整合服務。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *


文章
Filter
Apply Filters
Mastodon