paip.刮刮卡砸金蛋抽奖概率算法跟核心流程.
paip.刮刮卡砸金蛋抽奖概率算法跟核心流程.
#---实际使用的扩展抽奖算法(带奖品送完判断和每用户最大中奖判断) 2
#---抽奖算法需要满足的需求如下:
1.可以控制中奖的概率
2.具有随机性
3.最好可以控制奖品的数量
4.根据用户ID或者ip、手机号、QQ号等条件限制抽奖次数
初期就这些需求,然后根据网上的资料,采用了一种阶段式抽取的方法,大家下面看一下整体的程序:
关联的数据结构
[id] ,[activityId] ,[awardName] ,[awardCount] ,[概率]
作者 老哇的爪子 Attilax 艾龙, EMAIL:1466519819@qq.com
转载请注明来源: http://blog.csdn.net/attilax
#---抽奖核心流程
//判断每用户每个活动的最大bingo数字...
if (bingoedNum(uid,actid.toString()) >= perUserMaxBigonNum) {
return null;
}
StartAwd()
if (awd == null)
return null;
// 判断奖品是否送完
if (awdOver(awd)) {
return null;
Reutnr awd.
#---问题???更好的算法
网上的算法是没问题的,就是理解起来麻烦的...不是一个真实的阶段式抽取的方法...
例如俄们子有一个奖品,算法的时候儿子要不个probability 概率算呱走ok兰...
有3个奖品,子要不个哪for给挂走ok兰木....
public static Awardx getBingoAwd(List<Awardx> li) {
int rdmAwdIndex_may=randomx.random(li.size()-1);
System.out.println("may index::"+rdmAwdIndex_may);
Awardx awd=(Awardx) li.get(rdmAwdIndex_may);
int rdm=randomx.random(100);
core.log("--o42910: rdmAwdIndex_may--rdm--awd.prbblt"+String.valueOf(rdmAwdIndex_may)+"--"+String.valueOf(rdm)+"--"+String.valueOf(awd.prbblt));
if(rdm<awd.prbblt)
{
//bingo
return awd;
}
return null;
}
#---实际使用的扩展抽奖算法(带奖品送完判断和每用户最大中奖判断)
protected Awardx startAward(Integer actid, String uid) {
if (bingoedNum(uid,actid.toString()) >= perUserMaxBigonNum) {
return null;
}
List<ActAward> li = AwdListByActid(actid);
List<Awardx> li_fnl = listUtil.map_generic(li,
new Func_4SingleObj<ActAward, Awardx>() {
@Override
public Awardx invoke(ActAward o) {
// 上午08:53:09 2014-4-29
ActAward thisAwd = o;
Awardx awd = new Awardx();
awd.id = thisAwd.getId();
awd.name = thisAwd.getAwardName();
awd.prbblt = thisAwd.getRate();
return awd;
}
});
Awardx awd = com.attilax.award.AwdSvs.getBingoAwd(li_fnl);
if (awd == null)
return null;
if (awdOver(awd)) {
return null;
} else
return awd;
}
#-------网上的抽奖算法Php
/**
* 根据概率获取中奖号码
*/
private 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;
}
}
#----java版本的..
/**
* @category 获取中奖概率
*
*/
private static ActAward getAwardRand(List<ActAward> awardList) {
ActAward shootAward = null;
/*return shootAward = awardList.get(0);*/
//测试
if (awardList != null && awardList.size() > 0) {
int size = awardList.size();
int seed = 10000;
// 中奖总概率
for (ActAward aa : awardList) {
seed += aa.getRate();
}
// 循环奖项
for (int i = 0; i < size; i++) {
ActAward one = awardList.get(i);
Random rand = new Random();
// 获取1-100之间的概率
int randNum = rand.nextInt(seed);
logger.info("随机概率 >>> " + randNum);
// 中奖了
if (randNum <= i) {
shootAward = one;
break;
} else {
// 继续
seed -= one.getRate();
}
}
}
return shootAward;
}
参考
转轮抽奖的算法实现-Java-第七城市
php中奖概率算法,可用于刮刮卡,大转盘等抽奖算法 - PHP教程_PHP编程_PHP开发技术文章 - 红黑联盟
PHP中奖概率的抽奖算法程序代码
paip.刮刮卡砸金蛋抽奖概率算法跟核心流程.的更多相关文章
- php中奖概率算法,可用于刮刮卡,大转盘等抽奖算法
php中奖概率算法,可用于刮刮卡,大转盘等抽奖算法.用法很简单,代码里有详细注释说明,一看就懂 <?php /* * 经典的概率算法, * $proArr是一个预先设置的数组, * 假设数组为: ...
- 中奖概率算法(php 可用于刮刮卡,大转盘等抽奖算法)
<?php //中奖概率算法(php 可用于刮刮卡,大转盘等抽奖算法) /* * 经典的概率算法, * $proArr是一个预先设置的数组, * 假设数组为:array(100,200,300, ...
- js实现刮刮卡抽奖
刮刮卡抽奖是前端活动页常见的功能: 链接:图像擦除插件(下载及教程讲解) 推荐理由:无缝刮痕,兼容性好,上手简单 插件有些要修改的地方,打开图像擦除插件后可以看下方网友讨论,或者直接下载本博 ...
- 网页闯关游戏(riddle webgame)--H5刮刮卡的原理和实践
前言: 之前编写了一个网页闯关游戏(类似Riddle Game), 除了希望大家能够体验一下我的游戏外. 也愿意分享编写这个网页游戏过程中, 学到的一些知识. 对于刮刮卡, 想必大家都很熟悉, 也很喜 ...
- 用c#开发微信 (16) 微活动 2 刮刮卡
微信营销是一种新型的营销模式,由于微信更重视用户之间的互动,故而这种营销推广不不能盲目地套用微博营销的单纯大量广告推送方式.这种方式在微信营销中的效果非常差,会令用户反感,继而取消去企业或商家的微信公 ...
- Atitit .html5刮刮卡的gui实现总结
Atitit .html5刮刮卡的gui实现总结 #----两个案例canvas或者wScratchPad-1.4.4 1 #----1.添加panel ,这个十mask div.....posti ...
- qt qml 刮刮卡效果
用canvas+mouseArea实现的刮刮卡效果. 表层是一层色彩,用手指划开,可看到下面的文字Lisence: MIT, 请保留本文档说明Author: surfsky.cnblogs.com 2 ...
- Html5实现移动端、PC端 刮刮卡效果
刚从南方回来就分了一个刮刮卡效果的页面,特么的我在烦恼怎么用H5去实现这个效果呢,好不容易写出来了,产品居然说:“既然你可以写出来这个效果那当然好了,开始我只是打算让你实现点击就出现呢!”… … 尼玛 ...
- 用BlendFunc实现舞台灯光和刮刮卡效果
[转]http://code.lovemiao.com/?p=136#more-136 之前写过一篇<不规则形状按钮的点击判定>,利用了CCRenderTexture创建一块画布,可以在上 ...
随机推荐
- SpringBean
springBean <bean id="user" class="..."/> 默认是单例的. 如果要改成多例的则<bean id=&qu ...
- A 浪哥的烦恼 完全背包dp
https://biancheng.love/contest-ng/index.html#/131/problems 首先,去到n点的最小时间是所有数加起来. 然后,如果我1 --- 2,然后再2-- ...
- WiFi破解
BT5破解WPA2-PSK无线密码实践 笔者住处附近有无线信号,觉得可以试着破解一下,于是有了如下实践. 软硬件环境:Vmware Workstation 9,BT5 r3,reaver1.4 ...
- JVM调优-关于jvm的一些基本概念
1.数据类型 java体系中,数据类型可分为2类:基本类型和引用类型.基本类型保存变量原始值,即:他代表的值就是数值本身: 而引用类型的变量保存引用值."引用值"代表某个对象的引用 ...
- python学习笔记-Day4(2)
正则表达式 语法: import re #导入模块名 p = re.compile("^[0-9]") #生成要匹配的正则对象 , ^代表从开头匹配,[0-9]代表匹配0至9的任意 ...
- Struts2中请求参数的接收方式和ModelDriven机制及其运用
odelDriven 为什么需要ModelDriven 所谓ModelDriven,意思是直接把实体类当成页面数据的收集对象.比如,有实体类User如下: package cn.com.leadfar ...
- 传值 属性 block 单例 协议
界面传值 四种传值的方式 1.属性传值(从前往后) 步骤: 1.属性传值用于第一个界面向第二个界面传值 2.明确二者联系的桥梁,也就是触发跳转的地方 3.明确传输的值,类型是什么 4.在第二个视图控制 ...
- JavaScript-创建新数组
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- struts2 jsp 传参 NullPointerException问题解决
今天遇到了一个问题,那就是jsp给struts2传递参数的时候,总是空指针异常,开始我以为是可能是哪里写的不对,但是经过仔细检查后,没有发现什么异常的地方,后来我发现我的po类里面没有空构造,只有一个 ...
- Event --mysql的scheduler.md
事件调度器event 相当于oracle scheduler CREATE [DEFINER = { user | CURRENT_USER }] EVENT [IF NOT EXISTS] even ...