CarPoPo 是以 JavaFX 與 TCP Socket 開發的多人連線賽車遊戲 MVP。系統採用 Client–Server(用戶端/伺服器)架構,由伺服器統一管理房間、玩家狀態、物理碰撞、計圈與比賽結果,再將遊戲狀態同步給各個用戶端。
這是團隊共同開發專案。我以團隊成員身分跨模組參與需求討論、功能開發、測試除錯與版本整合,並非由單一成員獨立完成,也沒有將特定模組標示為個人獨立負責。
- 建立或加入遊戲房間,單一房間最多 8 位玩家
- 玩家名稱、準備狀態、車輛與賽道選擇
- Sample、Beach、City 三張賽道
- 遊戲開始倒數與多人比賽流程
- 伺服器端物理、碰撞與 60 Tick 狀態更新
- 基本計圈、比賽結果與返回大廳流程
- Java 17
- JavaFX 21/Canvas
- TCP Socket
- Gson/JSON
- Maven
- Multithreading(多執行緒)與 Concurrent Collections(並行集合)
JavaFX Client A ─┐
JavaFX Client B ─┼─ TCP / JSON ─ Game Server ─ Room / Race / Physics
JavaFX Client C ─┘
伺服器使用 ConcurrentHashMap 管理連線、房間與玩家狀態,並以固定更新頻率執行遊戲迴圈。用戶端負責輸入、畫面呈現與接收伺服器狀態。
- JDK 17
- Maven 3.9 以上
先確認專案可以編譯:
mvn clean package接著在 IDE 中啟動伺服器:
com.racing.server.GameServer
再開啟一個或多個終端機啟動用戶端:
mvn javafx:run同一台電腦測試時使用 localhost;跨電腦測試時輸入伺服器所在電腦的區域網路 IP。預設連接埠為 5566。
src/main/java/com/racing/client JavaFX 用戶端、輸入與畫面呈現
src/main/java/com/racing/server 連線、房間、遊戲流程與物理處理
src/main/java/com/racing/common 封包、狀態與共用資料結構
src/main/resources 車輛、賽道與其他遊戲資源
docs 架構圖
- 尚未實作 Client Prediction(用戶端預測)與延遲補償,高延遲環境可能出現操作延遲或畫面跳動。
- Checkpoint 邏輯已有基礎結構,但尚未完成所有賽道設定與完整驗證。
- 目前沒有自動化測試與正式壓力測試結果。
- 跨網路連線可能需要 Port Forwarding(連接埠轉送)或虛擬區域網路工具。
- 車輛圖、道路 Tile 與 Sample 賽道素材來自 Kenney Racing Pack,依 Creative Commons CC0 授權釋出。
- Beach 與 City 賽道背景由團隊在開發過程中使用 Google Gemini 生成後再進行組合與調整;圖片保留 Gemini 生成標記,並依 Google 服務條款 使用。它們不屬於 Kenney Racing Pack,本 Repository 也未另行提供再利用授權。
本 Repository 用於個人作品集與學習成果展示。團隊自行撰寫的程式碼與專案特定內容目前未附開源 License;第三方素材則依各自的原始授權使用。公開可見不代表未授權內容可被任意複製、修改或再散布。