jQuery+PHP实现的掷色子抽奖游戏实例


Posted in PHP onJanuary 04, 2015

本文实例讲述了jQuery+PHP实现的掷色子抽奖游戏详细步骤。分享给大家供大家参考。具体分析如下:

该游戏是以大富翁游戏为背景,综合运用jQuery和PHP知识,设计出以掷色子点数来达成抽奖的效果,当然抽奖概率是可控的,开发者可以将本实例稍作修改即可运用到网站中的抽奖活动场景中。效果图如下:

jQuery+PHP实现的掷色子抽奖游戏实例

完整实例代码点击此处本站下载。

HTML部分:

首先我们需要准备两粒色子和奖品素材,这些作者已经打包上传了,请大家放心下载。我们将在html页面中写下如下的html结构代码,.wrap用来放置色子和提示信息,#prize则是用来放置奖品的。

<div class='demo'> 

    <div class='wrap'> 

        <div id='msg'></div> 

           <div id='dice'><span class='dice dice_1' id='dice1'></span> 

        <span class='dice dice_6' id='dice2'></span></div> 

    </div> 

    <ul id='prize'> 

        <li id='d_0'><img src='images/0.gif' alt='开始'></li> 

        <li id='d_1'><img src='images/1.gif' alt='现金100元'></li> 

        <li id='d_2'><img src='images/2.gif' alt='泰迪熊宝宝'></li> 

        <li id='d_3'><img src='images/7.gif' alt='谢谢参与'></li> 

        <li id='d_4'><img src='images/3.gif' alt='iphone 5s'></li> 

        <li id='d_5'><img src='images/4.gif' alt='笔记本电脑'></li> 

        <li id='d_6'><img src='images/7.gif' alt='谢谢参与'></li> 

        <li id='d_7'><img src='images/5.gif' alt='单反相机'></li> 

        <li id='d_8'><img src='images/6.gif' alt='轿车'></li> 

        <li id='d_9'><img src='images/7.gif' alt='谢谢参与'></li> 

    </ul> 

</div>

CSS部分:

我们要用CSS技术来将页面布局合理规范化,我们将奖品围成一个矩形,共10个位置,将两粒色子定位在矩形的中央,抽奖时可以直接点击中间的色子。这些我们可以用CSS的定位技术来实现页面布局。

.demo{width:650px; height:420px; margin:60px auto 10px auto; position:relative; } 

.wrap{width:200px; height:100px; position:absolute; margin-left:220px; margin-top:140px; z-index:1000;} 

#msg{display:none;width:50px; height:20px; padding:4px; background:#ffc; border:1px solid #fc9;  

text-align:center; color:#f30; font-size:18px; position:absolute; z-index:1001; right:-20px; top:-10px} 

.dice{width:90px; height:90px; display:block; float:left; background:url(dice.png) no-repeat; cursor:pointer} 

#dice_mask{width:200px; height:100px; background:#fff; opacity:0; position:absolute; top:0; left:0; z-index:999} 

.dice_1{background-position:-5px -4px} 

.dice_2{background-position:-5px -107px} 

.dice_3{background-position:-5px -212px} 

.dice_4{background-position:-5px -317px} 

.dice_5{background-position:-5px -427px} 

.dice_6{background-position:-5px -535px} 

.dice_t{background-position:-5px -651px} 

.dice_s{background-position:-5px -763px} 

.dice_e{background-position:-5px -876px} 

#prize{position:relative} 

#prize li{position:absolute; width:150px; height:112px; border:1px solid #d3d3d3} 

#d_0{left:0; top:0} 

#d_1{left:160px; top:0} 

#d_2{left:320px; top:0} 

#d_3{left:480px; top:0} 

#d_4{left:480px; top:128px} 

#d_5{left:480px; top:256px} 

#d_6{left:320px; top:256px} 

#d_7{left:160px; top:256px} 

#d_8{left:0; top:256px} 

#d_9{left:0; top:128px} 

.mask{opacity: 0.6; width:150px; height:112px; line-height:32px; background:#ffc;  

z-index:1001; position:absolute; top:0; left:0; text-align:center; font-size:16px}

jQuery部分:

我们使用jQquery来完成前端动作,包括掷色子动画,仿大富翁奖品逐步运动动画,其中有防重复点击知识、ajax交互知识,动画提示知识。整个 操作流程可简单概括为:点击色子->向dice.php发送ajax请求->完成掷色子动画->提示点数->逐步运动动画到最终 奖品位置停止->完成抽奖。

