本文同步自wing的地方酒館php
在上一篇文章中,咱們開發了本身第一個demo級別的DAPP,而且得到了NAS官方的獎勵。如今提交隨着提交的應用愈來愈多,審覈力度也在加大,因此demo級的應用已經很難以經過了。前端
因而和小夥伴一塊兒開發一個區塊鏈遊戲,來幫助本身更好的學習區塊鏈。android
此次的想法是作一個寵物養成遊戲,已經發布的地址以下:雞神養成記http://inspoy.cc/dapp/pet/,歡迎你們來玩耍~,能夠隨便點一點,一塊兒分得獎池NAS的獎勵。git
列了一下主要的需求有以下幾點:github
原本想作個最簡單的寵物養成遊戲,沒想到需求也這麼複雜。。 先來看看最後的成品吧~chrome
哈哈,由於我跟朋友都不是沒接觸過前端,因此界面比較簡單,也比較醜,不要笑~json
需求分析完了,來講說分工,朋友負責的是前端,由於沒有接觸過,因此跟上次同樣,選擇bootstrap+jQuery。合約就是js。bootstrap
鑑於可能有小夥伴不太懂怎麼使用,這裏寫一下簡單的教程。 首先安裝一個chrome的錢包插件: github.com/ChengOrange…數據結構
這個時候你就能夠看到插件已經下好了~ 打開是這樣的:app
點擊新建錢包,保存你的錢包文件和密碼。生成的n1xxxxxx.json 文件名(不帶json)表明你的錢包地址。
這個時候,打開雞神養成記,輸入你的錢包地址,點擊登錄,會彈出這樣的窗口:
點擊生成交易,便可得到一隻你的小雞了~~
有時候提示Nonce必須大於什麼什麼,這種是你手點太快了,關閉這個插件窗口從新點擊登錄便可。
另外登錄須要消耗一些GAS,通常是1000000, 1NAS = 10^18 gas,因此你只須要有0.01個nas就能夠交易不少次。
以後,只須要對寵物進行餵食,玩耍,當分數處於排行榜內,且購買雙倍積分卡的金額大於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/
歡迎加入qq羣一塊兒討論區塊鏈技術: 615075629