Stone Friend · App 功能提案

PK 對戰模式

把比賽模式變成日常都能玩的攀岩對決——開房間、揪好友、限時 1v1 淘汰賽,當場分高下。

產品提案草案 · 2026.06 · 供團隊討論
1

為什麼做這個

「All Pain, No Gain」這場比賽辦得很成功,大家玩得很開心。但比賽結束後,那種當場 PK、立刻分勝負的刺激就沒了——因為它需要主辦、需要排賽程、需要一群人到齊。

PK 對戰模式把這份刺激變成隨時都能開的房間。兩三個朋友相約去岩館,當天就能開一場淘汰賽,App 全自動幫你排賽程、計時、記分、判晉級。不用主辦、不用紙筆、不用吵架,爬完當場就知道誰是今天的王。

⚡️

零門檻開賽

一個人開房間,揪到 2 人就能打。不用官方活動。

🔥

當場見真章

限時、不暫停、單場淘汰,每一場都是硬碰硬。

🎥

接上既有錄影

每場攀登自動關聯影片,分數有爭議就調出來看。

🔁

玩得快又夠

6 人約三輪打完,每個人至少都爬到兩場。

2

完整使用情境

以「週六下午,6 個朋友在千手抱石」為例,走一遍從開房到分出冠軍的全程。

/ 房主 Bryan /
1
首頁 → 對戰模式

開一間房

Bryan 點「開房間」,選岩館「千手抱石」,房間出現一組 4 碼代碼與 QR Code。

2
房間 · 設定

設定本場規則

共用計時設 6 分鐘,計分模式選「需控制才得分」。第一版單機——開房的 Bryan 就是裁判,用他這支手機操作。

3
房間 · 路線

標定本場路線

挑出 8 條路線(橘、粉紅、黃…),每條拍張照,用標點工具在照片上依動線點出把手 1、2、3…,設定完攀分數。標好就成為這條線的計分依據。

/ 夥伴們 /
4
加入房間

掃碼進場

另外 5 人掃 QR 或輸入代碼進房,各自確認顯示名稱。湊滿 6 人,房主按「開始」。

5
對戰表

自動排賽程

App 隨機配對,產生對戰表:第一輪 3 場 PK,並指派各場路線。所有人看到自己第幾場、對手是誰。

/ 比賽進行 /
6
PK 計時 · 共用 6 分鐘

抽籤、輪流開爬

App 播放抽籤動畫隨機決定先攻——跑馬燈在兩人名字間輪轉、漸慢,最後停在先攻者,像遊戲一樣。按「開始」啟動 6 分鐘共用倒數,中途不暫停。A 先上,爬到一半掉下來,裁判記下他控制到的最高點,換 B。兩人一人一次來回交替,攀登全程同步錄影。

7
PK 計時 · 倒數中

拚到最後一秒

時間快到,A 目前領先(第 5 點=6 分)。B 最後一次嘗試衝上去——完攀了!直接獲勝。時間到,雙方最高分鎖定。

8
單場結算

當場判勝負

畫面顯示 B 勝、晉級;A 淘汰。兩人的攀登影片都附在這場記錄裡,有疑義可回放。

/ 收尾 /
9
對戰表 · 晉級

一輪輪打上去

3 場打完,3 位勝者晉級;3 位敗者進敗部復活賽(共用 6 分鐘比一個出來)湊成 4 強。接著準決賽、季軍戰、總決賽,每輪換新路線。

10
冠軍結算

分出今天的王

總決賽結束,App 顯示冠軍與最終名次、每場精華影片,可一鍵分享戰報到社群。整場約 40 分鐘。

3

計分規則

以你在路線上到達的最高點計分,分數隨把手點往上遞增:

進度分數
未建立起攀0 分
起攀建立完成2 分
控制到起攀後第 1 個點3 分
控制到下一個點4 分
每多控制一個點+1 分
完攀(Top)該路線最高分
4

單場對戰流程

  1. 每場 PK 指定一條路線,兩位選手共用同一個計時
  2. 共用時間預設 6 分鐘(房間可設 5–6 分鐘)。
  3. 輪流、一人一次嘗試:上去爬,一掉下來(或完攀)就換對手,如此來回交替,直到時間用完。
  4. 計時不暫停——換手、休息、觀察路線,整段都在跑。
  5. 時間到的當下,各自達到的最高分就是該場成績。分數高者勝;若一方完攀、另一方未完攀,完攀者直接獲勝
跟正式比賽一樣:兩人共享一塊時間、一人一次輪流挑戰。每場開賽由 App 抽籤動畫隨機決定先攻,爬越高越好、但掉下來就換人——何時拚、何時穩,是這場的策略。
5

淘汰賽制

兩兩 PK,勝者晉級、敗者淘汰,不跨場累計積分每場換一條新路線——後爬的人看得到前面的 beta,重複用線不公平;6 人賽共 8 場,正好對應岩館備好的 8 條路線。最後有季軍戰總決賽

