>백엔드 개발 >PHP 문제 >PHP로 복권 프로그램을 구현하는 방법

PHP로 복권 프로그램을 구현하는 방법

藏色散人
藏色散人원래의
2020-07-27 10:26:005898검색

PHP에서 복권 프로그램을 구현하는 방법: 먼저 jquery 라이브러리 파일과 "jQueryRotate.js"를 헤드에 로드한 다음 "data.php"에 다차원 배열을 만든 다음 확률을 기준으로 적합한 숫자를 계산합니다. 배열 ID에 설정하고 마지막으로 getRand 메소드를 호출합니다.

PHP로 복권 프로그램을 구현하는 방법

추천: "PHP 튜토리얼"

준비

먼저, 복권 인터페이스는 디스크 그림과 포인터 그림 두 장을 사용합니다. 다른 필요에 따라 만들 수 있습니다. 다른 디스크 그림입니다.

그런 다음 html 페이지를 생성하고 예제에서는 본문에 다음 코드를 추가합니다.

<div class="demo"> 
    <div id="disk"></div> 
    <div id="start"><img src="start.png" id="startbtn"></div> 
</div>

#disk를 사용하여 디스크 배경 이미지를 배치하고 CSS에서 제어하고 #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

플래시를 사용하지 않고 포인터를 회전시키려면 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(&#39;中奖了!&#39;); 
                        } 
                 }); 
            } 
        } 
    }); 
});

위 코드가 구현되었습니다. 포인터 "복권 시작" 버튼을 클릭하면 포인터가 회전하기 시작하고 회전 각도는 3600+a입니다. 즉, 10회전 후에는 무작위로 생성된 각도로 회전합니다. a, 회전 각도가 3600+a도에 도달하면 회전을 중지합니다.

이징을 달성하려면 애니메이션 확장 플러그인과 애니메이션 확장 플러그인을 결합해야 한다는 점에 유의해야 합니다. 이징 플러그인은 이 글에서 소개됩니다: jQuery 이징 애니메이션 효과 확장

이 글은 턴테이블 포인터를 돌리는 과정을 완료했지만, 완전한 복권 프로그램이 되려면 복권 제어와 결합되어야 합니다. 다음 기사에서 이 기사에서는 PHP를 사용하여 복권 확률을 제어하는 ​​방법과 jQuery 및 PHP를 사용하여 복권의 대화형 프로세스를 완료하는 방법을 소개합니다.

PHP

먼저 복권 디스크의 경품에 따라 해당 각도와 당첨 확률을 설정합니다. data.php에서 다차원 배열을 구성합니다.

$prize_arr = array( 
    &#39;0&#39; => array(&#39;id&#39;=>1,&#39;min&#39;=>1,&#39;max&#39;=>29,&#39;prize&#39;=>&#39;一等奖&#39;,&#39;v&#39;=>1), 
    &#39;1&#39; => array(&#39;id&#39;=>2,&#39;min&#39;=>302,&#39;max&#39;=>328,&#39;prize&#39;=>&#39;二等奖&#39;,&#39;v&#39;=>2), 
    &#39;2&#39; => array(&#39;id&#39;=>3,&#39;min&#39;=>242,&#39;max&#39;=>268,&#39;prize&#39;=>&#39;三等奖&#39;,&#39;v&#39;=>5), 
    &#39;3&#39; => array(&#39;id&#39;=>4,&#39;min&#39;=>182,&#39;max&#39;=>208,&#39;prize&#39;=>&#39;四等奖&#39;,&#39;v&#39;=>7), 
    &#39;4&#39; => array(&#39;id&#39;=>5,&#39;min&#39;=>122,&#39;max&#39;=>148,&#39;prize&#39;=>&#39;五等奖&#39;,&#39;v&#39;=>10), 
    &#39;5&#39; => array(&#39;id&#39;=>6,&#39;min&#39;=>62,&#39;max&#39;=>88,&#39;prize&#39;=>&#39;六等奖&#39;,&#39;v&#39;=>25), 
    &#39;6&#39; => array(&#39;id&#39;=>7,&#39;min&#39;=>array(32,92,152,212,272,332), 
&#39;max&#39;=>array(58,118,178,238,298,358),&#39;prize&#39;=>&#39;七等奖&#39;,&#39;v&#39;=>50) 
);

