PHP幸运大转盘源码,支持ThinkPHP

原理

先看图

可以看到1-6等奖都只有1个 ,7等奖有6个。指针默认指向上图位置,记为0°。

每个奖项对应不同的角度,圆的角度为360°,分成12块,所以每块为30°。

为了防止指针指着相邻两个将向之间的线,所以记为一等奖的最小角度为1°,最大角度为29°。同理可找出其他奖项的角度,这要注意,七等奖有6个。

然后呢,每个奖项都有不同的中奖概率,我们根据概率来获取奖项(概率可以设置为0,你懂的~),获取奖品后,在根据最大和最小角度生成一个随机数,来让指针旋转即可..

HTML代码

代码是基于thinkphp的,如果你的不是,修改里面的url路径就行了

  1. <!DOCTYPE HTML>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <meta name="keywords" content="幸运大转盘,cnsecer.com" />
  6. <meta name="description" content="幸运大转盘" />
  7. <title>幸运大转盘</title>
  8. <style type="text/css">
  9. .demo{width:417px; height:417px; position:relative; margin:50px auto}
  10. #disk{width:417px; height:417px; background:url(__STATIC__/images/disk.jpg) no-repeat}
  11. #start{width:163px; height:320px; position:absolute; top:46px; left:130px;}
  12. #start img{cursor:pointer}
  13. </style>
  14. <script src="http://cdn.bootcss.com/jquery/1.11.0/jquery.min.js"></script>
  15. <script type="text/javascript" src="__STATIC__/js/jQueryRotate.2.2.js"></script>
  16. <script type="text/javascript" src="__STATIC__/js/jquery.easing.min.js"></script>
  17. <script type="text/javascript">
  18. $(function(){
  19. $("#startbtn").click(function(){
  20. lottery();
  21. });
  22. });
  23. function lottery(){
  24. $.ajax({
  25. type: ‘POST‘,
  26. url: ‘{:U(\‘game/run\‘)}‘, //提交地址 改为你自己的
  27. dataType: ‘json‘,
  28. cache: false,
  29. error: function(){
  30. alert(‘出错了!‘);
  31. return false;
  32. },
  33. success:function(json){
  34. $("#startbtn").unbind(‘click‘).css("cursor","default");
  35. var a = json.angle; //角度
  36. var p = json.prize; //奖项
  37. $("#startbtn").rotate({
  38. duration:3000, //转动时间
  39. angle: 0,
  40. animateTo:1800+a, //转动角度
  41. easing: $.easing.easeOutSine,
  42. callback: function(){
  43. var con = confirm(‘恭喜你,中得‘+p+‘\n还要再来一次吗?‘);
  44. if(con){
  45. lottery();
  46. }else{
  47. return false;
  48. }
  49. }
  50. });
  51. }
  52. });
  53. }
  54. </script>
  55. </head>
  56. <body>
  57. <div id="main">
  58. <div class="msg"></div>
  59. <div class="demo">
  60. <div id="disk"></div>
  61. <div id="start"><img src="__STATIC__/images/start.png" id="startbtn"></div>
  62. </div>
  63. </div>
  64. <div id="footer">
  65. </div>
  66. </body>
  67. </html>

后台处理代码

  1. <?php
  2. namespace Home\Controller;
  3. use Think\Controller;
  4. class GameController extends BaseController{
  5. public function index(){
  6. $this->display("index");
  7. }
  8. public function run(){
  9. $proArr = array();
  10. //v 是中奖概率 相加之后最好为100的整数倍 id为奖品编号 min max 分别为最大和最小角度
  11. $prize_arr = array(
  12. ‘0‘ => array(‘id‘=>1,‘min‘=>1,‘max‘=>29,‘prize‘=>‘一等奖‘,‘v‘=>0),
  13. ‘1‘ => array(‘id‘=>2,‘min‘=>302,‘max‘=>328,‘prize‘=>‘二等奖‘,‘v‘=>0),
  14. ‘2‘ => array(‘id‘=>3,‘min‘=>242,‘max‘=>268,‘prize‘=>‘三等奖‘,‘v‘=>0),
  15. ‘3‘ => array(‘id‘=>4,‘min‘=>182,‘max‘=>208,‘prize‘=>‘四等奖‘,‘v‘=>0),
  16. ‘4‘ => array(‘id‘=>5,‘min‘=>122,‘max‘=>148,‘prize‘=>‘五等奖‘,‘v‘=>0),
  17. ‘5‘ => array(‘id‘=>6,‘min‘=>62,‘max‘=>88,‘prize‘=>‘六等奖‘,‘v‘=>0),
  18. ‘6‘ => array(‘id‘=>7,‘min‘=>array(32,92,152,212,272,332), ‘max‘=>array(58,118,178,238,298,358),‘prize‘=>‘七等奖‘,‘v‘=>100)
  19. );
  20. //获取随机奖品
  21. foreach ($prize_arr as $v) {
  22. $proArr[$v[‘id‘]] = $v[‘v‘];
  23. }
  24. $rid = $this->getRand($proArr); //根据概率获取奖项id
  25. $res = $prize_arr[$rid-1]; //中奖项
  26. // dd($res);die;
  27. $min = $res[‘min‘];
  28. $max = $res[‘max‘];
  29. if($res[‘id‘]==7){ //七等奖
  30. $i = mt_rand(0,5);
  31. $result[‘angle‘] = mt_rand($min[$i],$max[$i]);
  32. }else{
  33. $result[‘angle‘] = mt_rand($min,$max); //随机生成一个角度
  34. }
  35. $result[‘prize‘] = $res[‘prize‘];
  36. echo json_encode($result);
  37. }
  38. protected function getRand($proArr) {
  39. $result = ‘‘;
  40. //概率数组的总概率精度
  41. $proSum = array_sum($proArr);
  42. //概率数组循环
  43. foreach ($proArr as $key => $proCur) {
  44. $randNum = mt_rand(1, $proSum);
  45. if ($randNum <= $proCur) {
  46. $result = $key;
  47. break;
  48. } else {
  49. $proSum -= $proCur;
  50. }
  51. }
  52. unset ($proArr);
  53. return $result;
  54. }
  55. }
