php で宝くじプログラムを実装するメソッド: 最初に jquery ライブラリ ファイルと「jQueryRotate.js」をヘッドに読み込み、次に「data.php」に多次元配列を構築し、確率に基づいて計算します。配列に設定して条件を満たすIDを取得し、最後にgetRandメソッドを呼び出します。
おすすめ:「PHP チュートリアル 」
準備作業
まず、インターフェースにはディスク画像とポインタ画像の 2 つの画像が使用されており、実際のアプリケーションでは、ニーズに応じて異なるディスク画像を作成できます。
次に、HTML ページを作成します。この例では、本文に次のコードを追加します:
<div class="demo"> <div id="disk"></div> <div id="start"><img src="start.png" id="startbtn"></div> </div>
#disk を使用してディスクの背景画像を配置し、CSS で制御し、 #ポインターの配置を開始します。Picture start.png。
次に、CSS を使用してポインターとディスクの位置を制御します。コードは次のとおりです:
.demo{width:417px; height:417px; position:relative; margin:50px auto} #disk{width:417px; height:417px; background:url(disk.jpg) no-repeat} #start{width:163px; height:320px; position:absolute; top:46px; left:130px;} #start img{cursor:pointer}
jQuery
ポインターを回転させずに回転させたい場合Flash を使用すると、HTML5 キャンバスを使用して画像を回転できますが、ブラウザの互換性を考慮する必要があります。jQuery プラグインは画像 (任意の HTML 要素) を完全に回転でき、主要なブラウザと互換性があります。それが jQueryRotate.js です。
jQueryRotate.js を使用すると、画像を任意の角度に回転したり、マウス イベントをバインドしたり、アニメーション効果や回転プロセスのコールバック関数を設定したりできます。
使用方法は、もちろん、最初に jquery ライブラリ ファイルと jQueryRotate.js をヘッドに読み込み、次のコードを使用してポインタの回転を実現します。
$(function(){ $("#startbtn").rotate({ bind:{ click:function(){//绑定click单击事件 var a = Math.floor(Math.random() * 360); //生成随机数 $(this).rotate({ duration:3000,//转动时间间隔(转动速度) angle: 0, //开始角度 animateTo:3600+a, //转动角度,10圈+ easing: $.easing.easeOutSine, //动画扩展 callback: function(){ //回调函数 alert('中奖了!'); } }); } } }); });
上記のコードは実装されています。ポインターの「抽選開始」ボタンをクリックすると、ポインターが回転を開始し、回転角度は 3600 度、つまり 10 回転後に回転します。角度aをランダムに生成し、回転角度が3600度に達したら回転をa度で停止します。
イージング: アニメーション拡張機能を実現するには、アニメーション拡張機能プラグインと組み合わせる必要があることに注意してください。イージング プラグインはこの記事で紹介されています: jQuery Easing Animation Effect Extension
この記事ではターンテーブル ポインタを回転させるプロセスは完了していますが、完全な宝くじプログラムとみなすには、宝くじ制御と組み合わせる必要があります。 . We will follow this この記事では、PHP を使用して宝くじの確率を制御する方法と、jQuery と PHP を使用して宝くじの対話型プロセスを完了する方法を紹介しますので、ご期待ください。
PHP
まず、宝くじディスクの賞金に応じて、対応する角度と当選確率を設定し、多次元配列を構築します:
$prize_arr = array( '0' => array('id'=>1,'min'=>1,'max'=>29,'prize'=>'一等奖','v'=>1), '1' => array('id'=>2,'min'=>302,'max'=>328,'prize'=>'二等奖','v'=>2), '2' => array('id'=>3,'min'=>242,'max'=>268,'prize'=>'三等奖','v'=>5), '3' => array('id'=>4,'min'=>182,'max'=>208,'prize'=>'四等奖','v'=>7), '4' => array('id'=>5,'min'=>122,'max'=>148,'prize'=>'五等奖','v'=>10), '5' => array('id'=>6,'min'=>62,'max'=>88,'prize'=>'六等奖','v'=>25), '6' => array('id'=>7,'min'=>array(32,92,152,212,272,332), 'max'=>array(58,118,178,238,298,358),'prize'=>'七等奖','v'=>50) );
Array $prize_arr、id はさまざまな賞を識別するために使用されます。min はディスク内の各賞間隔に対応する最小角度を表し、max は最大角度 (1 等に対応する最小角度など) を表します。 : 0、最大角度は 30 です。ここでは、抽選後にポインターが 2 つの隣接する賞品の中心線を指すのを防ぐために、最大値を 1 に設定し、最大値を 29 に設定します。ディスク内には複数の 7 等が存在するため、配列内の各 7 等に対応する角度範囲を設定します。賞は賞の内容を表し、v は当選確率を表します。配列内の 7 つの賞の v の合計は 100 であることがわかります。v の値が 1 の場合、当選確率は であることを意味します。 1% など。
当選確率アルゴリズムについては、このサイトの記事「PHP jQuery Implementing the Flip Lotry」で古典的な確率アルゴリズムを紹介しており、この記事ではコードを直接紹介しています。
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; }
関数 getRand() は、配列に設定された確率に基づいて限定 ID を計算します。その後、getRand() を呼び出すことができます。
foreach ($prize_arr as $key => $val) { $arr[$val['id']] = $val['v']; } $rid = getRand($arr); //根据概率获取奖项id $res = $prize_arr[$rid-1]; //中奖项 $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);
コードでは、getRand() を呼び出して確率演算によって得られた賞を取得し、賞に設定された角度範囲に従って最小角度と最大角度の間の角度値を生成します。角度と賞品を含む配列を構築し、最終的に json 形式で出力します。
jQuery
上記を踏まえてフロントエンドのjQueryコードを修正し、「抽選開始」ボタンをクリックするとバックグラウンドのdata.phpにajaxリクエストが送信されます。リクエストは成功し、受賞情報を返した後、data.php によって返された角度の値にポインタを回転させます。
$(function(){ $("#startbtn").click(function(){ lottery(); }); }); function lottery(){ $.ajax({ type: 'POST', url: 'data.php', 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; } } }); } }); }
カスタム関数lottery()を構築します。lottery()でdata.phpにPOSTリクエストを送信します。当選情報が正常に返された場合、回転プラグインが呼び出されて回転が開始されます。回転角度は背景によって返される角度です。決定、ここでは回転角度を表すのに 1800 a を使用します。つまり、ポインターは 1 度あたり 6 回回転した後に停止し、「開始」ボタンをクリックしたときに、lottery() を呼び出します。抽選」ボタンを押すとカルーセル抽選が完了します。
以上がPHPで宝くじプログラムを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。