현재 위치 - 주공해몽공식사이트 - 랜덤 번호 뽑기 점술 - 플립 그림은 어떻게 합니까?

플립 그림은 어떻게 합니까?

TV 프로그램에서는 잠시 추첨이라는 추첨 형식이 있다. (윌리엄 셰익스피어, 추첨, 추첨, 추첨, 추첨, 추첨, 추첨) 무대에는 벽이 하나 있는데, 벽에는 몇 개의 큰 사각형이 놓여 있다. 사회자나 복권 당첨자는 해당 사각형을 열어 당첨 결과를 밝힐 수 있다. 비슷한 추첨 형식도 인터넷에 적용될 수 있습니다. 이 문서에서는 PHP+jQuery 를 사용하여 카드 뒤집기 복권 프로그램을 구현하는 방법을 설명합니다.

데모 보기

복권을 뒤집는 과정: 홈페이지는 6 개의 정사각형을 제공하고, 숫자 1-6 으로 6 개의 다른 정사각형을 차례로 나타낸다. 복권 당첨자가 6 개의 사각형 중 하나를 클릭했을 때, 그 상자는 뒷면으로 돌아서서 복권 당첨 정보를 보여 주었다. 간단해 보이는 운영 절차로, 웹 기술에 대한 많은 지식이 포함되어 있으므로 이 문서의 독자들은 jQuery 와 PHP 에 익숙해야 합니다.

하이퍼텍스트 마크업 언어

이 사이트에서 jQuery+PHP+Mysql 로 경품 추첨을 하는 문장 한 편과는 달리, 경품 추첨은 시작 및 종료 버튼을 제공하지 않으며, 추첨자가 이들 중 하나를 선택해 경품 추첨을 완료하기로 결정했기 때문에, 우리는 페이지에 6 개의 정사각형을 올려놓고 1-6 으로 다른 정사각형을 표시했다.

& ltul id = "prize">

& lt 리 클래스 = "red" 제목 = "클릭 추첨" >1< /리>

& lt 리 클래스 = "그린" 제목 = "클릭 추첨" > 2</ 리>

& lt 리 클래스 = "블루" 제목 = "클릭 추첨" > 3</ 리>

& lt 리 class="purple" title= "클릭 추첨" > 4</ 리>

& lt 리 class="olive" title= "클릭 추첨" > 5</ 리>

& lt 리 클래스 = "브라운" 제목 = "클릭 추첨" > 6</ 리>

& lt/ul & gt;;

& ltdiv & gt & ltahref = "#" id = "view other"> 기타 열기

& & ltdiv id = "data">& lt/div & gt;;

Html 구조에서는 순서가 지정되지 않은 목록을 사용하여 6 개의 서로 다른 사각형을 배치합니다. 각 Li 의 clas 속성은 상자의 색상을 나타냅니다. 목록 아래에는 a#viewother 링크가 있습니다. 추첨을 마친 후 클릭하여 다른 사각형 뒷면에 있는 당첨 정보를 볼 수 있습니다. 기본적으로 숨겨져 있습니다. 다음은 div # 데이터입니다. 이 데이터는 비어 있습니다. 추첨되지 않은 다른 상에 대한 데이터를 임시로 보관하는 데 사용됩니다. 다음 코드를 참조하십시오. 6 개의 정사각형을 나란히 편안하게 보이게 하려면 CSS 로 미화해야 합니다. 자세한 내용은 demo 를 참고하고, CSS 코드는 이 글에서 붙이지 않습니다.

서버측 프로그래밍 언어 (professional hypertext preprocessor 의 약어)

먼저 백그라운드 PHP 프로세스를 완료하겠습니다. PHP 의 주요 업무는 경품과 그에 상응하는 당첨 확률을 구성하는 것이다. 첫 페이지에서 플립 상자를 클릭하면 Ajax 요청이 백그라운드 PHP 로 전송됩니다. 그런 다음 백그라운드 PHP 는 구성 확률에 따라 확률 알고리즘을 통해 당첨 결과를 제공하고 미당첨 당첨 정보를 JSON 데이터 형식으로 첫 페이지에 보냅니다.

확률 계산 함수를 먼저 살펴 보겠습니다.

함수 get_rand($proArr) {

$ result = \ "\";

//확률 배열의 총 확률 정확도

$ prosum = array _ sum ($ proarr);

//확률 배열 루프

Foreach ($ proarras $ key = > $ procur) {

$randNum = mt_rand( 1, $ prosum);

If($ rand num<;; = $proCur) {

$ result = $ key

깨뜨리다

} 그렇지 않으면 {

$ proSum-= $ proCur;;

}

}

Unset ($ proarr);

$ result 를 반환합니다

}

