微信小程序实现水果转盘游戏
游戏介绍
水果老虎机是一款街机游戏,游戏界面由24个方格拼接成一个正方形,每个方格中都有一个不同的水果图形,方格上有一个小灯。玩家使用游戏币选择希望押注的目标,按下开始后,小灯开始绕着正方形中每个格子转。当小灯停下时,如果停在玩家押注的目标上则可赢取相应的游戏币。
物品:游戏中的物品有八种,分别为:苹果、西瓜、木瓜、橙子、铃铛、77、双星,这些物品又分为大小两种。还有BAR图标,分为2种。
赔率:以下为所有固定赔率物品的赔率。·
BAR x100,小BAR x50;77 x40, 小77 x10;星星 x30, 小星星 x5;西瓜 x30, 小西瓜 x5;铃铛 x20, 小铃铛 x5;木瓜 x10, 小木瓜 x2; 桔子 x10, 小桔子 x2;苹果 x5, 小苹果 x2;榴莲 x0;
当玩家中奖之后,玩家点击“开始”按钮为收分,将得分计入总分,再次点击“开始”按钮为按照上一次押注再次进行游戏。如果玩家要重新押注,在押注物品上直接押注即可。在押注的同时会将中奖的金额收入“当前余额”区中。
如果玩家没有中奖,则玩家点击“开始”按钮为按照上一次押注再次进行游戏。
使用技术
我们使用微信小程序,来开发一个集趣味性与技术性于一体的小游戏,项目使用到了以下知识点:
- CSS:盒子模型,定位,浮动,CSS3的Flex弹性盒模型,图片,CSS3选择器...
- JS:json,sort,数组,定时器,随机数,设计概率...
水果机转盘界面设计
绝对定位和相对定位,设置父级格子的宽高,然后每个子级格子设置比例,我使用百分比,因为rpx会有小小的空隙,这是计算的精确度问题。具体请查看官方的解释。
.ul{position: relative;height: 650rpx;width: 650rpx;margin-left: auto;margin-right: auto;
}
.li{width: 14%;height:14%;list-style: none;text-align: center;line-height: 90rpx;position: absolute;background-size: contain;border: 1rpx solid #f1a7a7;padding: 10rpx;background-color: white;
}
现在基本的样子就出来了
然后加上格子上面的转灯以及玩法说明
<view class="active {{isStop==true?'on':''}}" style="left: {{activeLeft}};top: {{activeTop}};"></view>
最后整体布局如下:
选择下方列表的押注对象,点击加减就可以押注了,按钮支持长按持续累加,反之亦然。
总体布局出来,接下来就是开始写运行逻辑了,js部分开始。
首先想到的是定时器,让转灯动起来,并且是加速转动,最后慢慢地停下来,最少转两圈。
startPlay() {let fruits = that.data.fruits; //转盘数组let flen = fruits.length;let fruitsBet = this.data.fruitsBet; //投注数组let step = flen * 2 + parseInt(Math.random() * 35); //随机数,转盘焦点定位let index = that.data.activeIndex; //转盘数组下标function start() {that.setData({activeLeft: fruits[index].left,activeTop: fruits[index].top})step--;if (step == 0) {clearTimeout(that.data.timerID);index++;if (index == fruits.length) {index = 0;}that.setData({activeIndex: index})that.data.timerID = setTimeout(start, 1800 / step);}start(step)}
activeLeft和activeTop是转灯的定位,fruits是存放转盘图片的数组,每个图片的位置都写在了数组里面,这样通过每次运行index来获取每个图片的位置,赋值给转灯达到转动的效果。step是随机产生的数字让转灯最少运行两圈。
接下来问题就出现了,按照随机数的话,那么老板得赔死。于是开始设计一种概率回收机制
这个基数就是我们小时候常说的老板手里有遥控器,哈哈哈哈,老板还不承认,通过调整基数可随意控制中奖概率,我是这样设计的,通过判断运行次数除基数是否为0,来控制随机数出现的次数,就是达到不能让玩家不中,但又不能让玩家中太多,根本没赢的可能,有时候赢可能正是命运使然,正好出现随机数又正好被你投中。
接下来就是将押注的数组的押注分乘以赔率进行倒序,结果最低的概率最高
let newFruit = fruitsBet.slice().sort(that.compareDown("bet","score")).slice(0,5); //投注倒序
//倒序compareDown(bet,score) {return function (a, b) {var bet1 = a[bet] * a[score];var bet2 = b[bet] * b[score];return bet1 - bet2;}},
抽出最低的五个押注,然后在这五个里面产生随机数。这还没完,因为这五个里面还有大小的区分,就像前面说的那样通过大号基数设置大号出现的概率。
if (runNum % baseNum == 0) {step = flen * 2 + parseInt(Math.random() * 35 );} else {let descid = 0;let bigMin = that.data.bigMin;let seleID = 0;let seleScore = 0;if (runNum % bigMin == 0) {descid = parseInt(Math.random() * newFruitMbIg.length + 1) - 1;seleID = newFruitMbIg[descid].index;seleScore = newFruitMbIg[descid].score;} else {descid = parseInt(Math.random() * newFruitMin.length + 1) - 1;seleID = newFruitMin[descid].index;seleScore = newFruitMin[descid].score;}fruits.forEach((item, i) => {if (item.index == seleID && item.score == seleScore) {if (i < index) {step = flen * 3 - (index - i) + 1;} else {step = flen * 2 + i - index + 1;}}})}
通过这样一通设置后整个水果老虎机基本完成。欢迎大家扫码体验,有问题可以做小程序内反馈。
源码地址:https://download.csdn.net/download/qq_38332693/33769605
您的支持是我共享资源的最大动力,因为要吃饭,哈哈哈哈!
微信小程序实现水果转盘游戏相关推荐
- 基于微信小程序的水果销售商城的设计与实现
基于微信小程序的水果销售商城的设计与实现 源码获取:https://www.bilibili.com/video/BV1Ne4y1g7dC/ 随着科技的迅速发展,计算机技术已应用到社会的各个领域.随 ...
- 微信小程序实现大转盘抽奖----踩坑之路
微信小程序实现大转盘抽奖----踩坑之路 需求:现在有一个小程序抽奖页面如下,此类抽奖方式为大转盘 思路:由服务端获取抽奖次数和奖品,根据服务端的中奖概率来决定是否中奖,最后利用小程序动画将转盘转起来 ...
- 微信小程序实验四 —— 扫雷游戏
实验小提醒,打开微信小程序模板时,一定要看清楚,要选js模板,不要选ts模板,因为ts中对数据类型检查更严格,同样的代码在ts中可能无法运行! 实验内容: 编写如下扫雷游戏,基本要求如下: (1)方块 ...
- 微信小程序-开心大转盘(圆盘指针)代码分析
大转盘是比较常见的抽奖活动 .以前做过h5的大转盘,最近小程序比较火,客户要求做小程序的大转盘.我们就来分析下代码.先上几个图: 界面效果还是很不错的. 做界面还是比较容易的,只要有前端基础没 ...
- 基于微信小程序的水果丨蔬菜丨农产品商城系统源码(SSM与Springboot版本均有)
目录 一.整体目录(示范): 文档含项目技术介绍.E-R图.数据字典.项目功能介绍与截图等 二.运行截图 三.代码部分(示范): 四.数据库表(示范): 数据库表有注释,可以导出数据字典及更新数据库时 ...
- 计算机毕业设计springboot+vue基本微信小程序的剧本杀游戏设计与实现
项目介绍 首先,论文一开始便是清楚的论述了小程序的研究内容.其次,剖析系统需求分析,弄明白"做什么",分析包括业务分析和业务流程的分析以及用例分析,更进一步明确系统的需求.然后在明 ...
- 为什么微信小程序也能做游戏?
点击上方"CSDN",选择"置顶公众号" 关键时刻,第一时间送达! 作者:纪喜才,YY Android 工程师 从昨天到现在,微信最重磅的消息 -- 「小程序开 ...
- 微信小程序版 九宫格数独游戏
前言 继上次JAVA版的九宫格数独,这几天把java版的迁移到了小程序这边,写一篇记录一下. 核心还是在算法上,话不多说,直接干代码 一.核心算法 先把81个格子填满,填充之前需要先判断当前格子填的数 ...
- 微信小程序云开发--拼图游戏
声明:在写这个拼图游戏以前也参看过很多其他的小程序拼图相关的列子.我的这个与其他的不同,是采用小程序云开发的模式,省去了服务器,供读者参考,同时,也希望各位能帮忙扫下二维,点一下小广告.挣钱不容易,谢 ...
最新文章
- SQL Server CE學習篇
- mysql空表_MySQL中两种快速创建空表的方式
- Java集成PageOffice在线打开编辑word文件 - Spring Boot
- Nexus【环境搭建 01】CentOS 7.5 环境下搭建私有Maven仓库实录(启动问题处理+安装文件 nexus-3.4.0-02-unix.tar.gz 云盘链接)
- 图模型(graphical model, GM)的表示
- input输入框的input事件和change事件
- node.js 爬虫入门总结
- 报告PPT(163页):基于Python语言的课程群建设探讨与实践
- android 触摸监听重写_第六十四回:Android中UI控件之SeekBar
- 南邮物联网学院计算机考研,研友分享南京邮电大学物联网学院两个专业的一点看法...
- 【父亲节故事】32岁入门学习编程的父亲给我的启示
- ORB-SLAM2 --- LoopClosing::ComputeSim3 函数
- Linux设定密码策略
- 威纶通UI模板,威纶通,HMI模板,触摸屏模板,威纶通触摸屏
- 霖呆呆的中大厂面试记录及2年前端薪资对比(附赠学习方法)
- if和if else分支判断年龄
- 不好意思辞职怎么办?
- 新浪云计算平台注册和使用
- 腾讯阿里小米红包哪家强,这里有最强抢包攻略
- Adobe Photoshop 全版本 缩略图显示
热门文章
- C++班车管理系统课程设计
- DolphinPHP 框架wangeditor编辑器图片路径改为绝对链接
- yarn 升级最新版本
- 使用Python下载酷狗音乐
- maven打jar包时报update interval of XXX has elapsed or updates are force
- CAN总线接口静电保护及ESD二极管选型
- ubuntu双系统命令行访问win盘
- URL 的参数(query)是什么,以及如何解析获取
- 须知!在职考研10个复习经验分享!
- beetl 获取html属性值,Beetl2.7.16中文文档(2)之高级功能