從 0 到 1,打造自己的遊戲後端服務
  • 簡介
  • 基礎服務
    • 架構介紹
    • Data 服務
    • API 服務
      • 在 Parse 服務架構簡易的 Cloud Code 部署機制
    • Notification 服務
      • Parse 推送服務設定與測試
    • Job 服務
      • 在 Parse 上透過 Cron 配置常用的 Scheduler
    • Email 服務
    • SMS 服務
    • Hosting 服務
    • Realtime 服務
      • Parse Live Query 設定
    • Information 服務
      • Parse Config 與 Firebase Remote Config 服務介紹
      • Connectivity 取得與監聽
      • Time 服務介紹與實作方法
      • IP 資料庫能獲得什麼資料
  • 遊戲服務
    • Achievement 成就系統
      • 設計簡易的成就系統 - 透過 Parse
    • Leaderboard 排行榜系統
      • 設計簡易的公開排行榜系統 - 透過 Parse
    • Pairing 配對系統
      • 設計簡易的 Dispatcherless 自動配對機制 - 透過 Firebase Realtime Database
    • Turn-based Multiplayer 回合制多人遊戲
      • 簡易的回合制多人遊戲系統 - 透過 Parse
    • Real-time Multiplayer 即時多人遊戲
      • 設計簡易的即時多人遊戲傳輸通道 - 透過 Firebase Realtime Database
  • 附錄 Self-Hosted Parse
    • Parse 服務架設
    • 建立 Parse 資料庫服務
    • 建立 Parse 服務
Powered by GitBook
On this page
  1. 遊戲服務
  2. Turn-based Multiplayer 回合制多人遊戲

簡易的回合制多人遊戲系統 - 透過 Parse

TurnBasedGame 資料表設計

欄位

類型

解釋

範例

objectId

String

遊戲 ID,供辨識使用

${GAME ID}

Participants

Array

玩家清單

[${USER ID},...]

CurrentPlayer

String

當前回合玩家

${USER ID}

NextDeadline

Number

當前回合玩家的期限

${UNIX TIMESTAMP}

GameData

Object

遊戲資料

${GAME DATA}

GameStatus

String

遊戲狀態

Active Finish...

  • 配對系統 建立遊戲資料表

curl -X POST \
-H "X-Parse-Application-Id: ${APPLICATION_ID}" \
-H "X-Parse-REST-API-Key: ${REST_API_KEY}" \
-H "Content-Type: application/json" \
-d '{"Participants":[${USER_OBJ_A}...],"CurrentPlayer": ${USER_ID_A},"NextDeadline":${TIMESTAMP},"GameData":${DATA_OBJ},"GameStatus":"Active"}' \
https://YOUR.PARSE-SERVER.HERE/parse/classes/TurnBasedGame
  • 透過 Cloud Code 系統推送 換手 通知給特定玩家

可在 Installation 與 User 中互相綁定資料,用來作 Target Segmentation

var query = new Parse.Query(Parse.Installation)
query.equalTo('user', {'__type': 'Pointer', 'className': 'User', 'objectId': ${USER ID}})
Parse.Push.send({
  where: query,
  data: {
    alert: 'TURN'
  }
}, { useMasterKey: true }).then(
  function () {
    response.success()
  },
  function (error) {
    response.error(error)
  }
)
  • 任意玩家可隨時取得最新 遊戲資料表

curl -X GET \
  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
  -H "X-Parse-REST-API-Key: ${REST_API_KEY}" \
  -G \
  --data-urlencode 'where={"objectId": ${GAME ID}}' \
  https://YOUR.PARSE-SERVER.HERE/parse/classes/TurnBasedGame
  • 當局玩家進行該局遊戲,遊戲換手

curl -X PUT \
  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
  -H "X-Parse-REST-API-Key: ${REST_API_KEY}" \
  -H "Content-Type: application/json" \
  -d '{"GameData":${GAME DATA},"CurrentPlayer": ${USER_ID_NEXT},"NextDeadline":${TIMESTAMP_NEXT}}' \
  https://YOUR.PARSE-SERVER.HERE/parse/classes/TurnBasedGame/${GAME ID}
  • 當局玩家進行該局遊戲,賽局完成

curl -X PUT \
  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
  -H "X-Parse-REST-API-Key: ${REST_API_KEY}" \
  -H "Content-Type: application/json" \
  -d '{"GameData":${GAME DATA},"GameStatus": "Finish"}' \
  https://YOUR.PARSE-SERVER.HERE/parse/classes/TurnBasedGame/${GAME ID}
  • 當局玩家完成遊戲後更新後,由 Cloud Code 監聽 afterSave 送出 換手 或是 完成遊戲 通知

Parse.Cloud.afterSave("TurnBasedGame", function (request) {
  if (request.object.get("GameStatus") === "Active"){
    // 發送通知:換手
  } else if (request.object.get("GameStatus") === "Finish"){
    // 發送通知:完成遊戲
  }
})
PreviousTurn-based Multiplayer 回合制多人遊戲NextReal-time Multiplayer 即時多人遊戲

Last updated 6 years ago