위의 코드는 고전적인 확률 알고리즘입니다. $proArr 는 사전 설정 배열입니다. 배열이 array (100,200,300,400) 라고 가정합니다. 첫 번째 숫자가 1, 1000 의 확률 범위 내에 있는지 먼저 필터링합니다. 그렇지 않다면, 그럴 것이다. 마지막으로, 항상 요구 사항을 충족하는 숫자가 있습니다. 상자 안의 물건을 만지는 것과 같다. 첫 번째는 아니고, 두 번째는 아니고, 세 번째는 아니고, 마지막은 확실히 그렇다. 이 알고리즘은 간단하고 매우 효과적입니다. 관건은 이 알고리즘이 이전 프로젝트에 적용되었다는 것입니다. 특히 데이터 양이 많은 프로젝트에서는 더욱 그렇습니다.

다음으로 PHP 를 통해 보상을 구성합니다.

$prize_arr = array (

0' => 배열 ('id' => 1,' 상' = & gtTablet',' v' =>/kloc-0-0

1'= >; 배열 ('id' =>2,' 경품' = > 디지털 카메라',' v' =>5),

2' = >; 배열 ('id' =>3,' 경품' = > 스피커 장비',' v' => 10),

3' = >; 배열 ('id' =>4,' 경품' = > 4Gu 디스크',' v' => 12),

4' = >; 배열 ('id' =>5,' 경품' = > 10 qun',' v' = & gt22),

5' = >; 배열 ('id' =>6,' 상' = > 아마 다음에 네가 이길 수 있을 거야,' v' = & gt50),

);

이번 복권에 대한 모든 당첨 정보를 기록한 2 차원 배열입니다. id 는 당첨 등급을 나타내고, prize 는 상금을 나타내고, V 는 당첨 확률을 나타냅니다. V 는 정수여야 합니다. 해당 상에 해당하는 V 를 0 으로 설정할 수 있습니다. 즉, 수상 확률은 0, 배열의 V 의 합 (radix) 을 나타냅니다. 기수가 클수록 확률이 더 정확하다. 이 예에서 V 의 합은 100 이므로 태블릿의 당첨 확률은 1% 입니다. V 의 합계가 10000 이면 당첨 확률은 만분의 1 이다.

첫 페이지가 요청될 때마다 PHP 순환상은 배열을 설정하고 확률 계산 함수 get_rand 를 통해 추출된 상 id 를 얻습니다. 당첨된 상품을 배열 $res['yes'] 에 보관하고, 당첨되지 않은 나머지 정보는 $res['no'] 에 보관하고, 마지막으로 JSON 번호 데이터를 홈페이지로 출력합니다.

Foreach ($ prize _ arras $ key = > $val) {

$ arr [$ val ['id']] = $ val ['v'];

}

$ rid = get _ rand ($ arr); //확률에 따라 수상 id 를 얻습니다.

$ RES ['yes'] = $ prize _ arr [$ rid-1] ['prize']; //수상

Unset ($ prize _ arr [$ rid-1]); //배열에서 우승한 상품을 제거하고 실패한 상품을 남기다.

Shuffle ($ prize _ arr); //배열 순서를 어지럽히다

For($ I = 0;; $ I & ltcount ($ prize _ arr); $i++){

$ pr [] = $ prize _ arr [$ I] ['prize'];

}

$ $ RES[' no ']= $ pr;;

Echo JSON _ encode ($ RES);

당첨 정보를 직접 출력하면 되는데 왜 당첨되지 않은 정보도 홈페이지에 출력해야 하나요? 뒤에 있는 프런트 엔드 코드를 보세요.

JQuery

첫째, 뒤집기 효과를 얻으려면 뒤집기 플러그인과 jquery, jqueryui 관련 플러그인을 미리 설치해야 합니다.

& lt script type = "text/JavaScript" src = "js/jquery-1.7.2.min.js" & & lt/스크립트 >

& lt script type = "text/JavaScript" src = "js/jquery-ui-1.7.2.custom .. & lt/스크립트 >

& lt scripttype = "text/JavaScript" src = "js/jquery.flip.min.js" > & lt/스크립트 >

홈페이지 http://lab.smashup.it/flip/. 에서 플립 플러그인에 대해 자세히 알아볼 수 있습니다

다음으로, 우리는 페이지의 상자를 클릭하여 추첨을 완성한다.

