AI 演武場玩法
6×9、3 對 3、5 回合;純文字、免登入,AI 只要跟著連結就能玩。
先看三個數字
- 棋盤:6 欄 × 9 列(x = 0–5,y = 0–8;y=0 在上方)。
- 人數:我方 3 單位(蜀)對敵方 3 單位(魏)。
- 回合:最多 5 回合;每回合每單位一個行動。
棋盤與單位
我方在下方(y=7),敵方在上方(y=1)。單位以「蜀1/蜀2/蜀3」與「魏1/魏2/魏3」表示; 名稱、兵種與數值見入口頁的單位表。
- 將領
- 劉備
- 兵種
- 步兵
- 主公
- 是
- ATK(武)
- 73
- DEF(統)
- 75
- HP
- 100
- 將領
- 關羽
- 兵種
- 騎兵
- 主公
- 否
- ATK(武)
- 97
- DEF(統)
- 90
- HP
- 100
- 將領
- 張飛
- 兵種
- 槍兵
- 主公
- 否
- ATK(武)
- 98
- DEF(統)
- 85
- HP
- 100
- 將領
- 曹操
- 兵種
- 步兵
- 主公
- 是
- ATK(武)
- 80
- DEF(統)
- 90
- HP
- 100
- 將領
- 夏侯惇
- 兵種
- 騎兵
- 主公
- 否
- ATK(武)
- 90
- DEF(統)
- 83
- HP
- 100
- 將領
- 夏侯淵
- 兵種
- 弓兵
- 主公
- 否
- ATK(武)
- 88
- DEF(統)
- 82
- HP
- 100
| 將領 | 兵種 | 主公 | ATK(武) | DEF(統) | HP |
|---|---|---|---|---|---|
| 劉備 | 步兵 | 是 | 73 | 75 | 100 |
| 關羽 | 騎兵 | 否 | 97 | 90 | 100 |
| 張飛 | 槍兵 | 否 | 98 | 85 | 100 |
| 曹操 | 步兵 | 是 | 80 | 90 | 100 |
| 夏侯惇 | 騎兵 | 否 | 90 | 83 | 100 |
| 夏侯淵 | 弓兵 | 否 | 88 | 82 | 100 |
ATK 取「武」,DEF 取「統」;HP 固定 100。兵種是示範分配,不是史實編制。
回合與行動
- 每回合,我方每個單位最多一個行動:移動或攻擊。
- 移動:以地形移動消耗計算,單次最多 3 點;不可穿過敵我單位,巨石不可通行。
- 攻擊:弓兵距離 2,其餘 1(曼哈頓距離);不看視線。
- 按「結束回合」後,敵方每個單位依次行動:能打就打,否則向最近的蜀軍移動。
- 每回合完結後,所有單位可再行動;重複至第 5 回合完。
傷害公式
固定、無隨機
ATK=武力;DEF=統率;基礎傷害=max(1, round(ATK − DEF/2));最終傷害=max(1, round(基礎傷害 × 兵種相剋 × 地形))。
地形以「防守方所在格」的
地形以「防守方所在格」的
defBonus 換算:clamp(1 − defBonus/100, 0.5, 1.5)。- 攻擊方
- 步兵
- 防守方
- 弓兵
- 倍率
- ×1.5
- 攻擊方
- 騎兵
- 防守方
- 步兵
- 倍率
- ×1.5
- 攻擊方
- 弓兵
- 防守方
- 槍兵
- 倍率
- ×1.5
- 攻擊方
- 槍兵
- 防守方
- 騎兵
- 倍率
- ×1.8
- 攻擊方
- 其他組合
- 防守方
- —
- 倍率
- ×1.0
| 攻擊方 | 防守方 | 倍率 |
|---|---|---|
| 步兵 | 弓兵 | ×1.5 |
| 騎兵 | 步兵 | ×1.5 |
| 弓兵 | 槍兵 | ×1.5 |
| 槍兵 | 騎兵 | ×1.8 |
| 其他組合 | — | ×1.0 |
地形數值取自 `terrain.json`:森林防禦 +24、山地 +30、河流 −10、高地 +15;移動消耗亦依地形。
勝負
- 勝:敵方三個單位全部 HP 0。
- 敗:我方主公(劉備)HP 0。
- 和:5 回合完,雙方未達成勝/敗條件。
- 敵方主公(曹操)陣亡但其他敵將仍在,對局繼續;要全滅才算勝。
狀態編碼(s)
對局狀態全部放在網址的 s 參數:JSON → deflate 壓縮 → base64url(無 padding)。 頁面不保存任何狀態;同一條網址永遠是同一個局面。
{
"v": 1,
"t": 1,
"phase": "player",
"u": [
{ "id": "g_liubei", "x": 1, "y": 7, "hp": 100, "acted": false }
],
"l": ["第 1 回合:我方行動"]
}驗證失敗(截斷、版本不符、數值不合理)會顯示「狀態無效,已重置」,不會 500。
AI Agent 怎樣玩
- GET
/play/ai-demo。 - 讀取頁面上的
#ai-stateJSON;state是局面,actions是合法動作。 - 選一個
actions[].url,直接 GET 該相對網址。 - 重複,直到
actions為空;結果在state.result(win/lose/draw)。
不需要登入、cookie、JavaScript、POST、資料庫或 Cloud Functions。每個動作都是完整的下一狀態,不是 action id。
限制
- 不計兵法、名將技、天氣、士氣、暴擊、俘虜、獎勵。
- 不做即時對戰、排行榜、公開統計、存檔或個人資料。
- 不影響正式遊戲的存檔、數值、經濟或排行榜。
關於玩法
- 為甚麼只有 5 回合?
- 這是示範局,5 回合足夠讓雙方接觸、攻擊與分出勝負;也讓 AI Agent 可以在 25 次 GET 內完成一局。
- 每個單位一回合可以做多少事?
- 一個行動:移動或攻擊。移動後或攻擊後,該單位本回合結束。回合完結前可按「結束回合」,之後敵方行動。
- 弓兵為甚麼可以打兩格?
- 示範規則:弓兵攻擊距離 2(曼哈頓距離),其餘兵種 1。沒有視線阻擋與高低差射程修正。
- 狀態會不會太大?
- 狀態只放回合、六個單位的位置/HP/是否已行動,以及最近 12 條記錄,再以 deflate 壓縮成 base64url;一般局面約 1–2KB。
- 可以改網址的 s 參數作弊嗎?
- 可以改,但沒有獎勵、沒有排行榜、沒有存檔;頁面只會驗證數值是否合理。這是一個開放示範,不是競技系統。
分享這頁
想討論?去 Facebook 群組 或 Threads。
本頁最後更新:2026 年 10 月 26 日