题主,您好,制作这个小程序的方法非常多,主要是看您要做成什么样子的,在哪里使用,不管是网页还是小程序,直接用JS也可以实现,如果想要做的严谨点,可以利用PHP或者JAVA做后台,将抽奖记录数据存储到数据库中去。
所有随机的东西都要用到随机数,js中是用到Mathrandom()这个方法,获取0~1之间的数
产生随机4个英文字母详情看下面代码!
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
</head>
<div id="result"></div><button onclick="getRanNum()">生成</button>
<body>
<script>
var result = [];
function getRanNum(){
result = [];
for(var i=0;i<4;i++){
var ranNum = Mathceil(Mathrandom() 25); //生成一个0到25的数字
//大写字母'A'的ASCII是65,A~Z的ASCII码就是65 + 0~25;然后调用StringfromCharCode()传入ASCII值返回相应的字符并push进数组里
resultpush(StringfromCharCode(65+ranNum));
}
documentgetElementById('result')innerText = resulttoString();
}
</script>
</body>
</html>
在电视节目中有一种抽奖形式暂且叫做翻板抽奖,台上有一个墙面,墙面放置几个大方块,主持人或者抽奖者翻开对应的方块即可揭晓中奖结果。类似的抽奖形式还可以应用在WEB中,本文将使用PHP+jQuery为您讲解如何实现翻板抽奖程序。
查看演示DEMO
翻板抽奖的实现流程:前端页面提供6个方块,用数字1-6依次表示6个不同的方块,当抽奖者点击6个方块中的某一块时,方块翻转到背面,显示抽奖中奖信息。看似简单的一个 *** 作过程,却包含着WEB技术的很多知识面,所以本文的读者应该熟练掌握jQuery和PHP相关知识。
HTML
与本站上篇文章使用jQuery+PHP+Mysql实现抽奖程序不同的是,翻板抽奖不提供开始和结束抽奖按钮,抽奖者自己决定选取其中的某一个方块,来完成抽奖的,所以我们在页面中放置6个方块,并且用1-6来表示不同的方块。
<ul id="prize">
<li class="red" title="点击抽奖">1</li>
<li class="green" title="点击抽奖">2</li>
<li class="blue" title="点击抽奖">3</li>
<li class="purple" title="点击抽奖">4</li>
<li class="olive" title="点击抽奖">5</li>
<li class="brown" title="点击抽奖">6</li>
</ul>
<div><a href="#" id="viewother">翻开其他</a></div>
<div id="data"></div>
html结构中,我们使用一个无序列表放置6个不同的方块,每个li中的clas属性表示该方块的颜色,列表下面是一个链接a#viewother,用来完成抽奖后,点击它,翻看其他方块背面的中奖信息,默认是隐藏的。接下来还有一个div#data,它是空的,作用是用来临时存储未抽中的其他奖项数据,具体情况看后面的代码。为了让6个方块并排看起来舒服点,您还需要用CSS来美化下,具体可参照demo,本文中不再贴出css代码。
PHP
我们先完成后台PHP的流程,PHP的主要工作是负责配置奖项及对应的中奖概率,当前端页面点击翻动某个方块时会想后台PHP发送ajax请求,那么后台PHP根据配置的概率,通过概率算法给出中奖结果,同时将未中奖的奖项信息一并以JSON数据格式发送给前端页面。
先来看概率计算函数
function get_rand($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;
}
上述代码是一段经典的概率算法,$proArr是一个预先设置的数组,假设数组为:array(100,200,300,400),开始是从1,1000这个概率范围内筛选第一个数是否在他的出现概率范围之内, 如果不在,则将概率空间,也就是k的值减去刚刚的那个数字的概率空间,在本例当中就是减去100,也就是说第二个数是在1,900这个范围内筛选的。这样筛选到最终,总会有一个数满足要求。就相当于去一个箱子里摸东西,第一个不是,第二个不是,第三个还不是,那最后一个一定是。这个算法简单,而且效率非常高,关键是这个算法已在我们以前的项目中有应用,尤其是大数据量的项目中效率非常棒。
接下来我们通过PHP配置奖项。
$prize_arr = array(
'0' => array('id'=>1,'prize'=>'平板电脑','v'=>1),
'1' => array('id'=>2,'prize'=>'数码相机','v'=>5),
'2' => array('id'=>3,'prize'=>'音箱设备','v'=>10),
'3' => array('id'=>4,'prize'=>'4G优盘','v'=>12),
'4' => array('id'=>5,'prize'=>'10Q币','v'=>22),
'5' => array('id'=>6,'prize'=>'下次没准就能中哦','v'=>50),
);
中是一个二维数组,记录了所有本次抽奖的奖项信息,其中id表示中奖等级,prize表示奖品,v表示中奖概率。注意其中的v必须为整数,你可以将对应的奖项的v设置成0,即意味着该奖项抽中的几率是0,数组中v的总和(基数),基数越大越能体现概率的准确性。本例中v的总和为100,那么平板电脑对应的中奖概率就是1%,如果v的总和是10000,那中奖概率就是万分之一了。
每次前端页面的请求,PHP循环奖项设置数组,通过概率计算函数get_rand获取抽中的奖项id。将中奖奖品保存在数组$res['yes']中,而剩下的未中奖的信息保存在$res['no']中,最后输出json个数数据给前端页面。
foreach ($prize_arr as $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<count($prize_arr);$i++){
$pr[] = $prize_arr[$i]['prize'];
}
$res['no'] = $pr;
echo json_encode($res);
直接输出中奖信息就得了,为何还要把未中奖的信息也要输出给前端页面呢?请看后面的前端代码。
jQuery
首先为了实现翻板效果,我们需要预先加载翻动插件及jquery,jqueryui相关插件:
<script type="text/javascript" src="js/jquery-172minjs"></script>
<script type="text/javascript" src="js/jquery-ui-172customminjs"></script>
<script type="text/javascript" src="js/jqueryflipminjs"></script>
关于flip插件您可以到其官网:>
我刚好做了一个flash的 摇奖 程序,我吧代码给你吧!如果要全部的就不好发了:
这段是注入txt文本就是需要抽奖人的名单列表:UserListtxt ,中奖名单列表:Savetxt
第一帧代码:
SystemuseCodepage = true;
var UserList:String = "";
var AwardUsers:String = "";
var nowAwardUser:String = "";
var Users:Array;
var Users1:Array=new Array();
var Users2:Array=new Array();
var lv:LoadVars = new LoadVars();
var lvs:LoadVars = new LoadVars();
lvonData = function(s) {
if (s !== undefined) {
UserList = s;
Users = UserListsplit("\r\n");
for (var i = 0; i<Userslength; i++) {
var infos:Array = Users[i]split(" ");
if (infos[2]toString() == "2") {
Users1push(infos[0]toString()+" "+infos[1]toString());//能抽所有奖
}
Users2push(infos[0]toString()+" "+infos[1]toString());//不能抽一等奖的人
}
}
};
lvload("UserListtxt");
lvsonData = function(s) {
if (s !== undefined) {
AwardUsers = s;
}
};
lvsload("fscommand/Savetxt");
点击停得代码:我只给出一二等奖的三等奖的和着差不多
on (release) {
var AwardUser:String = "";
//for (var i = 0; i<random(Userslength-1); i++) {
var intlength:Number;
if (a == "一") {
intlength = random(Users1length-1);
AwardUser = Users1[intlength]toString();
for(var i=0;i<Users2length;i++){
if(Users[i]toString()==Users1[intlength]toString()){
Users2splice(i,1);
}
}
Users1splice(intlength,1);//移除已经出现过的人员
} else if (a == "二") {
intlength = random(Users2length-1);
AwardUser = Users2[intlength]toString();
for (var i = 0; i<Users1length; i++) {
if (Users1[i]toString() == Users2[intlength]toString()) {
Users1splice(i,1);
}
}
Users2splice(intlength,1);//移除已经出现过的人员
}
//}
a1text = AwardUser;
var nowdate:Date = new Date();
var year:Number = nowdategetFullYear();//年
var month:Number = nowdategetMonth()+1;//月
var date:Number = nowdategetDate();//日
var hours:Number = nowdategetHours();//小时
var minutes:Number = nowdategetMinutes();//分钟
var seconds:Number = nowdategetSeconds();//秒
var datetime:String = year+"-"+month+"-"+date+" "+hours+":"+minutes+":"+seconds;
var nowif:String = "";
if (a == "一") {
nowif = AwardUser+" 一等奖 "+datetime+"\r\n";
} else if (a == "二") {
nowif = AwardUser+" 二等奖 "+datetime+"\r\n";
}
nowAwardUser = nowAwardUser+nowif;
SystemsetClipboard(AwardUsers+nowAwardUser);
fscommand("exec", "bcwjexe");
//t2text = random(9);
//t3text = random(9);
//t4text = random(9);
play();
}
至于你说的那个数字滚动效果没做,我看代码比较麻烦就没写,我滚动用的随机滚动影片剪辑
就是自己用姓名分开,做几个影片剪辑有效果,比用代码用的好,而且没那么卡,很实用。
希望能帮到你。
js用向后端发送请求,然后后端通过一些算法计算出要中的奖项或者旋转的角度,返回到前端,js根据返回的奖项或者旋转的角度,来决定最终停止的位置。
中奖几率基本不写在js里,因为js可以被破解和修改,都是写在后端的。
思路是对的,按照你前面的思路,后面只需要在页面上用JS来控制随机显示,和抽取了。
但是一般不这么做,因为你这么做不方便控制作弊,和中奖概率。还有JS控制抽奖很容易就能作弊。
我之前做过的一个抽奖项目是这样的:抽奖程序(抽奖界面)用flash来写,这样既方便作弊也能控制中奖概率,同时更安全,JAVA后台提供抽奖名单,中奖概率等数据,抽奖程序调用java的API获得抽奖数据,这里需要在后台对抽奖信息进行加密,我们使用的是base64加密(方便反向解密),然后由用户点击flash抽奖界面抽奖,中奖后,同样使用base64加密中奖信息,发送到java后台,然后保存在DB,同时后台程序发送中奖信息给用户。
以上就是关于如何制作一个简单的抽奖程序全部的内容,包括:如何制作一个简单的抽奖程序、如何用js随机产生四个随机字母、翻板抽奖怎么做等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)