client\game_table.feature
# features/client/game_table.feature
# PDD SCR-007 遊戲桌面 BDD Scenarios
Feature: 遊戲桌面 (SCR-007)
身為遊戲中的玩家
我想即時看到桌面狀態並進行押注操作
以便完成每一局遊戲
Background:
Given 玩家已加入遊戲房間
And 伺服器廣播 RoomState 至 Client
Scenario: 顯示獎池金額(來自 Server)
When 伺服器廣播 pot=5000
Then 桌面獎池顯示 "獎池:🪙 5,000"
And Client 不自行計算任何籌碼值
Scenario: 莊家押注階段顯示押注面板(自動押注 checkbox 預設不勾選)
When 伺服器廣播 phase="banker-bet"
And 輪到我(莊家)
Then 應顯示快速押注按鈕組
And 自動押注 checkbox 預設為未勾選(BUG-20260422-001)
And 進度條隱藏(未啟動倒數)
And 玩家必須手動點擊「確認下注」才會送出 banker_bet
Scenario: 自動押注 checkbox 每次進入 banker-bet 都重置為未勾選
Given 上一局玩家曾勾選自動押注 checkbox
When 新一局 phase 進入 "banker-bet" 且 showBankerMode 被呼叫
Then 自動押注 checkbox 應自動回復為未勾選
And 進度條隱藏
And 不會自動發送 banker_bet
Scenario: 玩家主動勾選自動押注後倒數才執行上一把金額
Given 莊家上一把押注金額為 1000
And 玩家於本局主動勾選自動押注 checkbox
When 3 秒倒數結束
Then 自動發送 banker_bet 1000 至伺服器
And 選中按鈕顏色應為主色(金色)
Scenario: 閒家跟注階段(自動跟注 checkbox 預設不勾選)
When 伺服器廣播 phase="player-bet"
And 輪到我(閒家)
Then 應顯示「跟注」和「棄牌」按鈕
And 自動跟注 checkbox 預設為未勾選(BUG-20260422-001)
And 玩家必須手動點擊「跟注」或「棄牌」才會送出 call / fold
Scenario: 中途加入者暫不顯示操作按鈕(等待下一局)
Given 我於 phase="player-bet" 時加入房間
And room_state 顯示我的 is_waiting_next_round = true
When phase 仍為 "player-bet" 期間
Then 桌面顯示「等待下一局」提示
And 不顯示押注 / 跟注面板
And 我不會收到 myHand 私人訊息
Scenario: 開牌動畫(顯示 Server 廣播的牌型)
When 伺服器廣播 showdown_reveal 含各玩家手牌
Then 依座位順序逐一翻牌(動畫 250ms 間隔)
And 牌型標籤顯示在頭像上方(大字閃亮)
And Client 不計算牌型,直接顯示 Server hand_type
Scenario: 三公手牌特殊效果
When 伺服器廣播某玩家 hand_type="sam_gong"
Then 顯示 "🎴 三公" 閃亮標籤
And 播放三公慶祝音效
And 顯示三公光暈特效
Scenario: 開牌後結算(顯示 Server net_chips)
When 伺服器廣播 settlement 資料(含 net_chips)
Then 顯示結算疊加層(SCR-009)
And 顯示我的盈虧(來自 net_chips,Client 不計算)
And 5 秒後自動關閉結算疊加層
Scenario: 斷線重連
When 網路中斷
Then 顯示「重新連線中...」提示
And 自動嘗試最多 5 次重連(間隔遞增)
And 重連成功後恢復桌面狀態
Scenario: Client 禁止包含遊戲邏輯計算
Then Client TypeScript 不應包含 "compareCards" 關鍵字
And Client TypeScript 不應包含 "calculatePoints" 關鍵字
And Client TypeScript 不應包含 "Math.random" 關鍵字
client\lobby.feature
# features/client/lobby.feature
# PDD SCR-004 主大廳 BDD Scenarios
Feature: 主大廳 (SCR-004)
身為已登入玩家
我想在主大廳看到我的籌碼餘額並選擇遊戲模式
以便開始遊戲或查看排行榜
Background:
Given 玩家已成功登入
And 玩家當前不在任何遊戲房間中
Scenario: 顯示玩家籌碼餘額
When 進入主大廳畫面
Then 應顯示玩家暱稱
And 應顯示來自伺服器的籌碼餘額
And 籌碼餘額格式為 "🪙 {數字}" 千分位格式
Scenario: 快速配對按鈕可用
Given 玩家籌碼餘額 >= 最低廳別入場費
When 進入主大廳畫面
Then 快速配對按鈕應為可點擊狀態
Scenario: 已在房間中時禁止二次配對(Single Room Constraint)
Given 玩家已在遊戲房間中(room_active=true)
When 進入主大廳畫面
Then 快速配對按鈕應為 disabled 狀態
Scenario: 進入新手教學
When 點擊「新手教學」按鈕
Then 應導覽至教學畫面(SCR-008)
Scenario: 進入排行榜
When 點擊「排行榜」圖示
Then 應導覽至排行榜畫面(SCR-010)
Scenario: 進入個人帳號頁
When 點擊「帳號」圖示
Then 應導覽至個人資料畫面(SCR-013)
client\matchmaking.feature
# features/client/matchmaking.feature
# PDD SCR-005, SCR-006 配對流程 BDD Scenarios
Feature: 配對流程 (SCR-005, SCR-006)
身為想開始遊戲的玩家
我想選擇廳別並進入配對
以便找到對手開始遊戲
Scenario: 選擇廳別後進入配對等待
Given 玩家在廳別選擇畫面(SCR-005)
When 選擇「初級廳」並確認
Then 進入配對等待畫面(SCR-006)
And 顯示已等待秒數
Scenario: 90 秒配對超時返回大廳
Given 玩家在配對等待畫面
When 等待超過 90 秒未配對成功
Then 顯示「配對超時」提示
And 2 秒後自動返回主大廳(SCR-004)
Scenario: 玩家主動取消配對
Given 玩家在配對等待畫面
When 點擊「取消配對」
Then 發送 leave 指令至 Colyseus
And 返回主大廳(SCR-004)
Scenario: 配對成功進入遊戲桌
Given 玩家在配對等待畫面
When Colyseus 回傳 CONNECTED 事件
Then 自動導覽至遊戲桌面(SCR-007)
client\settings_audio.feature
# features/client/settings_audio.feature
# PDD SCR-015 設定畫面 + §6.8 音效規格 BDD Scenarios
Feature: 設定與音效控制 (SCR-015)
身為玩家
我想控制音效和背景音樂
以便根據偏好調整遊戲體驗
Scenario: 關閉音效
Given 音效(SFX)預設為開啟
When 在設定畫面切換「音效」為關閉
Then 後續操作不播放任何 SFX
And 設定儲存至本機 localStorage
Scenario: 關閉背景音樂
Given 背景音樂(BGM)預設為開啟
When 在設定畫面切換「背景音樂」為關閉
Then BGM 立即停止播放
And 設定儲存至本機
Scenario: 調整音量後立即生效
When 在設定畫面拉動「BGM 音量」滑桿至 50%
Then BGM AudioSource volume 設定為 0.5
Scenario: 重啟後恢復音效設定
Given 玩家已關閉音效並離開 App
When 重新啟動 App
Then 音效設定從 localStorage 恢復為關閉狀態