區塊鏈應用:NAS星雲鏈DAPP開發之寵物養成遊戲
在上一篇文章中,我們開發了自己第一個demo級別的DAPP,並且獲得了NAS官方的獎勵。現在提交隨著提交的應用越來越多,稽核力度也在加大,所以demo級的應用已經很難以通過了。
於是和小夥伴一起開發一個區塊鏈遊戲,來幫助自己更好的學習區塊鏈。
這次的想法是做一個寵物養成遊戲,已經發布的地址如下:雞神養成記http://inspoy.cc/dapp/pet/,歡迎大家來玩耍~,可以隨便點一點,一起分得獎池NAS的獎勵。
如果你沒有NAS,那麼在評論發出你的錢包地址,我會給你轉入0.011NAS(足夠養雞併購買雙倍積分卡),幫助你來體驗區塊鏈和部署自己的合約。
需求
列了一下主要的需求有如下幾點:
- 寵物擁有飽食度,可以餵養寵物。
- 寵物擁有心情值,可以陪寵物玩耍。
- 寵物擁有經驗值,經驗值滿了可以成神。
- 系統擁有積分系統,玩耍,成神,餵食都會獲得一定積分。
- 寵物如果飽食度過低,則會死亡,死亡扣除積分。
- 系統擁有排行榜,排行榜根據積分來排行。
- 系統擁有雙倍積分卡,購買雙倍積分卡的幣會進入獎池,滿足一定額度會分給排行榜前十。
本來想做個最簡單的寵物養成遊戲,沒想到需求也這麼複雜。。 先來看看最後的成品吧~
哈哈,因為我跟朋友都不是沒接觸過前端,所以介面比較簡單,也比較醜,不要笑~
需求分析完了,來說說分工,朋友負責的是前端,因為沒有接觸過,所以跟上次一樣,選擇bootstrap+jQuery。合約就是js。
使用教程
- 點選下載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,那麼在評論發出你的錢包地址,我會給你轉入0.011NAS(足夠養雞併購買雙倍積分卡),幫助你來體驗區塊鏈和部署自己的合約。
歡迎加入qq群一起討論區塊鏈技術:
615075629