如何用 Google Apps Script 製作跨瀏覽器個別登入的「玩數學99遊戲」?
在本篇文章中,我們將示範如何運用 Google Apps Script,設計一個多人共用狀態的遊戲系統,讓玩家分別以個別身份登入,並能在不同瀏覽器中即時同步遊戲狀態。這個範例以經典的「玩數學99遊戲」為例,實作重點包含以下功能:
- 個別身份登入:玩家可從不同瀏覽器中選擇自己要扮演的角色(玩家1或玩家2),避免重複登入同一角色。
- 共用遊戲狀態管理:所有玩家共用同一遊戲狀態,利用 Google Apps Script 的 PropertiesService 進行儲存與更新。
- 即時輪詢同步:透過前端定時輪詢(polling)的方式,讓不同瀏覽器的遊戲畫面保持最新狀態。
- 回合出招檢查:只有輪到自己的玩家才可以進行數字出招,並檢查輸入合法性及是否獲勝。
本文將分為兩大部分說明:
- 伺服端程式(Code.gs)
- 前端頁面(Index.html)
一、伺服端程式設計 (Code.gs)
在伺服端部分,我們主要負責管理遊戲的共用狀態。利用 PropertiesService 儲存 JSON 格式的遊戲狀態,並提供以下函式:
-
loginAsRole(playerName, role)
玩家依據自己選擇的角色進行登入,若該角色尚未被佔用,則將玩家姓名寫入遊戲狀態。 -
getGameState() 與 saveGameState(state)
用來讀取與儲存目前的遊戲狀態,確保所有玩家都能存取同一份資料。 -
processMoveShared(playerRole, moveValue)
檢查傳入的玩家身份是否符合目前回合,並驗證數字輸入後更新遊戲狀態(包含累加總和、切換回合或設定獲勝者)。
以下是完整程式碼範例:
重點提示:
此範例以 PropertiesService 儲存遊戲狀態,適合用於小型多人遊戲。但若未來遊戲玩家數量增加或需支援更多房間,可考慮採用 Google Spreadsheet 或其他資料庫進行狀態管理。
二、前端頁面設計 (Index.html)
前端部分主要負責呈現使用者介面與即時更新的機制。主要功能包含:
-
個別登入表單
玩家選擇身份(玩家1 或 玩家2)並輸入姓名,系統透過loginAsRole將資訊傳到伺服端。 -
遊戲狀態顯示
顯示目前累加總和、輪到哪位玩家以及已登入的玩家資訊。 -
出招輸入與回合控制
當輪到自己的回合時,啟用數字輸入與出招按鈕;若非己方回合則停用,並顯示等待訊息。 -
定時輪詢同步
使用setInterval每隔數秒呼叫伺服端取得最新狀態,讓所有玩家的畫面即時更新。
完整的前端程式碼如下:
小提醒:
前端透過setInterval每三秒呼叫一次getGameState(),以確保各瀏覽器畫面能即時反映最新狀態。根據需求,您也可以調整輪詢頻率或考慮其他即時同步技術。
三、功能測試與後續發展
完成程式碼後,您可以在 Google Apps Script 編輯器中:
- 建立兩個檔案:
Code.gs與Index.html,並貼上上述程式碼。 - 透過「發佈」>「部屬為網路應用程式」,設定權限並取得公開 URL。
- 利用不同瀏覽器或隱私視窗,同時以不同身份(玩家1 與 玩家2)登入,進行遊戲操作。
後續擴充方向:
- 增加更多房間功能,讓多組玩家可同時進行遊戲。
- 採用更即時的同步技術(例如 WebSocket 或 Firebase)改善輪詢方式帶來的延遲。
- 加入更完善的驗證機制,確保玩家身份安全與遊戲記錄保存。
結論
透過這篇教學,我們學會如何運用 Google Apps Script 進行多人共用狀態的管理與即時同步,實作出可跨瀏覽器個別登入的「玩數學99遊戲」。這個範例不僅展現了基本的多人遊戲架構,也提供了後續擴充的方向。希望本篇文章能幫助您更進一步了解 Google Apps Script 的應用,也鼓勵您發揮創意設計更多有趣的互動系統!