Cubedoom: 使用 Spectre 編程語言打造的類 DOOM 射擊遊戲

從零開始開發一款遊戲是一項重大的工程,但使用自定義的編程語言來進行開發,則將挑戰與成就感提升到了新的高度。Cubedoom 是一款受 Wolfenstein 3D 和原始 DOOM 啟發的競技場射擊遊戲,它有力地展示了 Spectre 編程語言的能力。這個專案不僅提供了一種極簡且引人入勝的遊戲體驗,同時也作為 Spectre 設計原則的實際展示,包括其多維陣列處理能力和強大的 C 互操作性。

Cubedoom: 概覽

Cubedoom 是一款旨在讓玩家沉浸在迷宮般的環境中、與單一敵方類型進行戰鬥並力求生存的競技場射擊遊戲。其遊戲玩法刻意保持極簡,專注於導航與戰鬥的核心循環,讓人聯想起早期的 FPS 遊戲。遊戲包含了一些基本元素,例如生命值條、小地圖 HUD 和經典的視角晃動(viewbob)機制,增添了復古感。

使用 Raycasting 技術實現復古 3D

遊戲的 3D 世界渲染採用了 raycasting 技術,這是一種由早期第一人稱射擊遊戲普及的方法。這種方法涉及在每一幀從玩家的位置發射一組射線,在經過地圖網格時不斷前進,直到偵測到牆壁碰撞。接著,碰撞的距離將決定繪製到螢幕上的垂直切片高度,從而有效地在沒有複雜渲染管線的計算開銷下,創造出深度感的錯覺。

關於此技術的具體實現方式,有一點需要特別注意。正如一位評論者所澄清的:

在運行時,每一幀都會從玩家的位置發射一組射線,在經過地圖網格時不斷前進,直到偵測到牆壁碰撞。這並不是 DOOM 的運作方式。它更像是 Wolfenstein 3D。

這一區別強調了雖然 Cubedoom 從 DOOM 汲取靈感,但其渲染架構更接近於 Wolfenstein 3D 所使用的簡單且有效的 raycasting 技術,從而保持引擎的輕量化與高效能。 n

Spectre 編程語言的技術基礎

Cubedoom 完全使用 Spectre 編程語言構建,並依賴 SDL2 和 SDL2_Image 開發庫來處理圖形與輸入。該專案最初是一個實驗,旨在推動 Spectre 的多維陣列能力及其 C 互操作性。Cubedoom 的開發甚至促成了特定的語言增強功能,例如引入了與 extern-相關的「標頭檔」語法,以提高與其他編譯器後端(backend)的相容性。

遊戲的源代碼已在 GitHub 上公開,歡迎社群的參與與貢獻。

Spectre 編程語言: 驅動 Cubedoom

Spectre 是 Cubedoom 的基礎技術,其持續的開發對於像這樣的專案至關重要。Spectre 最近的更新,特別是 v0.0.5 版本,展示了其不斷演進與日益增長的能力:

  • C-to-Spectre 轉換: 一個新的 --translate-c 標記(flag)允許將 C 代碼轉換為 Spectre,從而簡化遷移與整合過程。
  • 實驗性後端 (Backends): 引入了新的實驗性 LLVM 和 C99 後端,擴展了 Spectre 的編譯目標與優化潛力。
  • 改進的類型系統: 對類型層級不變量(type-level invariant)語法的增強,提供了更強大的類型安全與表達能力。
  • 性能優化: 在語義分析與模組解析方面的顯著改進,帶來了更快的編譯時間。

這些進展使得 Spectre 成為一種更通用且高效的語言,用於開發複雜的應用程式,正如 Cubedoom 所證明的。

未來方向與社群參與

Cubedoom 的開發路線圖包括一些令人興奮的新功能,例如音效、更多樣化的敵方類型,以及用於深化遊戲體驗的彈藥計數系統。Cubedoom 與 Spectre 編程語言都是開源專案,正積極尋求對語言設計、遊戲開發或兩者皆有興趣的開發者進行貢獻。

社群的反應突顯了這項嘗試的成就感:

必須是非常滿足的。用你自己的語言寫一個遊戲。

以及對其經典靈感的不懈吸引力:

一定會愛上這些經典遊戲,它們在全盛時期非常了不起,而且今天玩起來依然很有趣!

Cubedoom 不僅僅是一款遊戲;它是自定義語言開發能力的證明,提供了復古遊戲懷舊感與尖端編程探索的獨一無二結合。

Sources