如何制作一个简单的抽奖程序

如何制作一个简单的抽奖程序,第1张

题主,您好,制作这个小程序的方法非常多,主要是看您要做成什么样子的,在哪里使用,不管是网页还是小程序,直接用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随机产生四个随机字母、翻板抽奖怎么做等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9697755.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存