邪門射龍門 App:技術清單與開發過程
邪門射龍門是一款把撲克牌射龍門做成計分遊戲的 iOS App,可以單機玩、和 AI 角色同桌,也可以開線上房間和朋友一起玩。這篇整理它用到的技術和開發過程。規則可以看射龍門怎麼玩。
基本資料
- 平台:iPhone / iPad,iOS 16 以上
- 規模:Swift 90 個檔案、約 2.1 萬行
- 模式:現場發牌、練習、積分大亂鬥(和 AI 同桌)、線上房間(最多 8 人)
- 語言:繁中、英文、日文
App 端
- SwiftUI + MVVM:Models / ViewModels / Views / Services 分層
- Swift Charts:結算畫面的分數走勢圖
- StoreKit 2:打賞(Tip Jar)與「移除廣告」內購
- Google Mobile Ads(AdMob):橫幅廣告;UMP 處理廣告同意視窗
- Firebase Analytics / Crashlytics:使用數據與當機回報
- Network:偵測斷線,線上房間斷線時自動跳過這一手
- PrivacyInfo.xcprivacy:隱私權清單
線上房間
- Firebase Realtime Database:房間狀態與每一手的事件
- Firebase Auth(匿名登入):不用註冊就能開房、加入
- App Check(App Attest,舊裝置退回 DeviceCheck):只讓真的 App 連進資料庫
- 安全規則:房主才能改房間設定、房號格式固定、房間最多存在 2 天,過期房間開新房時順手清掉
- 共用亂數種子:同一個 seed 洗出同一副牌,各裝置看到的牌序和 AI 台詞都一樣
AI 角色
- 20 位歷史人物當 AI 對手,每位有自己的六維人格參數
- 決策引擎:參考展望理論、Kelly 比例、情緒 tilt、近失效應,決定這一手要不要射、投入多少分
- 台詞:依局面(寬門、窄門、連續失手等 12 種情境)挑選,三種語言共 837 句
- 回測工具:另寫一組命令列程式,用
swiftc直接編譯 AI 核心,跑大量對局做角色審核和平衡調整
開發過程
| 版本 | 日期 | 重點 |
|---|---|---|
| 1.0.1 | 2026-03 | 首次上架:發牌、射門、同門選上下、打賞 |
| 1.2 | 2026-03 | 機率面板:依剩餘牌算出過門/撞柱/出界機率 |
| 1.3 | 2026-04 | 互動式教學、洗牌動畫、Crashlytics、單元測試 |
| 1.4 | 2026-04 | 多人計分模式(積分大亂鬥) |
| 2.0 | 2026-04 | 20 位 AI 角色、結算畫面改版 |
| 2.1 | 2026-04 | 支援直向;加入橫幅廣告 |
| 2.3 | 2026-04 | 練習模式改版 |
| 2.4 | 2026-04 | 外觀模式(深色/淺色)與牌背顏色調整 |
| 2.6 | 2026-10 | 每個模式的端到端 UI 測試 |
| 3.0 | 2026-10 | 線上房間上線 |
| 3.1 | 2026-10 | 「移除廣告」內購;AI 台詞依局面挑選 |
踩過的坑
- App Store 審查與賭博用語:射龍門在現實中常拿來賭,App 內只要出現下注、底池、籌碼這類字眼就可能被退。全部改成遊戲用語(投入、累計、積分),寫成專案規則,所有新字串都要照這份對照表
- 購買項目載入失敗時一直轉圈:打賞的內購項目載不出來時畫面一直轉圈,審查因此被退。改成顯示「重試」按鈕
- 免廣告期限可以被調時鐘延長:打賞送 7 天免廣告,玩家把手機時間調回去就會一直有效。改成時間倒退時不延長期限
工具
- Xcode、XCTest(單元測試 + 每個模式走完一輪的 UI 測試)
- XcodeGen(
project.yml產生 Xcode 專案) - Claude Code:寫程式、code review、App Store 截圖與送審資料