區塊鏈應用:NAS星雲鏈DAPP開發之寵物養成遊戲

本文同步自wing的地方酒館

上一篇文章中,我們開發了自己第一個demo級別的DAPP,並且獲得了NAS官方的獎勵。現在提交隨着提交的應用越來越多,審覈力度也在加大,所以demo級的應用已經很難以通過了。

於是和小夥伴一起開發一個區塊鏈遊戲,來幫助自己更好的學習區塊鏈。

這次的想法是做一個寵物養成遊戲,已經發布的地址如下:雞神養成記http://inspoy.cc/dapp/pet/,歡迎大家來玩耍~,可以隨便點一點,一起分得獎池NAS的獎勵。

如果你沒有NAS,那麼在評論發出你的錢包地址,我會給你轉入0.011NAS(足夠養雞併購買雙倍積分卡),幫助你來體驗區塊鏈和部署自己的合約。

需求

列了一下主要的需求有如下幾點:

  • 寵物擁有飽食度,可以餵養寵物。
  • 寵物擁有心情值,可以陪寵物玩耍。
  • 寵物擁有經驗值,經驗值滿了可以成神。
  • 系統擁有積分系統,玩耍,成神,餵食都會獲得一定積分。
  • 寵物如果飽食度過低,則會死亡,死亡扣除積分。
  • 系統擁有排行榜,排行榜根據積分來排行。
  • 系統擁有雙倍積分卡,購買雙倍積分卡的幣會進入獎池,滿足一定額度會分給排行榜前十。

本來想做個最簡單的寵物養成遊戲,沒想到需求也這麼複雜。。 先來看看最後的成品吧~

哈哈,因爲我跟朋友都不是沒接觸過前端,所以界面比較簡單,也比較醜,不要笑~

需求分析完了,來說說分工,朋友負責的是前端,因爲沒有接觸過,所以跟上次一樣,選擇bootstrap+jQuery。合約就是js。

使用教程

鑑於可能有小夥伴不太懂怎麼使用,這裏寫一下簡單的教程。
首先安裝一個chrome的錢包插件:
https://github.com/ChengOrangeJu/WebExtensionWallet

  • 點擊下載zip包,或者clone下來。
  • 打開chrome菜單的更多工具–擴展程序。
  • 打開右上角的開發者模式。
  • 點擊加載已解壓的差距,將下載的導入。

這個時候你就可以看到插件已經下好了~
打開是這樣的:

點擊新建錢包,保存你的錢包文件和密碼。生成的n1xxxxxx.json 文件名(不帶json)代表你的錢包地址。

這個時候,打開雞神養成記,輸入你的錢包地址,點擊登陸,會彈出這樣的窗口:

點擊生成交易,即可獲得一隻你的小雞了~~

有時候提示Nonce必須大於什麼什麼,這種是你手點太快了,關閉這個插件窗口重新點擊登陸即可。

另外登陸需要消耗一些GAS,一般是1000000, 1NAS = 10^18 gas,所以你只需要有0.01個nas就可以交易很多次。

如果你沒有NAS,那麼在評論發出你的錢包地址,我會給你轉入0.011NAS(足夠養雞併購買雙倍積分卡),幫助你來體驗區塊鏈和部署自己的合約。

之後,只需要對寵物進行餵食,玩耍,當分數處於排行榜內,且購買雙倍積分卡的金額大於0.5NAS的時候,則會向排行榜分發這些NAS哦~~

實現

數據結構

首先思考怎麼存儲數據,這裏因爲NAS本身提供map類型的存儲,所以定義一個map類型存儲空間,用來存儲遊戲數據,key是用戶地址,value是自定義類型的遊戲數據。

下面思考遊戲數據都包含什麼東西,因爲寵物有心情、飽食度、經驗等屬性,所以這些不可少。另外玩耍和餵食都要做出時間限制,防止無限餵食,所以應該包含上次餵食和玩耍時間。包括分數、成神數、雙倍時間數、等等信息:

數據結構定義好了。接下來完成各種行爲。

查詢數據

首先肯定是領養一隻寵物,在區塊鏈中讀取有沒有遊戲數據,如果沒有遊戲數據,則生成一個數據:

這裏有一些問題就是我目前不知道如何定時執行代碼,所以我只能在查詢寵物信息的時候,弄一個登陸狀態,來在查詢中儲存遊戲數據(比如飽食度每分鐘會下降),所以第一次查詢的時候,消耗gas,就會有一種飽食度事實在下降的效果,實際上是用戶登陸的時候,動態根據時間計算的。這裏先完成飽食度下降的計算,如果下降超過一定額度,則小雞死亡:

其次更新一下游戲狀態,也就是存儲數據,並且每天12點會重置心情值:

關於saveGameData方法,其實就是將遊戲數據存儲在map類型裏:

行爲

玩耍

接下來,需要完成一系列行爲,首先是玩耍。
玩耍主要有幾點,第一點是玩耍的間隔判斷,所以這裏根據玩耍間隔和上次玩耍時間來計算。
另外如果處於雙倍積分卡內,則獲得的積分將會*2,心情的最大值爲1.

心情每次增長有一定比例。

投食

投食和玩耍差不多,主要區別在於餵食的時候,小雞可以成神,這裏判斷一下經驗值即可:

購買雙倍積分卡

這裏雙倍積分卡其實也是一個時間屬性,用戶付費以後,增加對應時間即可。需要注意的是,需要判斷一下用戶的支付數量,如果不對則拒絕交易。另外在合約內部無法得知合約現在的餘額,所以我們需要自己額外維護。這裏NAS官方使用的BigNumber庫來計算大數。

每次接收到付費的時候判斷獎池餘額是否大於0.5NAS,如果大於,則向前十分錢,並且清空排行榜數據。

獲取排行榜數據

這裏有一個特別的地方就是,因爲官方map不提供遍歷的功能。所以只能另外寸一個map,來存放index對應的用戶地址,需要遍歷的時候,先從地址map裏面獲取地址,再從數據map裏面取出來數據:

這樣完整的合約代碼就完成了(吐槽一句,真的不好調試,有一點點小修改就需要重新部署~)

接下來是前端部分

前端部分其實核心就是根據sdk來調用區塊的數據。
首先封裝兩個方法,一個是需要支付的,寫入數據函數。一個是不需要支付的查詢數據函數:

頁面初始化的時候,對ui進行顯隱控制,並且只查詢遊戲在線人數:

登陸

點擊登陸按鈕,查詢寵物信息數據,並且登陸完成後,向合約輪訓來事實刷新遊戲數據:

投食&&玩耍

點擊對應的按鈕,進行對應的接口調用。

投食按鈕:

玩耍按鈕:

購買雙倍積分卡:

這樣,基本的操作界面已經有了:
這裏有基本的玩耍介紹:

本文也就到此結束啦~ 人生中第二個DAPP完成了。

如果你覺得對你有幫助,可以點贊,分享~

並且十分建議你來玩《雞神養成記》,可以獲得NAS哦~ 是兄弟,就來砍我吧~
雞神養成記地址:http://inspoy.cc/dapp/pet/

如果你沒有NAS,那麼在評論發出你的錢包地址,我會給你轉入0.011NAS(足夠養雞併購買雙倍積分卡),幫助你來體驗區塊鏈和部署自己的合約。

歡迎加入qq羣一起討論區塊鏈技術:
615075629

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章