概述
大转盘抽奖
近期碰到的一个需求,实现一个类似大转盘抽奖的功能,需自定义奖项,各奖项中奖概率,当日抽奖最大次数,抽奖成本等。分享一个简单的java代码的实现的思路,有不足之处感谢各位指正。
设计思路
1.奖品概率
每个奖品的中奖概率各自独立,不必考虑概率总和是否等于1,即:A奖品的概率为100%,B奖品的概率80%的设置方式可以成立;
2.抽奖方式
- 取出奖品列表(按照中奖概率大小倒序排列)
- 通过java的Random()方法生成一个0-1的随机数,与设置好的奖品概率循环比较
- 若随机数小于概率值,则抽中该奖项
- 换句话说就是按照随机出的数字,概率由小到大,依次中奖
例如:A奖项概率100%,B奖项概率30%,C奖项概率1%,用户点击抽奖,随机数为0.2,此时,先比较C奖,(0.2<0.01)=false,则进入下一个奖项判断,(0.2<0.3)=true 则判断用户中奖B,跳出循环;
3. 奖品处理
一般来说,奖品设置不外乎一下几种类型:
- 账户余额奖励;
- 现金奖励();
- 积分奖励;
- 虚拟物品奖励(道具,会员等均归为此类)
- 实物奖励(贵重物品,或需要物流的商品等)
于是,这里推荐写一个”中奖处理器”工厂类,用不同的实现类来分别实现不同类型的奖品的中奖处理逻辑
4. 其他
一些不重要,但必须的注意事项,例如抽奖成本的维护,登陆验证,账户余额判断,根据项目需求而定。
核心代码
1. 奖项设置(大多简单的CUID操作,若项目中关系复杂请妥善思考关联关系,此处不做赘述)
2. 生成随机数(此处为了数据处理方便*100)
Random randomTool = new Random();
Double userSelect = randomTool.nextDouble()*100;
Award award = awardManager.duageAward(userSelect);
3. duageAward方法用很简单的方法来,用来比较概率与随机数大小来判断中奖
for (Award award : awardList) {
if(userSelect < award.getProbability()){
return award;
}
}
4. 奖品发放处理
奖品发放工厂类
public final class SendAwardProcessorFactory { public static ISendAwardProcessor getProcessor(String awardType){ if("valuables".equals(awardType)){//贵重物品类奖品流程 return SpringContextHolder.getBean("awardForValuablesProcessor"); } return null; } } 通过一个awardType的参数来判断奖品类型,并创建一个处理方式的实例,每一个Processor都是一个处理接口,通过实现类来最终处理奖品发放业务
这里只提供一个笔者采用的思路,作为笔记与交流,有更好的处理方式欢迎指正。
最后
以上就是缥缈香水为你收集整理的java实现大转盘抽奖的简单思路大转盘抽奖的全部内容,希望文章能够帮你解决java实现大转盘抽奖的简单思路大转盘抽奖所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复