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创建一块画布,可以在上 ...
随机推荐
- 浅析Java内存模型
概述 Java内存模型的主要目标是定义程序中各个变量的访问规则,即在虚拟机中将变量存储到内存和从内存中取出变量这样的底层细节.此处的变量是线程共享的,存在竞争问题的. Java内存模型规定了所有的变量 ...
- 剑指offer题目11-20
面试题11:数值的整数次方 public class Solution { public double Power(double base, int exponent) { if(exponent = ...
- iOS开发之AFNetworking 3.0.4使用-OC
GET请求 AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; [manager GET:URL parameters: ...
- js 页面值变动监听
1.初始化值map对象 var compareMap = {}:// 定义全局变量 function initCompareMap(context){//context 为指定要初始化的区域,即上下文 ...
- HTTP学习笔记(2)HTTP报文
1,什么是http报文? 上一节我们了解到数据在浏览器和服务器之间进程传送,这些数据被称为报文流,报文流有流入流出之分,当然在也有上游和下游,这些都是来确定报文的流向. 报文的流向都是向下,而不会回流 ...
- 跟服务器交互的Web表单(form)
使用HTML来构建可以跟服务器交互的Web表单(form),通过给你的form元素添加一个action属性来达到此目的. action属性的值指定了表单提交到服务器的地址. 例如: <form ...
- 《LINUX内核设计与实现》读书笔记之第一章和第二章
一.第一章 1. Unix内核的特点简洁:仅提供系统调用并有一个非常明确的设计目的抽象:几乎所有东西都被当做文件可移植性:使用C语言编写,使得其在各种硬件体系架构面前都具备令人惊异的移植能力进程:创建 ...
- linux知识点总结与随笔(关注linux爱好者公众号的一些笔记)
sysdig工具,可以有strace ,tcpdump,lsof的功能. 前台任务与后台任务,知识点:test.sh &,Ctrl+z,bg,shopt grep |huponexit(sho ...
- Unix常用指令
pwd 表示获取自己当前所在位置 ls 表示查看当前文件夹中的内容 cd 进入指定目录 mkdir 文件夹1 创建一个文件夹名为文件夹1的文件夹 rmdir 文件夹2 删除一个文件夹名为文件夹2的 ...
- iOS 开发者必知的 75 个工具(译文)
原文地址:http://benscheirman.com/2013/08/the-ios-developers-toolbelt (需FQ) 如果你去到一位熟练的木匠的工作室,你总是能发现他/她有 ...