$(function(){ 

    $('#dice').click(function(){ 

        $('#prize li .mask').remove(); 

        $('.wrap').append('<div id='dice_mask'></div>');//加遮罩 

        var dice1 = $('#dice1'); 

        var dice2 = $('#dice2'); 

        $.getJSON('dice.php',function(json){ 

            var num1 = json[0]; 

            var num2 = json[1]; 

            diceroll(dice1,num1);//掷色子1动画 

            diceroll(dice2,num2);//掷色子2动画 

            var num = parseInt(num1)+parseInt(num2); 

            $('#msg').css('top','-10px').fadeIn(500).text(num+'点').animate({top:'-50px'},'1000').fadeOut(500); 

            roll(0, num);//逐步运动动画 

        }); 

    }); 

});

函数diceroll()是一个色子运动动画,在本站前面的文章中已讲解过,就是通过jQuery的animate()实现的位移、延时、变化背景样式来实现的动画效果。

function diceroll(dice,num){ 

    dice.attr('class','dice');//清除上次动画后的点数 

    dice.css('cursor','default'); 

    dice.animate({left: '+2px'}, 100,function(){ 

        dice.addClass('dice_t'); 

    }).delay(200).animate({top:'-2px'},100,function(){ 

        dice.removeClass('dice_t').addClass('dice_s'); 

    }).delay(200).animate({opacity: 'show'},600,function(){ 

        dice.removeClass('dice_s').addClass('dice_e'); 

    }).delay(100).animate({left:'-2px',top:'2px'},100,function(){ 

        dice.removeClass('dice_e').addClass('dice_'+num); 

        dice.css('cursor','pointer'); 

    }); 

}

函数roll()至关重要,通过setInterval()设置一个间隔动画,每隔0.5秒时间执行一次。参数i代表初始位置,参数step代表需要执行 的步数,在本例中就是色子的点数,即需要走的步数。我们根据i给当前奖品加上.mask,当i的值与step相等时,停止动画,并且移除色子的遮罩(防止 重复点击)。

function roll(i,step){ 

    var time = setInterval(function(){ 

        if(i>9){ 

            var t = i - 10; 

            $('#d_'+t).append('<div class='mask'></div>'); 

            $('#d_'+(t-1)+' .mask').remove(); 

        } 

        $('#d_'+i).append('<div class='mask'></div>'); 

        $('#d_'+(i-1)+' .mask').remove(); 

         

        if(i==step){ 

             clearInterval(time); //如果到达指定位置则停止 

             $('#dice_mask').remove();//移除遮罩 

        } 

        i++;//继续前进 

    },500); 

}

PHP部分:

dice.php需要做的事情有:根据配置好的奖品概率,得到总点数,根据总点数进行两粒色子的点数分配,最后返回给前端页面两粒色子的点数。

//设置中奖概率 

$prize_arr = array( 

    '2' => array('id'=>2,'v'=>10), 

    '3' => array('id'=>3,'v'=>20), 

    '4' => array('id'=>4,'v'=>5), 

    '5' => array('id'=>5,'v'=>5), 

    '6' => array('id'=>6,'v'=>20), 

    '7' => array('id'=>7,'v'=>2), 

    '8' => array('id'=>8,'v'=>3), 

    '9' => array('id'=>9,'v'=>20), 

    '10' => array('id'=>10,'v'=>0), 

    '11' => array('id'=>11,'v'=>10), 

    '12' => array('id'=>12,'v'=>5), 

); 

 

foreach ($prize_arr as $key => $val) { 

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

} 

 

$sum = getRand($arr); //根据概率获取奖项id,得到总点数 

 

//分配色子点数 

$arrs = array( 

    '2' => array(array(1,1)), 

    '3' => array(array(1,2)), 

    '4' => array(array(1,3),array(2,2)), 

    '5' => array(array(1,4),array(2,3)), 

    '6' => array(array(1,5),array(2,4),array(3,3)), 

    '7' => array(array(1,6),array(2,7),array(3,4)), 

    '8' => array(array(2,6),array(3,5),array(4,4)), 

    '9' => array(array(3,6),array(4,5)), 

    '10' => array(array(4,6),array(5,5)), 

    '11' => array(array(5,6)), 

    '12' => array(array(6,6)) 

); 

 

$arr_rs = $arrs[$sum]; 

