跳轉到

D-20260630-02|多回合積分制與 Match/Round/Race 三層正名

背景與驅動力

D-20260629-01 揭露多回合模型幾乎未文件化:賽內機制整份寫單場、ledger 殘留固定三台的 threeCarRotation、配對流程無逐回合結構。同時全 corpus 的 Race* 命名同時揹「一場比賽」與「即時競速」兩義,程式實作必然誤解。

考慮過的選項

  • 積分制冠軍模型:brainstorm 定案後實作(流水帳未記錄其他計分模型的替代方案)。
  • 命名維持 Race* 雙義 vs 三層正名(採納後者):使用者要求語義對齊、防程式誤解;即時層保留 race 詞彙(RaceSnapshotEventrace_seed 等)。

決定

  • 一場 match 含 MATCH_ROUND_COUNT 個回合(1–5、預設 3);房主開房設定逐回合場地 + 圈數 + 時限 + 人數;每人賽前從車庫選 N 台(一台對一回合、可重複)。
  • 逐回合名次得積分 P − k + 1,N 回合加總 → 總名次 → per-match 結算一次finisherCount 未達 3=match 層 void(承 D-20260602-02);回合內全毀者排末位但續賽換新車;損傷不跨回合繼承——每回合載入該回合的車 + 場地 = 全新世界。
  • 三層正名鐵則Match= 結算 / 帳本 / 經濟 / 房間設定單位、Round=match 內結構槽、Race= 回合內即時 netcode/ 物理;ledger 一場一筆 MatchResultEvent(內嵌 rounds[])。
  • deriveTotalRanking 為純函數;reviewAndSignMatchResult 簽章前必須重算總名次——總名次是衍生 aggregate,簽章者不重算則主 peer 可偽造名次騙過結算。
  • carRotation 一次選定後鎖死(賽前承諾、不可逐回合換車);任一台含 unusable 資產 = 整人拒絕進房(湊齊 N 台全可用才上場)。

後果與影響

跨約 25 檔正名與回寫、帳本層 Race* 命名 0 殘留;royalty 對同軌跨回合重複使用去重計一次。現況權威:賽內機制.mdledger.md算式表.md

附帶決策

同期賽內機制重審兩項一併定案:卡牆(場內物理卡死)不另設偵測、當無法完賽——形態無窮難窮舉、stuck-timer 會誤判正常慢速並增決定性風險,賽程時間上限已兜底;卡空(掉出場地)沿用自動重定位。名次決定性 tiebreak 補齊完賽時間 → 完成圈數 → PeerId lexicographic,共識消歧靠最終的 PeerId 序。