java开发tv上转盘抽奖_java实现大转盘抽奖的简单思路

大转盘抽奖

近期碰到的一个需求,实现一个类似大转盘抽奖的功能,需自定义奖项,各奖项中奖概率,当日抽奖最大次数,抽奖成本等。分享一个简单的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都是一个处理接口,通过实现类来最终处理奖品发放业务

这里只提供一个笔者采用的思路,作为笔记与交流,有更好的处理方式欢迎指正。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值