solidity经典案例----智能小游戏
参考于https://ke.qq.com/webcourse/2379017/103111126#taid=10365401060101385&vid=5285890802017890711
1. 案例功能介绍
- 平台方部署智能合约,用户选择下大或者下小。
- 智能合约指定游戏规则,利用简单的随机数实现。
2. 具体的代码如下
pragma solidity ^0.6.1;struct User{address payable addr;uint256 amount;
}contract bocai_demo{User[] bigs;//下大User[] smalls;//下小address admin;//平台方地址bool isFinshed;//是否结束标志uint256 outtimes;//截止时间uint256 bigTotalAmount;//下注为大的总金额uint256 smallTotalAmount;//下注为小的总金额uint256 result;//开奖结果constructor() public{admin = msg.sender;isFinshed = false;outtimes = now+120;//下注规定一分钟bigTotalAmount=0;smallTotalAmount=0;}//下注function bet(bool flag) public payable{require(msg.value>0,"msg.value must >0");require(!isFinshed,"game must not finshed");require(now <= outtimes,"time not out");if(flag){//下大User memory user = User(msg.sender,msg.value);bigs.push(user);bigTotalAmount+=msg.value;}else{//下小User memory user = User(msg.sender,msg.value);smalls.push(user);smallTotalAmount+=msg.value;}}//开奖function open() public payable{require(!isFinshed,"only open once");require(outtimes<=now,"time must ok");//计算下注是大还是小,制定游戏规则isFinshed=true;//随机生成0-18以内的数,0-9:小 10-17:大result = uint256(keccak256(abi.encode(msg.sender,now,outtimes,admin,smalls.length)))%18;//派奖User memory user;if(result<9){//下注小赢for(uint256 i = 0;i < smalls.length;i++){user=smalls[i];//赢取下大总金额的90%的钱uint256 amount = bigTotalAmount * user.amount / smallTotalAmount *90 /100 + user.amount;user.addr.transfer(amount);}}else{//下注大赢for(uint256 i=0;i<bigs.length;i++){user=bigs[i];//赢取下小总金额的90%的钱uint256 amount = smallTotalAmount * user.amount / bigTotalAmount *90 /100 +user.amount;user.addr.transfer(amount);}}}//获取总钱数以及部署该合约的剩余的钱function getBalance() external view returns(uint256,uint256,uint256){return (bigTotalAmount,smallTotalAmount,address(this).balance);}//获取最终游戏的结果function getResult() external view returns(string memory){require(isFinshed,"bet must finshed");if(result<9){return "small";}else{return "big";}}
}
3. 测试步骤如下
- 选取7个账户地址,1个用户部署合约,充当平台方角色,其余6个作为下注用户。
- 按照上图所示输入下注的金额以及大(true)/小(false)
- 这是每一次测试时账户地址余额变换的截图
- 游戏结束之后,进行开奖,最终胜利的是下注为大的,将获取下注为小的总金额的90%的奖励
solidity经典案例----智能小游戏相关推荐
- 扫雷游戏是一款十分经典的单机小游戏。 问题 H: 扫雷游戏
题目描述 扫雷游戏是一款十分经典的单机小游戏.在n行m列的雷区中有一些格子含有地雷(称之为地雷格),其他格子不含地雷(称之为非地雷格).玩家翻开一个非地雷格时,该格将会出现一个数字--提示周围格子中有 ...
- Java实现的经典坦克大战小游戏
Java实现的经典坦克大战小游戏 先看一下游戏结构: 有点多,没有耐心的可以不用看,这里先给出链接吧! 云链接:经典坦克大战 提取码:s9ai 这里就不介绍功能了,贴了一张游戏运行的截图,具体的功能自 ...
- html实现经典坦克大战小游戏
文章目录 1.设计来源 1.1 游戏主界面 1.2 游戏界面 2.效果和源码 2.1 动态效果 2.2 源代码 源码下载 作者:xcLeigh 文章地址:https://blog.csdn.net/w ...
- html实现经典打方块小游戏
文章目录 1.设计来源 1.1 主界面 1.2 游戏界面 1.3 游戏结束界面 2.效果和源码 2.1 动态效果 2.2 源代码 源码下载 作者:xcLeigh 文章地址:https://blog.c ...
- html实现经典捕鱼达人小游戏
文章目录 1.设计来源 1.1 游戏界面 2.效果和源码 2.1 动态效果 2.2 源代码 源码下载 作者:xcLeigh 文章地址:https://blog.csdn.net/weixin_4315 ...
- java游戏黑莓手机,简约而不简单 16款经典黑莓手机小游戏
[IT168 应用]随着 AppStore 和 Android 市场的发展,大家已经逐渐适应在市场中为自己的智能机淘一些自己喜欢的游戏和应用,黑莓其实也提供了这一市场. 尽管国内黑莓的氛围并不如上两种 ...
- SEO案例:4399小游戏网站SEO案例剖析
在小游戏行业,有一个网站的SEO做的相称厉害,那就是4399小游戏,当然17173小游戏要做的不错的,但是绝对于4399来说,其SEO可能要略逊一筹.下面做一个简单地对比你就明白了. 两个网站的百度收 ...
- Python趣味案例——剪刀石头布小游戏改进版(自由实现三局两胜五局三胜七局四胜。。。)
前言 最近看了这篇知乎文章,深受启发: Python之石头剪刀布小游戏(史上最详细步骤) - 真小凡的文章 - 知乎 Python中实现剪刀石头布游戏的方式有很多种,这个博主允许直接输入石头.剪刀.布 ...
- 经典Windows 扫雷小游戏源码 展示
这个扫雷小游戏是通过Easy X实现,Easy X是很多小萌新手在学习的时候用到的一个绘图工具,想必大家对他已经很熟悉了. 所以如果有小伙伴感兴趣的话,可以联系我获取Easy X的安装程序及其源代码. ...
最新文章
- 【ARM】arm串行通信
- 网络推广方法教大家提升网站页面收录的技巧!
- meta http-equiv=X-UA-Compatible content=IE=7 /意思是将IE8用IE7进行渲染,使网页在IE8下正常...
- Docker——Docker Compose
- 【 Tomcat 】tomcat8.0 调优配置
- iframe关于滚动条的去除和保留
- C#如何[添加][删除][修改]XML中的记录
- SecureWatch和人工智能为疫情期间更安全有效地监控房地产开发提供助力
- 作为技术人员,经常遇到没有接触过的技术,有时是点滴的小技能,有时可能是大的一个研究课题,那么我们如何进行技术研究呢?
- 量子计算机有哪些战略意义,世界性颠覆!量子计算机在中国诞生,对我国有五层重大战略意义!...
- 【Win 10 应用开发】在App所在的进程中执行后台任务
- 北大中文核心期刊目录2021年 电工技术
- 单片机技术与c语言编程教学大纲,单片机原理及应用课程教学大纲
- 中期答辩记录与总结反思
- Ubuntu 12.04设置豆沙绿
- 文件对比工具 Beyond Compare 4.2.9中文破解版 附通用注册码
- css中导入自定义字体库
- 基于本地代理的边下边播技术分析
- 强智教务php,强智科技教务处模拟登录
- 计算机如何增加c盘容量,怎么给c盘增加空间 c盘增加空间步骤【图文】
热门文章
- python--生成器
- 前端:css中的多列的实现与介绍
- 红米9A成功root.9秒解锁BL MIUI12 root权限刷 Magisk面具 TWRP
- SpringCloud之蓝绿部署
- 收款码在线生成系统源码 无限制
- 2022版Maven教程 - 第六章 单一架构案例
- Android连接SQLServer详细教程(数据库+服务器+客户端),并在微软Azure云上搭建云服务
- Dynamic Few-Shot Visual Learning without Forgetting||论文阅读
- Java架构师 HR常见面试问题_Java架构师,常见的几个JEE面试问题, 感觉还是有些地方有点晕。 稀里糊涂,晒一下...
- 阿里达摩院人工智能科学家杨红霞离职,AI商用是难题