$(function(){

$ ("# 상 이"). Each(function(){

Var p = $ (이);

Var c = $ (이거). Attr ('클래스');

P.css ("배경색", c);

P.click(function(){

$ ("# 상 이"). 바인딩 해제 ("클릭");

$.getJSON("data.php ",function(json){

Var prize = json.yes// 경품 추첨.

페이지 넘기기 (

방향:' rl',//회전 방향 rl: 오른쪽에서 왼쪽으로.

내용: 경품,//뒤집기 후 표시되는 내용이 경품입니다.

색상: c,//배경색

OnEnd: function(){ // 뒤집기.

P.css({"font-size":"22px ","line-height ":"100px "});

P.attr("id ","r "); //당첨 상자의 id 를 표시합니다.

$("#viewother "). 쇼 (); //보기 기타 버튼 표시

$ ("# 상 이"). 바인딩 해제 ("클릭")

。 Css (커서, 기본값). Removeattr ("제목");

}

});

$("#data ") 입니다. Data("nolist ",json.no); //당첨 정보를 저장합니다.

});

});

});

});

코드에서 먼저 6 개의 사각형을 반복하고 각 사각형에 대해 다른 배경색을 초기화합니다. 현재 사각형을 클릭한 후 $.getJSON 을 사용하여 Ajax 요청을 백그라운드 data.php 에 보냅니다. 요청이 성공하면 플립 플러그인 플립 상자를 호출합니다. 뒤집기 후 당첨상자 id 를 표시하고, 네모난 클릭 이벤트인 unbind('click') 를 동결하여 추첨을 한 번만 할 수 있습니다. 마지막으로 선택하지 않은 경품 정보는 data () 를 통해 #data 에 저장됩니다.

사실, 이 단계에 나팔을 흔드는 것은 이미 완성되었다. 다른 네모난 뒷면에 무엇이 숨겨져 있는지 보기 위해 추첨을 한 후 다른 네모난 뒷면을 볼 수 있는 링크를 제공했다. 이 링크를 클릭하면 다른 다섯 개의 사각형이 회전하고 뒷면에 상품 정보가 표시됩니다.

$(function(){

$("#viewother "). (함수 () {를 클릭합니다

Var 마이데이터 = $ ("# data"). 데이터 ("nolist"); //데이터 가져오기

Var 마이데이터 2 = eval (마이데이터); //JSON 은 eval () 함수를 통해 배열로 변환할 수 있습니다.

$ ("# 상 이"). ($('#r')[0]) 이 아닙니다. 각 (함수 (인덱스) {

Var pr = $ (이);

Pr.flip({

방향:' Bt' ,

색상:' 연한 회색' ,

내용: 마이데이터 2 [인덱스],//경품 정보 (미추출)

OnEnd:function(){

Pr.css({"font-size":"22px ","line-height":" 100px ","color "

$("#viewother "). Hide ();

}

});

});

$("#data ") 입니다. Removedata ("nolist");

});

});

#viewother 를 클릭하면 복권에 저장된 당첨 데이터를 받아 배열로 변환하고 5 개의 사각형을 뒤집고 해당 사각형에 당첨 정보를 표시할 수 있습니다. 최종 렌더링도:

왜 내가 대상을 못 받았지?

많은 유사한 추첨 행사에서 참가자들은 왕왕 대상을 받을 수 없다. 절차 적 관점에서 예를 들어 보겠습니다. 만약 내가 추첨 행사의 주최자라면, 나는 6 개의 상을 설치했는데, 각 상은 서로 다른 당첨 확률을 가지고 있다. 1 등상이 리무진인데 당첨 확률을 0 으로 설정하면 무슨 뜻인가요? 이것은 추첨에 참여한 사람들이 아무리 피워도 이 리무진을 영원히 얻을 수 없다는 것을 의미한다. 주최자가 나머지 사각형을 한 번 뒤질 때마다 참가자들은 1 등상이 방금 뽑은 네모난 숫자 바로 아래에 있을 수 있다는 것을 알게 되며, 모두 자신이 운이 나쁘다고 탓할 수 있다. (윌리엄 셰익스피어, 햄릿, 행운명언) 정말 운이 나쁜가요? 실제로 참가자가 상자를 뒤집을 때, 프로그램은 이미 승리의 상품을 결정했지만, 다른 상자를 뒤집어 본 상품은 연기탄일 뿐 관객과 참가자들을 곤혹스럽게 했다. 이 문장 다 보고 싶은데, TV 프로그램에서 뒤집힌 복권이 느끼하다는 걸 알 수 있을 것 같아요. 다시는 복색공을 선택하지 않을 수도 있어요. (데이비드 아셀, Northern Exposure (미국 TV 드라마), 스포츠명언)

버그 복구: 열심 있는 네티즌 한천과 눈물에 지속적으로 뒤집을 수 있는 버그의 피드백에 감사드립니다. 해결 방법은 Ajax 전에 클릭 이벤트 뒤에 코드를 삽입하는 click 이벤트를 제한하는 것입니다.

$ ("# 상 이"). 바인딩 해제 ("클릭");