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游戏开发 游戏开发涉及哪些技术? 游戏开发是一门复杂的艺术,编码方面 ...
随机推荐
- Kubernetes 入门之Kubernetes 的基本概念和术语
Kubernetes是什么? 他是一个全新的基于容器技术分布式架构领先方案: 他也是一个开放的开发平台: 他也是一个完备的分布式系统支撑平台: Kubernetes的基本慨念和术 ...
- HTML特殊字符编码对照表(备记)
特殊符号 命名实体 十进制编码 特殊符号 命名实体 十进制编码 特殊符号 命名实体 十进制编码 Α Α Α Β Β Β Γ Γ Γ Δ Δ Δ Ε Ε Ε Ζ Ζ Ζ Η Η Η Θ Θ Θ Ι Ι ...
- Eclipse在线集成SpringBoot
在线集成下载地址:http://dist.springsource.com/release/TOOLS/update/e4.8/ 注意:需要更改后面的版本号,跟随自己eclipse版本号下载,只需要改 ...
- 什么样的类才算是一种可重用的组件,即JavaBean?
每一个类实现了Bean的规范才可以由Spring来接管,那么Bean的规范是什么呢? 必须是个公有(public)类 有无参构造函数 用公共方法暴露内部成员属性(getter,setter) 实现这样 ...
- dot.js模板实现分离式
<!DOCTYPE html><html lang="en"> <head> <meta charset="UTF-8" ...
- 大雄玩java虚拟机01--java命令
首先是参考的资料,然后说一下我要干什么,我要一边学习java虚拟机一边跟着zxh0大神用go写一个jvm,不过我和他滴不一样! http://docs.oracle.com/javase/specs/ ...
- VsCode编写博客发布
发布图片测试: Java代码测试: //计算机等级考试p6例1.2 //编辑者:鸿灬嗳 package test00; class Circle{ static double PI=3.1415926 ...
- C# [Win32] [GDI+] [API] Load HFONT from Memory
// gdiplusenums.h //-------------------------------------------------------------------------- // Fo ...
- C# [LINQ] Linq Expression 获取多格式文件
using System; using System.IO; using System.Linq; using System.Linq.Expressions; internal static str ...
- git 的安装与初始化
1搭建本地git服务器: 1.1安装git 对于ubuntu系统,一般自带git,可以使用git --version 查看版本号 ,或使用apt-get install git . centos上对 ...