我们先完成后台PHP的流程,PHP的主要工作是负责配置奖项及对应的中奖概率,当前端页面点击翻动某个方块时会想后台PHP发送ajax请求,那么后台PHP根据配置的概率,通过概率算法给出中奖结果,同时将未中奖的奖项信息一并以JSON数据格式发送给前端页面。 
先来看概率计算函数

function get_rand($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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

上述代码是一段经典的概率算法,$proArr是一个预先设置的数组,假设数组为:array(100,200,300,400),开始是从1,1000这个概率范围内筛选第一个数是否在他的出现概率范围之内, 如果不在,则将概率空间,也就是k的值减去刚刚的那个数字的概率空间,在本例当中就是减去100,也就是说第二个数是在1,900这个范围内筛选的。这样筛选到最终,总会有一个数满足要求。就相当于去一个箱子里摸东西,第一个不是,第二个不是,第三个还不是,那最后一个一定是。这个算法简单,而且效率非常高,关键是这个算法已在我们以前的项目中有应用,尤其是大数据量的项目中效率非常棒。 
接下来我们通过PHP配置奖项。

$prize_arr = array( '0' => array('id'=>1,'prize'=>'平板电脑','v'=>1), '1' => array('id'=>2,'prize'=>'数码相机','v'=>5), '2' => array('id'=>3,'prize'=>'音箱设备','v'=>10), '3' => array('id'=>4,'prize'=>'4G优盘','v'=>12), '4' => array('id'=>5,'prize'=>'10Q币','v'=>22), '5' => array('id'=>6,'prize'=>'下次没准就能中哦','v'=>50),
); 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

中是一个二维数组,记录了所有本次抽奖的奖项信息,其中id表示中奖等级,prize表示奖品,v表示中奖概率。注意其中的v必须为整数,你可以将对应的奖项的v设置成0,即意味着该奖项抽中的几率是0,数组中v的总和(基数),基数越大越能体现概率的准确性。本例中v的总和为100,那么平板电脑对应的中奖概率就是1%,如果v的总和是10000,那中奖概率就是万分之一了。 
每次前端页面的请求,PHP循环奖项设置数组,通过概率计算函数get_rand获取抽中的奖项id。将中奖奖品保存在数组res[′yes′]中,而剩下的未中奖的信息保存在res[‘no’]中,最后输出json个数数据给前端页面。

foreach ($prize_arr as $key => $val) { $arr[$val['id']] = $val['v'];
} $rid = get_rand($arr); //根据概率获取奖项id $res['yes'] = $prize_arr[$rid-1]['prize']; //中奖项
unset($prize_arr[$rid-1]); //将中奖项从数组中剔除,剩下未中奖项
shuffle($prize_arr); //打乱数组顺序
for($i=0;$i<count($prize_arr);$i++){ $pr[] = $prize_arr[$i]['prize'];
}
$res['no'] = $pr;
echo json_encode($res);

大转盘/刮刮乐中奖概率算法相关推荐

  1. 大转盘抽奖实现总中奖率可控内部逻辑分享

    近一个月都在围绕新年活动这个新需求进行开发,其中的核心功能就是大转盘抽奖,类似于pdd.网上找了很多方法都不符合本项目的业务需求,特此分享一下自己写的核心逻辑,首次发文欢迎批评指正. 1.首先需要有奖 ...

  2. php中奖概率算法,可用于刮刮卡,大转盘等抽奖算法

    php中奖概率算法,可用于刮刮卡,大转盘等抽奖算法.用法很简单,代码里有详细注释说明,一看就懂 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ...

  3. php中奖概率算法,刮刮卡/大转盘抽奖算法

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 php中奖概率算法,可用于刮刮卡,大转盘等抽奖算法 前言 一.概率算法 二.奖项数组 三.引用输出 总结 前言 以下是我整理的在项目中 ...

  4. 刮刮乐、幸运大转盘 1

    对于抽奖类的测试:刮刮乐.幸运大转盘 一.考虑时间段2个活动的问题 一个活动在正常活动时间段内 1.精确到年月日时分秒 二.考虑抽奖活动的奖品.奖项必须是同一个活动下 三.考虑到抽奖活动必须是时间问题 ...

  5. php转盘中奖率,PHP大转盘中奖概率算法实例_PHP

    本文实例讲述了PHP大转盘中奖概率算法的实现方法,分享给大家供大家参考.具体如下: 大转盘是最近很多线上网动中一个比较有意思的东西了,下面我们就来看看这个大转盘中奖概率算法与例子,希望对各位有所帮助. ...

  6. paip 刮刮卡砸金蛋抽奖概率算法跟核心流程

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! paip ...

  7. html5 刮刮乐 源码,HTML5 canvas实现刮刮乐功能

    最近比较闲,除了在群里给大家交流交流,就没啥学习重心.看了论坛里的各种帖子,各种问题满天飞,这里我就整理了2个h5 canvas的demo,分享给大家! 使用html5的canvas实现刮刮乐功能 舍 ...

  8. Android实现 刮刮乐效果

    一.实现原理与所需技术 Android刮刮乐效果的实现,自定义view,绘制出中奖信息,将一张图片绘制在中奖信息的上层,通过onTouchEvent监听用户手势,通过path记录绘制轨迹,设置绘制方式 ...

  9. 使用Canvas制作刮刮乐,看看你能刮出什么奖品来?

    点击上方 前端Q,关注公众号 回复加群,加入前端Q技术交流群 前言 今天在一个彩票网站看到了一个刮刮乐的效果,觉得挺有意思的就打算来仿写一个,经过一番简单的思考大概就有了基本都想法.总体效果使用Can ...

最新文章

  1. openssl修改版本号
  2. java git_用 JGit 通过 Java 来操作 Git
  3. ibm+x3650+m4+linux+raid驱动,IBM X3650M4阵列卡驱动下载
  4. android翻盘效果,行情艰难,Android初中级面试题助你逆风翻盘,每题都有详细答案...
  5. 方差分析中的“元”和“因素”是什么?
  6. html 手机浏览器:屏幕适配 - 代码篇
  7. 重复文件查找_Duplicate File Remover PRO for mac(Mac文件重复查找软件)
  8. 获取所有汉字与 Unicode 的对照表
  9. 吴裕雄 python 机器学习——数据预处理过滤式特征选取SelectPercentile模型
  10. 算法设计与分析知识点整理
  11. c++实现植物大战僵尸修改器
  12. 什么是抽象类?什么是抽象方法?
  13. hdu2859 Phalanx(线性dp)
  14. 【面经】2021 中国农业银行 笔试编程题
  15. 魔兽世界怀旧服务器无限刷怪点,魔兽世界怀旧服50级刷怪地点汇总
  16. maven子模块之间互相引入依赖,pom文件报错
  17. CMMI 3.0究竟有哪些变化?
  18. centos7限制cpu使用_CentOS7中CPU频率调整问题
  19. TabLayout修改文字间距
  20. 如何搭建可正常使用的centOS7系统虚拟机节点

热门文章

  1. DataGrid实现自定义分页,鼠标移至变色,删除确认、可编辑,可删除
  2. r5 5625u和i5 12500h哪个好 r55625u和i512500h对比
  3. WebGL基础:着色器基础知识
  4. 无线传屏服务器,无线传屏设备
  5. 从壹开始前后端分离【 .NET Core2.2 +Vue2.0 】框架之九 || 依赖注入IoC学习 + AOP界面编程初探...
  6. Web前端开发人员的发展规划
  7. 【100%通过率】华为OD机试真题 C 实现【统计友好度最大值】【2022 Q4 | 100分】
  8. 【华为OD机试真题 python】称砝码【2023 Q1 | 100分】
  9. .NET UML学习入门
  10. html牙齿的选择,lyear_ui_alerts.html