我是靠谱客的博主 缥缈香水,这篇文章主要介绍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)

复制代码
1
2
3
4
5
Random randomTool = new Random(); Double userSelect = randomTool.nextDouble()*100; Award award = awardManager.duageAward(userSelect);

3. duageAward方法用很简单的方法来,用来比较概率与随机数大小来判断中奖

复制代码
1
2
3
4
5
6
7
for (Award award : awardList) { if(userSelect < award.getProbability()){ return award; } }

4. 奖品发放处理

  • 奖品发放工厂类

    复制代码
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public final class SendAwardProcessorFactory { public static ISendAwardProcessor getProcessor(String awardType){ if("valuables".equals(awardType)){//贵重物品类奖品流程 return SpringContextHolder.getBean("awardForValuablesProcessor"); } return null; } } 通过一个awardType的参数来判断奖品类型,并创建一个处理方式的实例,每一个Processor都是一个处理接口,通过实现类来最终处理奖品发放业务

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

最后

以上就是缥缈香水最近收集整理的关于java实现大转盘抽奖的简单思路大转盘抽奖的全部内容,更多相关java实现大转盘抽奖内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(67)

评论列表共有 0 条评论

立即
投稿
返回
顶部