PHP幸運大轉盤源碼,支持ThinkPHP

原理

先看圖javascript

PHP幸運大轉盤源碼,支持ThinkPHP --大轉盤

能夠看到1-6等獎都只有1個 ,7等獎有6個。指針默認指向上圖位置,記爲0°。php

每一個獎項對應不一樣的角度,圓的角度爲360°,分紅12塊,因此每塊爲30°。css

爲了防止指針指着相鄰兩個將向之間的線,因此記爲一等獎的最小角度爲1°,最大角度爲29°。同理可找出其餘獎項的角度,這要注意,七等獎有6個。html

而後呢,每一個獎項都有不一樣的中獎機率,咱們根據機率來獲取獎項(機率能夠設置爲0,你懂的~),獲取獎品後,在根據最大和最小角度生成一個隨機數,來讓指針旋轉便可..java

HTML代碼

代碼是基於thinkphp的,若是你的不是,修改裏面的url路徑就好了jquery

  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.  
  55. </script>
  56. </head>
  57.  
  58. <body>
  59.  
  60. <div id="main">
  61. <div class="msg"></div>
  62. <div class="demo">
  63. <div id="disk"></div>
  64. <div id="start"><img src="__STATIC__/images/start.png" id="startbtn"></div>
  65. </div>
  66. </div>
  67. <div id="footer">
  68. </div>
  69.  
  70. </body>
  71. </html>

 

後臺處理代碼

  1. <?php
  2.  
  3. namespace Home\Controller;
  4.  
  5. use Think\Controller;
  6.  
  7. class GameController extends BaseController{
  8.  
  9. public function index(){
  10. $this->display("index");
  11. }
  12.  
  13. public function run(){
  14. $proArr = array();
  15. //v 是中獎機率 相加以後最好爲100的整數倍 id爲獎品編號 min max 分別爲最大和最小角度
  16. $prize_arr = array(
  17. '0' => array('id'=>1,'min'=>1,'max'=>29,'prize'=>'一等獎','v'=>0),
  18. '1' => array('id'=>2,'min'=>302,'max'=>328,'prize'=>'二等獎','v'=>0),
  19. '2' => array('id'=>3,'min'=>242,'max'=>268,'prize'=>'三等獎','v'=>0),
  20. '3' => array('id'=>4,'min'=>182,'max'=>208,'prize'=>'四等獎','v'=>0),
  21. '4' => array('id'=>5,'min'=>122,'max'=>148,'prize'=>'五等獎','v'=>0),
  22. '5' => array('id'=>6,'min'=>62,'max'=>88,'prize'=>'六等獎','v'=>0),
  23. '6' => array('id'=>7,'min'=>array(32,92,152,212,272,332), 'max'=>array(58,118,178,238,298,358),'prize'=>'七等獎','v'=>100)
  24. );
  25. //獲取隨機獎品
  26. foreach ($prize_arr as $v) {
  27. $proArr[$v['id']] = $v['v'];
  28. }
  29. $rid = $this->getRand($proArr); //根據機率獲取獎項id
  30.  
  31. $res = $prize_arr[$rid-1]; //中獎項
  32. // dd($res);die;
  33. $min = $res['min'];
  34. $max = $res['max'];
  35.  
  36. if($res['id']==7){ //七等獎
  37. $i = mt_rand(0,5);
  38. $result['angle'] = mt_rand($min[$i],$max[$i]);
  39. }else{
  40. $result['angle'] = mt_rand($min,$max); //隨機生成一個角度
  41. }
  42. $result['prize'] = $res['prize'];
  43.  
  44. echo json_encode($result);
  45. }
  46. protected function getRand($proArr) {
  47. $result = '';
  48.  
  49. //機率數組的總機率精度
  50. $proSum = array_sum($proArr);
  51.  
  52. //機率數組循環
  53. foreach ($proArr as $key => $proCur) {
  54. $randNum = mt_rand(1, $proSum);
  55. if ($randNum <= $proCur) {
  56. $result = $key;
  57. break;
  58. } else {
  59. $proSum -= $proCur;
  60. }
  61. }
  62. unset ($proArr);
  63.  
  64. return $result;
  65. }
  66. }
相關文章
相關標籤/搜索