本文同步自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