1、实现

转盘分多种情况,常见的有 不同中奖几率的奖品限定数量的奖品限定数量和中奖几率的奖品

1.1、不同中奖几率的奖品 的实现

1)计算出总概率的精度M
2)然后将所有的概率数组依次遍历
3)遍历中随机取出一个1~M的数字
4)如果随机数比当前这个数概率小,则表示命中。
5)反之则将总精度减去当前未命中的概率,表示剩余的总概率

总精度是为了生成随机数,而减去未命中的概率是为了排除出去,最后必定会命中

1.1.1、代码实现
  • 传入的数组对应原有下标的一维数组,值为概率,整数/小数都可以
  • 计算完后返回对应的下标,再可根据下标找到对应下标的中奖内容即可

测试的中奖几率的方法

/*** 测试中奖概率*/
public function test()
{//获取奖品列表$appAnglePrize =db('奖品配置表')->where('status', 1)->field('name as "奖项",rate')->order('weigh', 'DESC')->select();//获取对应的几率数组$rateArr = array_column($appAnglePrize, 'rate');foreach ($appAnglePrize as $k => $v) {$appAnglePrize[$k]['中奖次数'] = 0;$appAnglePrize[$k]['概率'] = strval($v['rate']) . '%';unset($appAnglePrize[$k]['rate']);}for ($i = 0; $i < 10000; $i++) {$result = $this->getRandPrize($rateArr);$appAnglePrize[$result]['中奖次数']++;}$this->success($appAnglePrize);
}

抽奖方法

/*** 返回转盘抽奖结果* @param array $proArr 概率数组(值为概率)* @return int|string 返回对应数组的下标*/
private function getRandPrize($proArr)
{$result = '';//概率数组的总概率精度$proSum = array_sum($proArr);//概率数组循环foreach ($proArr as $key => $proCur) {$randNum = mt_rand(1, $proSum);if ($randNum <= $proCur) {$result = $key;break;} else {$proSum -= $proCur;}}unset ($proArr);return $result;
}
1.1.2、测试

1)我们可以看出已经很接近对应的概率了。
2)我这里是跑一万次,我分别跑了好几次观察结果是可行的。

TP5 实现转盘抽奖相关推荐

  1. php ajax 概率 转盘,php+jquery实现转盘抽奖 概率可任意调

    转盘抽奖,炫丽的一般是flash做的.不懂flash而又不需要那么炫丽,可以简单的通过jquery来实现.网上教程有很多,跟着做了一下,也贴出来吧.要实现转盘抽奖,有两个关键点,一是让转盘或指针转起来 ...

  2. 转盘抽奖php,使用PHP实现转盘抽奖算法案例解析

    这次给大家带来使用PHP实现转盘抽奖算法案例解析,使用PHP实现转盘抽奖算法的注意事项有哪些,下面就是实战案例,一起来看一下. 流程: 1.拼装奖项数组 2.计算概率 3.返回中奖情况 代码如下: 中 ...

  3. 转盘在转动的同时ajax异步加载,用jQuery旋转插件jqueryrotate制作转盘抽奖.pdf

    用用jQuery旋旋转转插插件件jqueryrotate制制作作转转盘盘抽抽奖奖 本文实例为大家分享了j Query旋转插件j queryrotate制作转盘抽奖的具体代码,供大家参考,具体内容 下 ...

  4. 转盘抽奖(主要:概率和JQ)

    转盘抽奖 涉及的重点:JQ特效,概率 逻辑设计: 1.把前端页面设计好,转盘可以用table标签做,样式设计好 2.控制器把抽奖物查询出来,有序输出到前端页面设计好的转盘上 3.写JQ特效,原理就是轮 ...

  5. html转盘游戏,html5大转盘抽奖实例源码(基于vue.js)

    [实例简介] [调试步骤] # 安装依赖 npm install # 开启本地服务器localhost:8088 npm run dev # 发布环境 npm run build #然后静待你的浏览器 ...

  6. python转盘抽奖概率_转盘指定概率抽奖

    前段时间项目中开了一个转盘抽奖的活动,转盘抽奖是一个比较简单的算法,下面介绍两种实现 第一种实现 import random from typing import List def random_pi ...

  7. php 打乱数组顺序_PHP实现大转盘抽奖算法

    php中文网最新课程 每日17点准时技术干货分享 本文通过具体的实例向大家介绍了PHP语言实现大转盘抽奖算法,希望对大家学习PHP抽奖有所帮助. 流程: 1.拼装奖项数组: 2.计算概率: 3.返回中 ...

  8. axure 内部框架内容下滑_Axure教程:转盘抽奖交互原型

    本文跟大家分享,如何使用axure制作转盘抽奖交互原型,不带登录流程. 效果如下: 抽奖流程 一.主要内容 (1)主要元件:动态面板 (2)重点:旋转交互.随机函数.触发动作. (3)难点:通过停止位 ...

  9. Python使用Tkinter实现转盘抽奖器

    Python使用Tkinter实现转盘抽奖器 我使用 Python 中的 Tkinter 模块实现了一个简单的滚动抽奖器,接下来继续写一个简单的转盘抽奖器. Tkinter 实现滚动抽奖器参考:htt ...

最新文章

  1. 题目1105:字符串的反码
  2. mmse评估量表_简易精神状态评价量表(mmse量表) 打印版.doc
  3. 【Cocosd2d实例教程二】地图编辑器Tiled的安装使用
  4. 用GDB调试程序(六)
  5. typeahead有什么作用_typeahead使用配置参数。
  6. STL源码剖析 list概述
  7. python列表appendtext_python-默认文本以及列表textvariable Entry小部...
  8. pandas numpy处理缺失值,none与nan比较
  9. php soap proxy host,php-PHP soap Could not connect to host
  10. 联想y7000p电池固件下载_联想拯救者Y7000P安装双系统win10+ubuntu18.04
  11. 硬件3--电压跟随器的作用
  12. 量化研究-恐慌和贪婪指数
  13. Android10.0CarAudioZone(一)
  14. 涅槃?高效报表开发人员的五件武器
  15. http常用请求头与响应头字段详解
  16. vue如何把html转换word,vue导出html、word和pdf的实现代码
  17. 美国加州伯克利大学计算机专业排名,美国加州大学伯克利分校计算机专业排名...
  18. java手机分辨率最高_主流手机分辨率 尺寸 操作系统
  19. 中国SaaS的机遇、战术和野心
  20. 中国少儿模特明星盛典 《荣耀王者》主题曲 即将全网发布

热门文章

  1. 中外教育专家“支招”中国学生如何接轨国际教育
  2. CentOS下用yum命令安装jdk
  3. 手写AngularJS脏检查机制
  4. Ajax中POST和GET的区别
  5. 数据、事实、实体、值对象、事务、不变性
  6. redhat6.4中手动创建oracle11g数据库
  7. 好久没写博客了,改天要把原博客资料整理下,弄个链接什么
  8. 心得体悟帖---16、哪些看起来很难做的事情真的不过如此
  9. iOS - Tools Using's Problem
  10. unittest单元测试框架之unittest案例(二)