Array $prize_arr, id가 사용됩니다. 서로 다른 상을 식별하기 위해 min은 디스크의 각 상 간격에 해당하는 최소 각도를 나타내고 max는 최대 각도를 나타냅니다. 예를 들어 1등에 해당하는 최소 각도는 0이고 최대 각도는 30입니다. 추첨 후 포인터가 인접한 두 상품의 중앙선을 가리키는 것을 방지하기 위해 최대값을 1로, 최대값을 29로 설정했습니다. 디스크에는 여러 개의 7등 상품이 있으므로 배열의 각 7등 상품에 해당하는 각도 범위를 설정합니다. Prize는 수상 내용을 나타내고, v는 당첨 확률을 나타냅니다. 배열에 포함된 7개의 보상 v의 합은 100입니다. v 값이 1이면 당첨 확률은 다음과 같습니다. 1% 등등.

당첨 확률 알고리즘과 관련하여 이 사이트의 기사: 뒤집기 복권을 구현하는 PHP+jQuery에는 고전적인 확률 알고리즘에 대한 소개가 있습니다. 이 기사는 코드를 직접 가져옵니다.

function getRand($proArr) { 
    $result = &#39;&#39;; 
 
    //概率数组的总概率精度 
    $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[&#39;id&#39;]] = $val[&#39;v&#39;]; 
} 
 
$rid = getRand($arr); //根据概率获取奖项id 
 
$res = $prize_arr[$rid-1]; //中奖项 
$min = $res[&#39;min&#39;]; 
$max = $res[&#39;max&#39;]; 
if($res[&#39;id&#39;]==7){ //七等奖 
    $i = mt_rand(0,5); 
    $result[&#39;angle&#39;] = mt_rand($min[$i],$max[$i]); 
}else{ 
    $result[&#39;angle&#39;] = mt_rand($min,$max); //随机生成一个角度 
} 
$result[&#39;prize&#39;] = $res[&#39;prize&#39;]; 
 
echo json_encode($result);

코드에서는 getRand()를 호출하여 확률 연산을 통해 얻은 보상을 얻은 다음 보상에 구성된 각도 범위에 따라 최소 각도와 최대 각도 사이의 각도 값을 생성하고 다음을 포함하는 배열을 구성합니다. 각도 각도와 상금이 최종적으로 json 형식으로 출력됩니다.

jQuery

위 내용을 바탕으로 프론트엔드 jQuery 코드를 수정합니다. "복권 시작" 버튼을 클릭하면 ajax 요청이 백그라운드 data.php로 전송되고, 요청이 성공하면 당첨 정보가 표시됩니다. 반환되면 포인터가 회전됩니다. 포인터의 최종 포인팅 위치를 data.php에서 반환된 각도 값으로 회전합니다.

$(function(){ 
     $("#startbtn").click(function(){ 
        lottery(); 
    }); 
}); 
function lottery(){ 
    $.ajax({ 
        type: &#39;POST&#39;, 
        url: &#39;data.php&#39;, 
        dataType: &#39;json&#39;, 
        cache: false, 
        error: function(){ 
            alert(&#39;出错了!&#39;); 
            return false; 
        }, 
        success:function(json){ 
            $("#startbtn").unbind(&#39;click&#39;).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(&#39;恭喜你,中得&#39;+p+&#39;\n还要再来一次吗?&#39;); 
                    if(con){ 
                        lottery(); 
                    }else{ 
                        return false; 
                    } 
                } 
            }); 
        } 
    }); 
}

사용자 정의 함수 lottery()를 작성합니다. lottery()에서 당첨 정보가 성공적으로 반환되면 회전 플러그인이 호출되어 회전 각도가 결정됩니다. 여기서는 1800+a를 사용하여 회전 각도를 나타냅니다. 즉, 6개의 원 + a도 회전한 후 포인터가 멈춥니다. 그런 다음 "복권 시작" 버튼을 클릭하면 lottery()를 호출합니다. , 캐러셀 추첨이 완료됩니다.

위 내용은 PHP로 복권 프로그램을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.