$i = array_rand($arr_rs);//随机取数组 

$arr_a = $arr_rs[$i]; 

shuffle($arr_a);//打乱顺序 

echo json_encode($arr_a);

函数getRand()用来计算概率

//计算概率 

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; 

} 

希望本文所述对大家的php程序设计有所帮助。

PHP 相关文章推荐
BBS(php &amp; mysql)完整版(五)
Oct 09 PHP
PHP COOKIE设置为浏览器进程
Jun 21 PHP
PHP判断搜索引擎蜘蛛并自动记忆到文件的代码
Feb 04 PHP
spl_autoload_register与autoload的区别详解
Jun 03 PHP
使用php判断网页是否gzip压缩
Jun 25 PHP
使用PHP Socket写的POP3类
Oct 30 PHP
2014过年倒计时示例
Jan 31 PHP
PHP实现获取图片颜色值的方法
Jul 11 PHP
php 问卷调查结果统计
Oct 08 PHP
PHP浮点数的一个常见问题
Mar 10 PHP
php使用FFmpeg接口获取视频的播放时长、码率、缩略图以及创建时间
Nov 07 PHP
tp5(thinkPHP5)框架连接数据库的方法示例
Dec 24 PHP
php支付宝接口用法分析
Jan 04 #PHP
php采集自中央气象台范围覆盖全国的天气预报代码实例
Jan 04 #PHP
php模仿asp Application对象在线人数统计实现方法
Jan 04 #PHP
THINKPHP2.0到3.0有哪些改进之处
Jan 04 #PHP
浅谈thinkphp的实例化模型
Jan 04 #PHP
Thinkphp中的curd应用实用要点
Jan 04 #PHP
PHP+jquery实时显示网站在线人数的方法
Jan 04 #PHP
You might like
PHP中全局变量global和$GLOBALS[]的区别分析
2012/08/06 PHP
PHP header()函数使用详细(301、404等错误设置)
2013/04/17 PHP
PHP 数组基本操作方法详解
2016/06/17 PHP
PHP生成唯一ID之SnowFlake算法
2016/12/17 PHP
php查询内存信息操作示例
2019/05/09 PHP
JScript内置对象Array中元素的删除方法
2007/03/08 Javascript
jquery 插件学习(一)
2012/08/06 Javascript
JavaScript prototype 使用介绍
2013/08/29 Javascript
jquery选择器、属性设置用法经验总结
2013/09/08 Javascript
jQuery实现精美的多级下拉菜单特效
2015/03/14 Javascript
一个用jquery写的判断div滚动条到底部的方法【推荐】
2016/04/29 Javascript
js实现获取两个日期之间所有日期的方法
2016/06/17 Javascript
JQuery EasyUI学习教程之datagrid 添加、修改、删除操作
2016/07/09 Javascript
全面了解函数声明与函数表达式、变量提升
2016/08/09 Javascript
vue 2.0项目中如何引入element-ui详解
2017/09/06 Javascript
Vue组件开发技巧总结
2018/03/04 Javascript
vue自定义全局共用函数详解
2018/09/18 Javascript
vuex actions异步修改状态的实例详解
2019/11/06 Javascript
webpack常用配置总览(小结)
2019/11/18 Javascript
MySQL适配器PyMySQL详解
2017/09/20 Python
python manage.py runserver流程解析
2019/11/08 Python
python创建学生成绩管理系统
2019/11/22 Python
Python 词典(Dict) 加载与保存示例
2019/12/06 Python
python爬虫模拟浏览器的两种方法实例分析
2019/12/09 Python
python3连接MySQL8.0的两种方式
2020/02/17 Python
Python面向对象魔法方法和单例模块代码实例
2020/03/25 Python
CSS3 linear-gradient线性渐变生成加号和减号的方法
2017/11/21 HTML / CSS
英国电器零售商:PRC Direct
2018/06/21 全球购物
印尼极简主义和实惠的在线家具店:Fabelio
2019/03/27 全球购物
澳大利亚网上书店:QBD
2021/01/09 全球购物
优秀研究生主要事迹
2014/06/03 职场文书
2015世界地球日活动总结
2015/02/09 职场文书
2016春季校长开学典礼致辞
2015/11/26 职场文书
2016年秋季运动会广播稿
2015/12/21 职场文书
go结构体嵌套的切片数组操作
2021/04/28 Golang
详解JavaScript的计时器和按钮效果设置
2022/02/18 Javascript