Dapp的PVP发模式--magic-maze-2d游戏解读
前言:
未来基于Dapp的游戏可能会多起来吧, 尤其是博彩类游戏, 由于区块链匿名特性, 加之数字货币不受国家监控, 几乎成了一个法外之地. 大量游戏团队都往之涌入.
今天讲讲当前Dapp的一种游戏模式--pvp, 结合一个github上的开源项目magic-maze-2d来解读.
简介:
代码是从github上搜索到的, 它是基于波场(公链)来发布合约的.
具体的github地址magic-maze-2d, 我这边权当搬运工了, 我觉得代码写的很好, 非常地敬佩作者.

设计思想:
pvp模式, 转变了之前人和平台博弈的局面, 转为人和人之间的博弈, 平台只作为组织者而存在. 这样游戏服务商可以承包大部分的业务逻辑, 而涉及数字货币的交易则由智能合约来管理. 公开透明, 玩家都能接受.
继续借用作者的流程图:

其合约的核心代码如下所示:
contract MagicMaze {
// 用于创建房间(带着游戏房间信息的hash), 设定奖励规则
function create(uint256 id, string memory name, string memory mazeHash) public payable {
require(msg.value >= SERVICE_FEE);
require(mazes[id].bonus == 0);
bytes32 hash = stringToBytes32(mazeHash);
mazes[id] = Maze(id, name, hash, msg.value, msg.sender, address(0), address(0));
emit mazeCreated(id);
}
// 新玩家进行挑战注册
function challenge(uint256 id) public payable {
require(mazes[id].bonus != 0);
require(mazes[id].challenger == address(0));
require(mazes[id].bonus == msg.value);
mazes[id].challenger = msg.sender;
mazes[id].bonus += msg.value;
}
// 胜利者获取奖励(带着房间信息, 可生成hash, 用于验证)
function takeBonus(uint256 id, string memory mazeInfo) public payable {
require(mazes[id].bonus != 0);
require(mazes[id].winner == address(0));
require(mazes[id].creator == msg.sender || mazes[id].challenger == msg.sender);
require(msg.value >= SERVICE_FEE);
bytes32 mazeHash = sha256(abi.encodePacked(mazeInfo));
if (mazeHash == mazes[id].mazeHash) {
mazes[id].winner = msg.sender;
msg.sender.transfer(mazes[id].bonus);
emit winner(id, msg.sender);
} else {
emit falseClaim(id, msg.sender);
}
serviceCharge += msg.value;
}
}
简单来说, 可以归纳如下:
1. 玩家调用服务端创建房间, 后端根据房间信息+秘钥(MazeInfo), 生成hash, 返回给玩家.
2. 玩家带着房间信息 + hash, 去智能合约创建房间(create).
3. 有另外一个玩家来挑战, 先在智能合约中注册为该房间的挑战者(challenge), 然后和服务端交互确认, 如果胜利, 服务端下发房间信息和秘钥(MazeInfo)
4. 赢家可以根据这个MazeInfo去合约中获取奖金(takeBonus).
在整个流程中, 服务端都没有参与合约里奖池建立和提取, 而服务端相当于公平的裁判者.
总结:
这种pvp的模式, 平台不参与博弈, 只收取服务费. 而且挑战双方, 不需要同时在线, 可玩性极强, 感觉会流行一波, 不过PVP模式的游戏, 也是一个潜在的缺点, 就是有些不良平台会搞托(机器人), 这样即做裁判员, 又做运动员, 轻松赢得奖池.
我还是相信大浪淘沙后, 最终会留下几款体验超好, 又值得信赖的精品.
Dapp的PVP发模式--magic-maze-2d游戏解读的更多相关文章
- cf413E Maze 2D
E. Maze 2D time limit per test 2 seconds memory limit per test 256 megabytes input standard input ou ...
- unity3d 2d游戏制作的模式
经过了4个月不懈的努力,我和图灵教育合作的这本3D游戏开发书预计下个月就要出版了.这里MOMO先打一下广告,图灵的出版社编辑成员都非常给力,尤其是编辑小花为这本书付出了很大的努力,还有杨海玲老师, ...
- WEBGL 2D游戏引擎研发系列 第一章 <新的开始>
WEBGL 2D游戏引擎研发系列 第一章 <新的开始> ~\(≥▽≤)/~HTML5游戏开发者社区(群号:326492427) 转载请注明出处:http://html5gamedev.or ...
- Unity 3D制作2D游戏的几种方法
1.使用本身UGUI. 2.把摄像机的投影改为正交投影,不考虑Z轴. 3.使用Untiy自身的2D模式. 4.使用2D TooKit插件.
- unity 之2D游戏简单操作
unity 做2D项目也很方便. 首先要调整camera的模式,camera 的检视面板参数如下: perspective 模式就是平时用的 模式.摄像机到游戏物体是有角度的张开, 而 orthog ...
- 2D游戏与3D游戏的区别 原文:https://zhidao.baidu.com/question/588490865.html
2D和3D间有哪些不同点呢? 让我们来比较一下,共同找出它俩之间的不同点. 对玩家来说,2D技术和3D技术只是显示数据的方式而已,玩家都是通过二 维的平面显示器来观看它们.对制作者来说,二者的不同之处 ...
- Unity3d Platformer Pro 2D游戏开发框架使用教程
前言 Platformer Pro框架是Unity3d AssetStore上一个非常强大和受欢迎的2d游戏开发框架,这个教程的大部分翻译于官方文档,一部分是工作总结,还有一部分是视频教程文档化.这个 ...
- 海外开发者推荐:10个顶级2D游戏资源站
转自:http://www.gamelook.com.cn/2015/12/239038 Gamelook报道/随着手游市场的持续增长,HTML5的发展以及大型发行商的支持,2D游戏的数量变得越来越多 ...
- UWP简单示例(三):快速开发2D游戏引擎
准备 IDE:VisualStudio 2015 Language:VB.NET/C# 图形API:Win2D MSDN教程:UWP游戏开发 游戏开发涉及哪些技术? 游戏开发是一门复杂的艺术,编码方面 ...
随机推荐
- jquery实现下拉加载更多
下拉加载更多这种原理很容易想明白,但是不自己写一个简单的,老是不踏实,获取什么高度再哪里获取之类的.于是自己简单写了个,就是页面上有几个div,然后当滚动条拉到某个位置的时候,再继续加载div.顺便又 ...
- maven加载springboot project
maven加载springboot project 1● 下载项目 2● 构建project mvn install mvn package 3● idea加载 4● run启动 ==== ...
- PHP生成小程序二维码合成图片生成文字
这部分代码是写在项目上的代码,THINKPHP3.1如果迁移到其他的地方应该要稍稍改动一下以适合自己的项目 function get_bbox($text,$fsize,$ffile){ return ...
- PDF 补丁丁 0.6.0.3369 版发布(修复保存文件时文件名替代符失效的问题)
新的测试版修复之前测试版本在保存文件时文件名替代符失效的问题
- 总结const、readonly、static三者的区别
const:静态常量,也称编译时常量(compile-time constants),属于类型级,通过类名直接访问,被所有对象共享! a.叫编译时常量的原因是它编译时会将其替换为所对应的值: b.静态 ...
- XenServer 自动化布署 (关键词: PXE ANSWER SCRIPT)
XenServer 6.x PXE自动化布署: 测试环境:win10 + Tiny pxe server 1.0.2,采用gpxelinux.0 时间:2017.1.10 PXE远程安装: 1)def ...
- styled-components 背后的魔法
styled-components 定义组件的风格为 const Button = styled.button` background-color: papayawhip; border-radius ...
- 二、 编写一个类,用两个栈实现队列,支持队列的基本操作(add,poll,peek)
请指教交流! package com.it.hxs.c01; import java.util.Stack; /* 编写一个类,用两个栈实现队列,支持队列的基本操作(add,poll,peek) */ ...
- Linux快捷键 Linux权限
第1章 回顾昨天内容 1.1 取出网卡ip地址 取出文件权限 1.2 awk '找谁{干啥}' awk 'NR==2{print $4}' 1.3 系统时间 [root@oldboyedu-40-n ...
- AVR 嵌入式单片机芯片的中断系统介绍
body, table{font-family: 微软雅黑; font-size: 13.5pt} table{border-collapse: collapse; border: solid gra ...