时间: 2024-07-31 02:53:34

PHP幸运大转盘源码,支持ThinkPHP的相关文章

WP8.1&amp;Win10幸运大转盘源码分享

先AD一下我的群:Win10开发者群:53078485 最近在写一个APP,其中需要一个转盘动画的源码,找了很多但是都没有找到,无奈只好自己来写,写完效果自己还是比较满意的,分享出来,有需要的童鞋可以拿去用. 先来一张效果图: 功能: 1.五个奖项的中奖几率可以自由调整. 2.用户的金币信息云端存储. 3.每天可以免费抽奖一次. 4.金币信息自由定义. 5.其他,请自行挖掘. 需要准备的: A.图片素材:demo包里有,可以自行提取出来使用,我这个转盘感觉不是特别圆润,也可以自己作图来替换掉.

(素材源码)猫猫学iOS(四十六)之网易彩票幸运大转盘

猫猫分享,必须精品 原创文章,欢迎转载.转载请注明:翟乃玉的博客 地址:http://blog.csdn.net/u013357243?viewmode=contents 素材源码地址:http://download.csdn.net/detail/u013357243/8713827 效果 代码: NYWheel NYWheel.h // // NYWheel.h // 网易彩票幸运大转盘 // // Created by apple on 15-5-18. // Copyright (c)

asp.net+jQueryRotate开发幸运大转盘

在线抽奖程序在非常多站点上非常多,抽奖形式多种多样.Flash抽奖偏多,本文将给大家介绍jQuery转盘抽奖.结合代码实例将使用jQuery和asp.net来实现转盘抽奖程序,为了便于理解,文章贴出实现源码作为分享.通过转动转盘指针来完毕抽奖的一种抽奖形式.依据旋转角度来控制指针停留的位置--幸运大转盘. 1.先来张幸运大抽奖效果图 2.Default.aspx页面代码 <!-- 很多其它技术分享请看博客:http://blog.csdn.net/fuyifang -->  <span

php开发搭建OA信用盘幸运飞艇系统源码网站常见问题总结

PHP 是一种易于学习和使用的服务器端脚本语言.语法吸收了C语言.Java和Perl的特点,利于学习,使用广泛,主要适用于Web开发领域.PHP 独特的语法混合了C.Java.Perl以及PHP自创的语法.它可以比CGI或者Perl更快速地执行动态网页.用PHP做出的动态页面与其他的编程语言相比,PHP是将程序嵌入到HTML(标准通用标记语言下的一个应用)文档中去执行,执行效率比完全生成HTML标记的CGI要高许多:PHP还可以执行编译后代码,编译可以达到加密和优化代码运行,使代码运行更快. 现

html5简单拖拽实现自动左右贴边+幸运大转盘

此篇文章主要实现两个功能: 1.点击屏幕下方签到悬浮按钮: 2.弹出幸运大转盘,转盘抽奖签到 效果如图: 鉴于初入前端之路,方法有限,仅供参考. 在网上找了很多拖拽的js实现方式,大部分都是这一种,html5的touch事件,但是没找到点击按钮可以向两边贴边的拖拽,所以自己稍微修改了一点.代码如下: //签到按钮拖拽 var dragBox = document.getElementById('signCorner'); //拖拽中 dragBox.addEventListener('touch

【微信公众平台开发】微信幸运大转盘

需要js插件(下载包地址:http://download.csdn.net/detail/wyz365889/7798255): jquery jQueryRotate.2.2.js jquery.easing.min.js 前端显示代码: <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <meta name=

jQuery幸运大转盘_jQuery+PHP抽奖程序的简单实现

在线实例 查看演示 完整代码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv

js幸运大转盘开发

最终效果实例下载:http://www.oschina.net/code/snippet_2352644_54997 一.大转盘准备工作 网上的一个抽奖大转盘实例http://www.jq22.com/yanshi2252 这就是我们要开发的效果,不过我们是让指针转,我们先分析这个效果: 结构有2部分,上面是指针背景图,下面是奖项图 点击指针元素开始抽奖,会转动一定圈数停下来 停下来的位置指针指使那个奖项,就会弹出获奖信息提示 这是参考效果,我们分析自己的大概实现: 同样上下2部分 点击指针转动

ECMALL FLASH幸运大转盘升级

大转盘新升级描述: 1.新修复一些bug 2.底层代码更优化 3.更方便API接口调用 ECMALL  FLASH幸运大转盘积分抽奖描述: 1:可以设置每个奖品的中奖概率,后台自由设置: 2:可以设置每个奖品的数量,当该奖品全部被抽出时不会再抽中此奖品,这样更好地预先制定奖品总额. 3:中奖公告内容设置,每个奖品的中奖后在中奖公告内显示出来: 4:抽奖程序与商城同步登录与退出,采用的为一个会员系统,更加无缝的结合在一起: 5:记录每个抽奖记录,无论管理员在后台还是会员在自己的管理中心均可以查看中