区块链应用:NAS星云链DAPP开发之宠物养成游戏

NAS星云链DAPP开发之宠物养成游戏

本文同步自wing的地方酒馆php

上一篇文章中,咱们开发了本身第一个demo级别的DAPP,而且得到了NAS官方的奖励。如今提交随着提交的应用愈来愈多,审核力度也在加大,因此demo级的应用已经很难以经过了。前端

因而和小伙伴一块儿开发一个区块链游戏,来帮助本身更好的学习区块链。android

此次的想法是作一个宠物养成游戏,已经发布的地址以下:鸡神养成记http://inspoy.cc/dapp/pet/,欢迎你们来玩耍~,能够随便点一点,一块儿分得奖池NAS的奖励。git

若是你没有NAS,那么在评论发出你的钱包地址,我会给你转入0.011NAS(足够养鸡并购买双倍积分卡),帮助你来体验区块链和部署本身的合约。

需求

列了一下主要的需求有以下几点:github

  • 宠物拥有饱食度,能够喂养宠物。
  • 宠物拥有心情值,能够陪宠物玩耍。
  • 宠物拥有经验值,经验值满了能够成神。
  • 系统拥有积分系统,玩耍,成神,喂食都会得到必定积分。
  • 宠物若是饱食度太低,则会死亡,死亡扣除积分。
  • 系统拥有排行榜,排行榜根据积分来排行。
  • 系统拥有双倍积分卡,购买双倍积分卡的币会进入奖池,知足必定额度会分给排行榜前十。

原本想作个最简单的宠物养成游戏,没想到需求也这么复杂。。 先来看看最后的成品吧~chrome

哈哈,由于我跟朋友都不是没接触过前端,因此界面比较简单,也比较丑,不要笑~json

需求分析完了,来讲说分工,朋友负责的是前端,由于没有接触过,因此跟上次同样,选择bootstrap+jQuery。合约就是js。bootstrap

使用教程

鉴于可能有小伙伴不太懂怎么使用,这里写一下简单的教程。 首先安装一个chrome的钱包插件: github.com/ChengOrange…数据结构

  • 点击下载zip包,或者clone下来。
  • 打开chrome菜单的更多工具--扩展程序。
  • 打开右上角的开发者模式。
  • 点击加载已解压的差距,将下载的导入。

这个时候你就能够看到插件已经下好了~ 打开是这样的:app

点击新建钱包,保存你的钱包文件和密码。生成的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

相关文章
相关标签/搜索