# Travel_Monkey_WebApp
**Repository Path**: kingvern/Travel_Monkey_WebApp
## Basic Information
- **Project Name**: Travel_Monkey_WebApp
- **Description**: No description available
- **Primary Language**: JavaScript
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2021-03-23
- **Last Updated**: 2021-03-23
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# Travel_Monkey_WebApp开发文档
## Travel_Monkey介绍
* 游戏简介
**TravelMonkey**(旅行猴),是一款基于```Nervos```的```Cita链```开发的一款纯手绘区块链佛性游戏,travel monkey也是游戏的主人公,一只喜欢旅行的猴子,调皮的小猴子就像家长们的孩子一样,喜欢偷偷背着主人做事,喜欢发脾气甚至离家出走,为了让自己的孩子开心,玩家可以买各种东西讨好自己的宠物。小猴子怕主人担心,在旅途中也会给主人寄回来明信片,小猴子在旅途中会认识各种各样的好朋友,也有可能会带回家里面做客,下面我们看下具体玩法。
* Nervos Cita简介
**Nervos Cita** CITA( Cryptape Inter-enterprise Trust Automation )是一个面向企业级应用的支持智能合约的区块链框架, 旨在为企业级区块链应用提供一个稳固、高效、灵活、可适应未来的运行平台。CITA 将区块链节点的必要功能解耦为六个微服务:RPC,Auth,Consensus,Chain,Executor,Network。各组件之间通过消息总线交换信息相互协作。通过配置和定制相应的服务,CITA 能够满足企业级用户的全部需要。
> 注意: 该文档针对对区块链有一定了解的开发者,且对智能合约有一定了解
* Cyton 简介
**Cyton** Cyton是一个开源区块链钱包,支持以太坊和CITA。它支持以太网和CITA的大多数令牌,如ETH,ERC20,ERC721,还支持以太网和CITA的大多数DApp,如cryptokitties,Fomo3D等
* 游戏体验地址: http://139.159.241.50:3000 (ps. PC上无法运行,该版本专门为移动端设计,后面有具体的打开方法)
## 运行环境
* MacOs 10.14
* Node 10.10.0
* Npm 6.4.1
* Vim 8.0
* Android 8.0
## 安装
* [node安装](https://nodejs.org/en/download/)
* [npm安装](https://www.npmjs.com/)
* [Cyton安装](https://github.com/cryptape/cyton-android/releases/download/0.7.1/cyton_v0.7.1.190121_cryptape.apk)
> ps. 钱包[项目地址](https://github.com/cryptape/cyton-android/releases) 目前只支持安装
## Nervos Cita上部署合约
* 在运行该项目前 我们先了解下怎么在Nervos的Cita中部署合约, 该demo中所有内容都配置好了,
如果只是想运行的用户可以直接跳到运行。
* 首先把自己写好的```sol```文件,在[Remix](https://remix.ethereum.org/)上调试好,拿到自己的
```abi```和```bytecode```
* 首先进入```contracts```目录, 我们看到有五个文件
```bash
$ cd Travel_Monkey_WebApp_WebApp/src/contracts
├── compiled.js
├── deploy.js
├── CoreContract.sol
├── transaction.js
└── chain.js
```
* 我们将之前得到的abi和byte_code填入compiled.js文件中,然后exports出来:
```js
module.exports = {
abi,
bytecode
}
```
* 最后执行```deploy.js```文件完成部署:
```bash
$ node deploy.js
```
## Nervos Cita上自定义配置
* 之后我们在```Travel_Monkey_WebApp/src/config.js```文件中修改自己的配置信息以及
使用哪条公链的信息,这里使用的是```http://121.196.200.225:1337```
```js
const config = {
chain: 'https://node.cryptape.com',
contractAddress: '0x9Cf7a2062AE3b87036cF04FE9555d4e4ddCed5ca',
apiAddress:'http://139.159.241.50:8888',
privateKey: '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee',
pc_media: "(min-width:31em)",
}
```
* 所有需要自己配置的大部分就是这些,demo中都已经配置了一套,
有兴趣可以自己试着配一套
## 运行
* 对钱包熟悉的朋友可以用cyton钱包访问 http://139.159.241.50:3000
* 项目克隆到本地
```bash
$ git clone https://github.com/MrPaoBrother/Travel_Monkey_WebApp.git
$ cd Travel_Monkey_WebApp
```
* 安装相关依赖
```bash
$ npm i
```
> 安装完成之后,项目根目录下会看到多出了```node_modules```文件.
* 项目运行
```bash
$ npm run start
Starting the development server...
```
> 可能会看到一堆的warning, 没关系, 只要没有Error就行, 有一些是对依赖库版本的警告
* 打开Cyton钱包,进入如下界面:
* 最后打开钱包中的浏览器运行 ```http://localhost:3000/``` 或者 图片中提到的体验地址: ```http://139.159.241.50:3000```
ps.保证手机和电脑在同一个局域网中
## 项目说明
### 前端部分
* 前端基于React,Redux框架,通过媒体查询自适应手机端
### 文件结构
* ./node_modules 文件夹下是运行所需要的第三方库
* ./public 文件夹下是前端引用的静态文件
* ./readme_images 是程序的部分截图
* ./src 文件夹下是核心代码
* ./src/components 下是网页中用到的组件
* ./src/containers 下是网站的各个页面,目前我们是单页的,所以只有一个Home文件夹
* ./src/contracts 下是合约相关的文件
* ./src/images 下是网站本地的图片
* ./src/store 下是redux相关的文件,下一个版本将引入redux和redux saga,这个版本暂时没用到
* ./src/config.js 合约的配置文件,包括用的链的地址,用户私钥,用户地址,合约地址,后台服务器的地址
### 合约相关的函数
* ./src/contracts/chain.js 中引用了大部分的合约函数,多数函数名和合约上的函数名一致
* getMonkeycount() 是从合约上获取当前猴子数量的函数
* checkFirst() 是从合约上获取当前用户是否拥有猴子的函数
* getBananacount() 是用户从合约上获取香蕉树上可供收割香蕉数量(游戏中的积分)的函数
* getMonkey() 是用户从合约上获取自己的猴子的详细信息的函数
* getowner2picture() 是用户从合约上获取自己猴子的照片墙上照片的ID的数组的函数
* getPicture() 是用户从合约上获取ID对应的照片的详细信息的函数
* getowner2product() 是用户从合约上获取自己猴子的背包里物品的ID的数组的函数
* getProductlength() 是从合约上获取当前商城所有商品数量的函数
* getProduct() 是用户从合约上获取ID对应的物品的详细信息的函数
* freeMonkey() 是用户在没有猴子时从合约上获取一只新猴子的函数
* addBanana() 是用户从合约上充值香蕉的函数
* getBananaFromTree() 是在合约中从香蕉树上收获香蕉的函数
* buyProduct() 是用户从合约上购买商品的函数
* checkWalkout() 是从合约上允许猴子出去旅行的函数
* backHome() 是用户让猴子回家的函数
### 后台服务器相关的函数(暂不开源)
* story_happen() 是从服务器发送跟踪猴子旅行故事请求的函数
* get_monkey_status() 是从服务器中发送返回猴子旅行状态的函数
* go_home() 新版本为了更好的和用户进行交互,新增强制让猴子回家功能
## 相关优化
### 功能方面
* 新增呼唤猴子回家功能
* 修改猴子出去要和主人打招呼功能
* 新增新场景和朋友
### 技术优化
* 图片渲染速度提升50%
* 链数据不稳定,新增降级方案
* 部分图片重新设计优化
* 重构旅行途中地图功能代码
## 效果展示
* 登录时会显示当前已经存在的猴子数量
* 领取猴子
* 游戏商城,点击物品直接购买
* 玩家的背包
* 购买前的猴子
* 购买后猴子穿上了衣服
* 香蕉树上有香蕉时,可以点击香蕉收割
* 可以通过充值获取更多香蕉
* 小猴子想旅行了,支付一点旅费
* 小猴子出去了,房间空无一人
* 小猴子想回家了/呼唤猴子回家
* 小猴子旅行时寄回来的照片
* 小猴子在用电脑看什么
## 参考资料
[1] [Nervos Cita 文档](https://github.com/cryptape/cita)
[2] [Nervos Cyton 钱包](https://github.com/cryptape/cyton-android)