游戏介绍

水果老虎机是一款街机游戏,游戏界面由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

您的支持是我共享资源的最大动力,因为要吃饭,哈哈哈哈!

微信小程序实现水果转盘游戏相关推荐

  1. 基于微信小程序的水果销售商城的设计与实现

    基于微信小程序的水果销售商城的设计与实现  源码获取:https://www.bilibili.com/video/BV1Ne4y1g7dC/ 随着科技的迅速发展,计算机技术已应用到社会的各个领域.随 ...

  2. 微信小程序实现大转盘抽奖----踩坑之路

    微信小程序实现大转盘抽奖----踩坑之路 需求:现在有一个小程序抽奖页面如下,此类抽奖方式为大转盘 思路:由服务端获取抽奖次数和奖品,根据服务端的中奖概率来决定是否中奖,最后利用小程序动画将转盘转起来 ...

  3. 微信小程序实验四 —— 扫雷游戏

    实验小提醒,打开微信小程序模板时,一定要看清楚,要选js模板,不要选ts模板,因为ts中对数据类型检查更严格,同样的代码在ts中可能无法运行! 实验内容: 编写如下扫雷游戏,基本要求如下: (1)方块 ...

  4. 微信小程序-开心大转盘(圆盘指针)代码分析

    大转盘是比较常见的抽奖活动 .以前做过h5的大转盘,最近小程序比较火,客户要求做小程序的大转盘.我们就来分析下代码.先上几个图:     界面效果还是很不错的. 做界面还是比较容易的,只要有前端基础没 ...

  5. 基于微信小程序的水果丨蔬菜丨农产品商城系统源码(SSM与Springboot版本均有)

    目录 一.整体目录(示范): 文档含项目技术介绍.E-R图.数据字典.项目功能介绍与截图等 二.运行截图 三.代码部分(示范): 四.数据库表(示范): 数据库表有注释,可以导出数据字典及更新数据库时 ...

  6. 计算机毕业设计springboot+vue基本微信小程序的剧本杀游戏设计与实现

    项目介绍 首先,论文一开始便是清楚的论述了小程序的研究内容.其次,剖析系统需求分析,弄明白"做什么",分析包括业务分析和业务流程的分析以及用例分析,更进一步明确系统的需求.然后在明 ...

  7. 为什么微信小程序也能做游戏?

    点击上方"CSDN",选择"置顶公众号" 关键时刻,第一时间送达! 作者:纪喜才,YY Android 工程师 从昨天到现在,微信最重磅的消息 -- 「小程序开 ...

  8. 微信小程序版 九宫格数独游戏

    前言 继上次JAVA版的九宫格数独,这几天把java版的迁移到了小程序这边,写一篇记录一下. 核心还是在算法上,话不多说,直接干代码 一.核心算法 先把81个格子填满,填充之前需要先判断当前格子填的数 ...

  9. 微信小程序云开发--拼图游戏

    声明:在写这个拼图游戏以前也参看过很多其他的小程序拼图相关的列子.我的这个与其他的不同,是采用小程序云开发的模式,省去了服务器,供读者参考,同时,也希望各位能帮忙扫下二维,点一下小广告.挣钱不容易,谢 ...

最新文章

  1. SQL Server CE學習篇
  2. mysql空表_MySQL中两种快速创建空表的方式
  3. Java集成PageOffice在线打开编辑word文件 - Spring Boot
  4. Nexus【环境搭建 01】CentOS 7.5 环境下搭建私有Maven仓库实录(启动问题处理+安装文件 nexus-3.4.0-02-unix.tar.gz 云盘链接)
  5. 图模型(graphical model, GM)的表示
  6. input输入框的input事件和change事件
  7. node.js 爬虫入门总结
  8. 报告PPT(163页):基于Python语言的课程群建设探讨与实践
  9. android 触摸监听重写_第六十四回:Android中UI控件之SeekBar
  10. 南邮物联网学院计算机考研,研友分享南京邮电大学物联网学院两个专业的一点看法...
  11. 【父亲节故事】32岁入门学习编程的父亲给我的启示
  12. ORB-SLAM2 --- LoopClosing::ComputeSim3 函数
  13. Linux设定密码策略
  14. 威纶通UI模板,威纶通,HMI模板,触摸屏模板,威纶通触摸屏
  15. 霖呆呆的中大厂面试记录及2年前端薪资对比(附赠学习方法)
  16. if和if else分支判断年龄
  17. 不好意思辞职怎么办?
  18. 新浪云计算平台注册和使用
  19. 腾讯阿里小米红包哪家强,这里有最强抢包攻略
  20. Adobe Photoshop 全版本 缩略图显示

热门文章

  1. C++班车管理系统课程设计
  2. DolphinPHP 框架wangeditor编辑器图片路径改为绝对链接
  3. yarn 升级最新版本
  4. 使用Python下载酷狗音乐
  5. maven打jar包时报update interval of XXX has elapsed or updates are force
  6. CAN总线接口静电保护及ESD二极管选型
  7. ubuntu双系统命令行访问win盘
  8. URL 的参数(query)是什么,以及如何解析获取
  9. 须知!在职考研10个复习经验分享!
  10. beetl 获取html属性值,Beetl2.7.16中文文档(2)之高级功能