來做一個日系卡牌手遊吧!

Ruby

IB502

08/12 14:50 - 15:30

漢語 / Mandarin Chinese

Beginner / 入門

有在打手遊的各位

很簡單的原理(30min)

如果你是一個網站開發者,其實已經掌握了必要的條件。日系的卡牌手遊跟過去我們熟悉的線上遊戲不太一樣的地方,主要是在於不需要保持連線,以及玩家的即時互動。

所以,開發一個日系卡牌手遊主要就會落在兩個重點上。

  • API 伺服器
  • 遊戲端的表演

使用 Ruby on Rails 來開發手遊是一個不錯的選擇,必要的功能都已經具備,只需要透過實作將想要設計的手遊製作出來。

接下來我們會實作手遊的登入、抽卡跟任務關卡。

搭建 OAuth 伺服器(60min)

如果有 App 開發經驗的話,可能會知道使用 OAuth 算是一個不錯的選擇。而常被跟 Unity3D 搭配來開發一些簡易的手遊伺服端功能的 FireBase 服務,也是採用 OAuth 的方式。

所以,我們要先使用 Ruby on Rails 的 OAuth 伺服器套件 Doorkeeper 設定一個提供給手遊玩家的 OAuth 伺服器,讓玩家可以將手機跟帳號連結起來。不過大多數時候,手遊的 OAuth 伺服器其實是有特殊修改過的,因為相較於一般網站使用帳號密碼登入,手遊大多會直接幫玩家生成帳號後,再透過紀錄手機的 UUID 來綁定帳號。

也就是說,登入流程會變成:

  • (第一次)生成帳號,回傳帳號跟密碼(引繼碼)
  • 透過帳號跟 UUID 產生 Access Token
  • 使用 Access Token 在這次的遊戲中進行

以上只是給出一種情況,實際上還有很多細節或者不同的方式可以採用。

完成上述的機制之後,客戶端只需要負責安全的保存帳號、密碼跟 Access Token 就可以正常的運行。

實作:

  • OAuth2 伺服器搭建 / 管理
  • Unity3D 實作登入遊戲

設計抽卡 API (60min)

身為一個卡牌遊戲,怎麼能少掉抽卡呢!當我們可以順利登入遊戲後,最重要的就是讓玩家可以課金抽卡。不過串接 IAP 之類的事情會花上不少時間,所以我們就先專注在抽卡上吧!

為了確保遊戲的公平性,所以我們要將所有的抽卡過程都在伺服器上實作,玩家只能發出「抽卡」的要求,然後伺服器回應一個「結果」到玩家端身上。

不過跟網頁伺服器不一樣的事,我們不可能每次都將遊戲美術都下載一次。所以我們需要在遊戲開始前先做好素材檔案的打包,在玩家開始遊戲的時候預先的下載好卡片圖檔,而伺服器只需要回應對應的圖片路徑即可。

實作:

  • 卡池、抽卡
  • Unity3D 選擇卡池跟顯示抽卡結果
  • 素材包概念(AssetBundle)

設計任務 API (60min)

跟抽卡差不多,只是實作另一種變化型跟示範簡易的防作弊(拒絕同時進行多個任務)

總結(30min)

到此為止,我們已經對如何設計一個卡牌遊戲有粗略地理解。不過在手遊開發上還是有不少地方需要注意,像是玩家大量增加後該如何透過 Sharding 的技巧改善遊戲可容納的玩家數量。跟一般網站不同的是玩家的操作都會造成寫入,要如何盡可能的有效設計 API 跟機制來減少伺服器的消耗,都會是之後需要考慮的課題。


Collaborative notes on HackMD

蒼時弦也

棲息在五倍紅寶石出礦坑的工程師,專長是挖坑。平常都在做網站或者奇怪的遊戲。

Titanium Sponsor

Co-Host Sponsor

Diamond Sponsor

Gold Sponsor

Silver Sponsor

Bronze Sponsor

Partner

Co-Organizer

Special Thanks