前言:
  未来基于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游戏解读的更多相关文章

  1. cf413E Maze 2D

    E. Maze 2D time limit per test 2 seconds memory limit per test 256 megabytes input standard input ou ...

  2. unity3d 2d游戏制作的模式

      经过了4个月不懈的努力,我和图灵教育合作的这本3D游戏开发书预计下个月就要出版了.这里MOMO先打一下广告,图灵的出版社编辑成员都非常给力,尤其是编辑小花为这本书付出了很大的努力,还有杨海玲老师, ...

  3. WEBGL 2D游戏引擎研发系列 第一章 <新的开始>

    WEBGL 2D游戏引擎研发系列 第一章 <新的开始> ~\(≥▽≤)/~HTML5游戏开发者社区(群号:326492427) 转载请注明出处:http://html5gamedev.or ...

  4. Unity 3D制作2D游戏的几种方法

    1.使用本身UGUI. 2.把摄像机的投影改为正交投影,不考虑Z轴. 3.使用Untiy自身的2D模式. 4.使用2D TooKit插件.

  5. unity 之2D游戏简单操作

    unity 做2D项目也很方便.  首先要调整camera的模式,camera 的检视面板参数如下: perspective 模式就是平时用的 模式.摄像机到游戏物体是有角度的张开, 而 orthog ...

  6. 2D游戏与3D游戏的区别 原文:https://zhidao.baidu.com/question/588490865.html

    2D和3D间有哪些不同点呢? 让我们来比较一下,共同找出它俩之间的不同点. 对玩家来说,2D技术和3D技术只是显示数据的方式而已,玩家都是通过二 维的平面显示器来观看它们.对制作者来说,二者的不同之处 ...

  7. Unity3d Platformer Pro 2D游戏开发框架使用教程

    前言 Platformer Pro框架是Unity3d AssetStore上一个非常强大和受欢迎的2d游戏开发框架,这个教程的大部分翻译于官方文档,一部分是工作总结,还有一部分是视频教程文档化.这个 ...

  8. 海外开发者推荐:10个顶级2D游戏资源站

    转自:http://www.gamelook.com.cn/2015/12/239038 Gamelook报道/随着手游市场的持续增长,HTML5的发展以及大型发行商的支持,2D游戏的数量变得越来越多 ...

  9. UWP简单示例(三):快速开发2D游戏引擎

    准备 IDE:VisualStudio 2015 Language:VB.NET/C# 图形API:Win2D MSDN教程:UWP游戏开发 游戏开发涉及哪些技术? 游戏开发是一门复杂的艺术,编码方面 ...

随机推荐

  1. linux-0.11 内核源码学习笔记一(嵌入式汇编语法及使用)

    linux内核源码虽然是用C写的,不过其中有很多用嵌入式汇编直接操作底层硬件的“宏函数”,要想顺利的理解内核理论和具体实现逻辑,学会看嵌入式汇编是必修课,下面内容是学习过程中的笔记:当做回顾时的参考. ...

  2. Django中 media资源配置

    # 用户上传的文件可以在外网通过接口直接访问 配置媒体跟路由: settings.py 用来存放用户上传的静态文件,可以对外公开的文件!!! MEDIA_ROOT = os.path.join(BAS ...

  3. DomeOS部署

    http://gitbook.domeos.org/ 按照官方一键部署脚本完之后,发现监听的IP地址是在IPv6上面. vim /etc/default/grubadd ipv6.disable=1 ...

  4. c++重要知识点

    C++重要知识点精华总结 cin的使用: 1>cin>>a;键盘读入数据赋值给a; 1>程序的输入都建有一个缓冲区,即输入缓冲区.一次输入过程是这样的,当一次键盘输入结束时会将 ...

  5. java-面向对象(公元2017-6-28)

    1.面向对象 何为面向对象:编写程序的时候会提取相似的 特征,把这些相似的特征组织起来 类:相似的特征组织起来的类型.            泛指.可理解为模板 对象:属于类中的具体事物       ...

  6. 寄存器(cpu工作原理)(一)

    cpu概述 一个典型的cpu由运算器.控制器.寄存器等器件组成,这些器件靠内部总线相连. 区别 内部总线实现cpu内部各个器件之间的联系 外部总线实现cpu外部和主板上其他器件的联系 8060cpu有 ...

  7. 初次接触Java

    今天初次接触Eclipse,学着用他来建立java工程,话不多说,来看看今天的成果! 熟悉自己手中的开发工具,热热身 刚上手别慌,有问题找度娘 刚刚拿到这个软件的安装包我是一脸懵逼的,因为是从官网下载 ...

  8. 坦克大战学习笔记-TankWar

    最近学习了马士兵老师直播的单机版坦克大战,模仿的做了一个,整理一下思路记录下来,项目git地址:https://github.com/zhuchangli/TankWar/tree/master 视频 ...

  9. awk命令总结

    强大的文本处理工具,awk读取文件内容的每一行时,将对比该行是否与给定的模式相匹配,匹配则执行处理过程,否则对该行不处理. 序号 awk功能 例子 1 指定分隔符显示某几列   2 通过正则表达式取出 ...

  10. 使用java命令出现Error: A JNI error has occurred, please check your installation and try again的错误

    运行Java程序,javac运行.java文件没有报错,但java运行的时候报错 ​​​ 仔细看一下报错 Exception in thread "main" java.lang. ...