PHP幸运大转盘源码,支持ThinkPHP
原理
先看图

可以看到1-6等奖都只有1个 ,7等奖有6个。指针默认指向上图位置,记为0°。
每个奖项对应不同的角度,圆的角度为360°,分成12块,所以每块为30°。
为了防止指针指着相邻两个将向之间的线,所以记为一等奖的最小角度为1°,最大角度为29°。同理可找出其他奖项的角度,这要注意,七等奖有6个。
然后呢,每个奖项都有不同的中奖概率,我们根据概率来获取奖项(概率可以设置为0,你懂的~),获取奖品后,在根据最大和最小角度生成一个随机数,来让指针旋转即可..
HTML代码
代码是基于thinkphp的,如果你的不是,修改里面的url路径就行了
- <!DOCTYPE HTML>
- <html>
- <head>
- <meta charset="utf-8">
- <meta name="keywords" content="幸运大转盘,cnsecer.com" />
- <meta name="description" content="幸运大转盘" />
- <title>幸运大转盘</title>
- <style type="text/css">
- .demo{width:417px; height:417px; position:relative; margin:50px auto}
- #disk{width:417px; height:417px; background:url(__STATIC__/images/disk.jpg) no-repeat}
- #start{width:163px; height:320px; position:absolute; top:46px; left:130px;}
- #start img{cursor:pointer}
- </style>
- <script src="http://cdn.bootcss.com/jquery/1.11.0/jquery.min.js"></script>
- <script type="text/javascript" src="__STATIC__/js/jQueryRotate.2.2.js"></script>
- <script type="text/javascript" src="__STATIC__/js/jquery.easing.min.js"></script>
- <script type="text/javascript">
- $(function(){
- $("#startbtn").click(function(){
- lottery();
- });
- });
- function lottery(){
- $.ajax({
- type: 'POST',
- url: '{:U(\'game/run\')}', //提交地址 改为你自己的
- dataType: 'json',
- cache: false,
- error: function(){
- alert('出错了!');
- return false;
- },
- success:function(json){
- $("#startbtn").unbind('click').css("cursor","default");
- var a = json.angle; //角度
- var p = json.prize; //奖项
- $("#startbtn").rotate({
- duration:3000, //转动时间
- angle: 0,
- animateTo:1800+a, //转动角度
- easing: $.easing.easeOutSine,
- callback: function(){
- var con = confirm('恭喜你,中得'+p+'\n还要再来一次吗?');
- if(con){
- lottery();
- }else{
- return false;
- }
- }
- });
- }
- });
- }
- </script>
- </head>
- <body>
- <div id="main">
- <div class="msg"></div>
- <div class="demo">
- <div id="disk"></div>
- <div id="start"><img src="__STATIC__/images/start.png" id="startbtn"></div>
- </div>
- </div>
- <div id="footer">
- </div>
- </body>
- </html>
后台处理代码
- <?php
- namespace Home\Controller;
- use Think\Controller;
- class GameController extends BaseController{
- public function index(){
- $this->display("index");
- }
- public function run(){
- $proArr = array();
- //v 是中奖概率 相加之后最好为100的整数倍 id为奖品编号 min max 分别为最大和最小角度
- $prize_arr = array(
- '0' => array('id'=>1,'min'=>1,'max'=>29,'prize'=>'一等奖','v'=>0),
- '1' => array('id'=>2,'min'=>302,'max'=>328,'prize'=>'二等奖','v'=>0),
- '2' => array('id'=>3,'min'=>242,'max'=>268,'prize'=>'三等奖','v'=>0),
- '3' => array('id'=>4,'min'=>182,'max'=>208,'prize'=>'四等奖','v'=>0),
- '4' => array('id'=>5,'min'=>122,'max'=>148,'prize'=>'五等奖','v'=>0),
- '5' => array('id'=>6,'min'=>62,'max'=>88,'prize'=>'六等奖','v'=>0),
- '6' => array('id'=>7,'min'=>array(32,92,152,212,272,332), 'max'=>array(58,118,178,238,298,358),'prize'=>'七等奖','v'=>100)
- );
- //获取随机奖品
- foreach ($prize_arr as $v) {
- $proArr[$v['id']] = $v['v'];
- }
- $rid = $this->getRand($proArr); //根据概率获取奖项id
- $res = $prize_arr[$rid-1]; //中奖项
- // dd($res);die;
- $min = $res['min'];
- $max = $res['max'];
- if($res['id']==7){ //七等奖
- $i = mt_rand(0,5);
- $result['angle'] = mt_rand($min[$i],$max[$i]);
- }else{
- $result['angle'] = mt_rand($min,$max); //随机生成一个角度
- }
- $result['prize'] = $res['prize'];
- echo json_encode($result);
- }
- protected function getRand($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;
- }
- }
PHP幸运大转盘源码,支持ThinkPHP的更多相关文章
- WP8.1&Win10幸运大转盘源码分享
先AD一下我的群:Win10开发者群:53078485 最近在写一个APP,其中需要一个转盘动画的源码,找了很多但是都没有找到,无奈只好自己来写,写完效果自己还是比较满意的,分享出来,有需要的童鞋可以 ...
- jQuery幸运大转盘_jQuery+PHP抽奖程序的简单实现
jQuery幸运大转盘_jQuery+PHP抽奖程序的简单实现 在线实例 查看演示 完整代码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 ...
- 修改Cosbench源码 支持s3的 http range request 测试场景
在视频点播的业务应用场景中,用户使用了ffmpeg工具做视频实时转码用. 而ffmpeg使用range 请求.而Cosbench不支持这种测试场景,所以需要修改源码支持这种测试场景. HTTP 协议介 ...
- asp.net+jQueryRotate开发幸运大转盘
在线抽奖程序在很多网站上很多,抽奖形式多种多样,Flash抽奖偏多,本文将给大家介绍jQuery转盘抽奖,结合代码实例将使用jQuery和asp.net来实现转盘抽奖程序,为了便于理解,文章贴出实现源 ...
- html5简单拖拽实现自动左右贴边+幸运大转盘
此篇文章主要实现两个功能: 1.点击屏幕下方签到悬浮按钮: 2.弹出幸运大转盘,转盘抽奖签到 效果如图: 在网上找了很多移动端拖拽的js实现方式,大部分都是这一种,html5的touch事件,但是 ...
- PHP+AJAX开发幸运大转盘抽奖
PHP+AJAX开发幸运大转盘抽奖,通过奖品库存.中奖次数来计算中奖概率 奖品设置 $prizes = array( 0 => array( "id" => 0, // ...
- C#保留2位小数几种场景总结 游标遍历所有数据库循环执行修改数据库的sql命令 原生js轮盘抽奖实例分析(幸运大转盘抽奖) javascript中的typeof和类型判断
C#保留2位小数几种场景总结 场景1: C#保留2位小数,.ToString("f2")确实可以,但是如果这个数字本来就小数点后面三位比如1.253,那么转化之后就会变成1.2 ...
- Vue 幸运大转盘
转盘抽奖主要有两种,指针转动和转盘转动,个人觉得转盘转动比较好看点,指针转动看着头晕,转盘转动时指针是在转盘的中间位置,这里要用到css的transform属性和transition属性,这两个因为不 ...
- 修改json源码支持datetime序列化
修改json源码支持datetime序列化 import json import datetime now = datetime.datetime.today() json.dumps(now) 抛出 ...
随机推荐
- 用EXCEL做快速傅立葉轉換_FFT in Excel
转载来自:http://yufan-fansbook.blogspot.tw/2013/09/excel-fft-fast-fourier-transform02.html [Excel]-用EXCE ...
- Unity Lighting(一)光照练习
Unity 2018.1.2f1 原文链接:https://www.youtube.com/watch?v=VnG2gOKV9dw Unity Lighting练习最终效果 眼睛.光源与物体 光学基础 ...
- 知识点:Mysql 基本用法之函数
函数 MySQL中提供了许多内置函数 例如: sql 内置函数: 一.数学函数 ROUND(x,y) 返回参数x的四舍五入的有y位小数的值 RAND() 返回0到1内的随机值,可以通过提供一个参数(种 ...
- Struts2 <s:select >标签的使用
select 取值session中的内容 <s:select name="meal.mealseries.seriesid" list="#session.meal ...
- Linux常用命令大全(分类)
首先按ESC键回到命令模式: vi保存文件有不同的选项,对应于不同的命令,你可以从下面的命令中选择一个需要的::w 保存文件但不退出vi :w file 将修改另外保存到file中,不退出vi:w! ...
- django之 基于queryset和双下划线的跨表查询
前面篇随笔写的是基于对象的跨表查询:对象.objects.filter(...) 对象.关联对象_set.all(...) -->反向 基于对象的跨表查询例如: book_obj= Book ...
- android 开发 View _13 绘制图片与BitmapShader位图的图像渲染器
BitmapShader位图的图像渲染器 TileMode 模式 Shader.TileMode.CLAMP 边缘拉伸. Shader.TileMode.MIRROR 在水平方向和垂直方向交替景象, ...
- leetcode406
public class Solution { public int[,] ReconstructQueue(int[,] people) { ) { return new int[,] { }; } ...
- UNITY 打包时提示sdk tools 或 sdk build tools版本低时可以直接点update 按钮进行更新
如题.如果不更新,而选择 : use newest version installed ,打包到结尾时可能会报错,莫名其妙的java错误 而且,SDK一旦被更新后,其所在目录的 SDK MANAGER ...
- php一次性大量数据入库解决方法
当有业务需求需要一次性循环n条数据,插入或更新数据库时,如果单纯的循环,插入/更新,会消耗太多的数据库资源 一下是一种简单的解决方案 数据库的insert 是可以批量更新的,当有大量数据循环i ...