6 人賽程(建議)

第一輪 · 3 場

A vs B C vs D E vs F

3 位勝者直接晉級 4 強。

敗部復活賽 · 1 場

3 位敗者同場較量

三人共用 6 分鐘輪流挑戰同一條路線,比出 1 位最高分復活,湊成 4 強。

準決賽 · 2 場

4 強(3 勝者 + 1 復活)→ 2 場 PK

季軍戰 + 總決賽

準決賽兩位敗者 → 搶第三名 準決賽兩位勝者 → 爭冠軍

有了敗部復活賽,每個人都至少爬到兩場:第一輪勝者進 4 強再打,第一輪敗者全部進敗部復活賽再拚一次。整場約三輪、節奏明快。

其他人數

人數賽制
4 人準決賽 2 場 → 季軍戰 + 決賽
8 人八強 4 場 → 四強 2 場 → 季軍戰 + 決賽
奇數第一輪抽籤一人輪空(bye)直接晉級
6

畫面流程

核心三個畫面,串起整個對戰體驗:

對戰房間千手抱石
房號 7F2K · 6 人
⏱ 共用 6 分鐘 🧗 8 條路線已標定 👥 Bryan · Amy · Ken … ▶︎ 開始比賽
PK 計時第 1 場
Amy 上場中 · 橘線
02:14 Amy 6 分 · Ken 4 分 + 記錄到達點 ⤵︎ 掉下來 · 換人
對戰表晉級狀態
準決賽
Amy 6 ✓ vs Ken 4 Bryan Top ✓ vs Joe 5 下一場:季軍戰 🏆 冠軍戰待定
沿用 App 既有的錄影影片庫:PK 計時畫面就是錄影畫面的延伸,每場攀登自動存進影片庫並標上對戰標籤。
7

技術整合

沿用既有的 Firebase / Firestore 架構,與現有比賽模式平行。房間資料獨立於官方賽事,建議掛在新的 collection:

pkRooms/{roomCode} hostUid: string gymName: string # 沿用 GymManager status: "lobby" | "active" | "done" settings/ sharedTime: 360 # 秒,兩人共用 scoreMode: "control" # 預設需控制;"touch" 為寬鬆選項 turnRule: "fallToSwap" # 掉下來換人,一人一次 refereeUid: string # 第一版=房主,單機操作 players/{uid} displayName: string # Max 20, 沿用驗證規則 status: "in" | "eliminated" placement: int? routes/{routeId} color, photoURL, topScore holds: [{ order, label, x, y }] # x,y=照片上標點座標 matches/{matchId} round: "r1" | "revival" | "semi" | "third" | "final" routeId, players: [uid] # 復活賽 3 人,故用陣列 firstAttacker: uid # App 抽籤結果 scores: { uid: int }, winnerUid videos: { uid: videoId? } # 關聯影片庫
8

建議開發階段

MVP

單機 · 房主即裁判(目前要做的):一支手機當主機,開房者就是裁判——開房、設規則、用標點工具標路線、自動排賽程、每場開賽抽籤動畫決定先攻、共用計時、裁判點按記分、判勝負與晉級。先驗證玩法好不好玩。

P1

多人連線:QR / 房號加入、Firestore 即時同步對戰表,各自手機看自己的場次與全場進度。

P2

影片整合:PK 攀登自動錄影並關聯,單場可回放、冠軍頁產生精華戰報、一鍵分享。

P3

進階賽制:自訂賽制、歷史戰績與個人對戰勝率、好友排行榜。

9

設計決策(已定案)

經團隊討論拍板,以下規則為第一版實作依據:

  1. 計分判定 — 需穩定控制才得分 已定手確實抓穩下一個點才算數,甩到、碰一下不算。寬鬆的「觸碰即得分」保留為日後可選模式。
  2. 平手判定 — 先比嘗試次數,仍平手才加賽 已定同分時嘗試次數較少者勝;若連嘗試次數都相同,加賽一場 sudden death,先達同高度者勝。
  3. 點位標定 — 房主決定,提供標點工具 已定路線與把手點順序由房主標定;App 需提供好用的「照片標點工具」,在路線照上點選、排序每個把手。
  4. 裁判與記分 — 第一版單機,開房者即裁判 已定先做單機版:開房的人就是裁判,由他這支手機操作計時與記分。多人連線各自記分留待後續版本。
  5. 先攻順序 — App 抽籤動畫隨機決定 已定共用計時下先後攻有差別,每場開賽由 App 播放抽籤動畫隨機決定先攻(取代猜拳),增加遊戲感。
  6. 第一輪敗者 — 敗部復活賽 已定第一輪 3 位敗者進敗部復活賽再拚一個晉級名額(見第 5 節),不另設安慰賽。