這是一個使用 Python 開發的簡易 3D 電車模擬器,包含兩個主要程式:
- 電車模擬器 (
main.py
) - 場景編輯器 (
scene_editor.py
)
全程用gemini-2.5-pro vibe coding完成
- 3D 電車模擬系統
- 可自定義軌道和場景
- 支援直線和曲線軌道段
- 場景中可添加建築物、圓柱體和樹木
- 即時場景編輯和重新載入
- 小地圖顯示功能
- 坐標顯示系統
- 電車物理模擬(加速、減速、摩擦力等)
- 圖形化介面(使用 PyQt5)
- 表格式場景指令編輯
- 即時場景預覽
- 支援拖放編輯
- 自動指令提示
- 場景語法檢查
- 即時小地圖預覽
- Python 3.x
- PyGame
- OpenGL
- NumPy
- Python 3.x
- PyQt5
- OpenGL
- NumPy
- W/↑: 加速
- S/↓: 煞車
- 滑鼠滾輪: 調整速度
- ESC: 切換滑鼠鎖定/解鎖,再次按下退出
- TAB: 切換滑鼠鎖定狀態
- G: 切換地面顯示
- L: 切換循環模式
- M: 切換小地圖顯示
- I: 切換坐標顯示
- PageUp/PageDown: 縮放小地圖
- R: 手動重新載入場景
- 滑鼠左鍵: 在解鎖狀態下點擊以重新鎖定視角
- 使用表格界面編輯場景指令
- 左側顯示場景指令列表
- 右側顯示即時小地圖預覽
- 自動顯示當前指令的參數提示
- 支援場景文件的載入和保存
- 提供即時語法檢查和錯誤提示
- 直接在表格中編輯場景指令
- 使用 Enter 鍵新增行
- 可拖動調整表格和預覽區域大小
- 檔案選單提供存檔和重新載入功能
- 自動保存修改內容
場景使用 scene.txt
文件進行配置,支援以下指令:
map
: 設定地圖紋理和比例start
: 設定起始位置和角度straight
: 新增直線軌道段curve
: 新增曲線軌道段building
: 新增建築物cylinder
: 新增圓柱體tree
: 新增樹木
scene_parser.py
: 場景檔案解析器texture_loader.py
: 紋理載入器renderer.py
: 3D 渲染器track.py
: 軌道系統
main.py
: 主程式入口camera.py
: 相機控制系統tram.py
: 電車物理模擬
scene_editor.py
: 圖形化場景編輯器- 使用 PyQt5 構建使用者介面
- 整合 OpenGL 預覽功能
- 提供場景編輯和驗證功能
- 使用
scene.txt
定義場景配置 scene_parser.py
負責解析場景文件,將文本指令轉換為場景物件- 支援場景熱重載:系統會定期檢查場景文件的修改時間,自動重新載入更新後的場景
- 軌道由直線段(
StraightTrack
)和曲線段(CurveTrack
)組成 - 每個軌道段都包含:
- 起點位置和方向
- 長度或曲率半徑
- 坡度資訊
- 軌道系統支援連續軌道段的平滑連接
- 電車運動模型包含:
- 位置和方向向量
- 速度和加速度
- 摩擦力和煞車力
- 使用時間步進(delta time)更新物理狀態
- 支援最大速度限制和平滑的加速/減速過程
- 使用 OpenGL 進行 3D 渲染
- 實現功能:
- 3D 模型渲染(建築物、圓柱體、樹木)
- 紋理映射和 UV 坐標管理
- 小地圖系統
- HUD(平視顯示器)顯示速度和坐標信息
- 支援動態視角切換和相機跟隨
- 使用 PyGame 事件系統處理輸入
- 支援同時處理:
- 鍵盤控制(加速、減速、功能切換)
- 滑鼠控制(視角調整)
- 滾輪控制(速度微調)
- 紋理資源動態載入和緩存
- 支援多種紋理格式和 UV 映射模式
- 記憶體資源管理和效能優化
- 使用右手座標系
- 世界座標系:
- X 軸:左右方向
- Y 軸:上下方向
- Z 軸:前後方向
- 支援相對和絕對座標轉換
- 物件位置使用相對於軌道的偏移量定位
本模擬器採用模組化設計,各個組件職責明確:
- 場景解析系統支援動態重新載入
- 電車物理模型包含加速度、摩擦力等參數
- 支援自定義紋理和 UV 映射
- 提供完整的相機控制系統
- 支援場景物件的相對和絕對坐標定位