有个转盘需求 一共有9个奖品,一共会有16套概率,每次抽奖只会使用一套概率,请问各位大佬,有好的设计方式吗?

2. 问题描述?#

有个转盘需求 一共有 9 个奖品,根据不同的条件组合,一共会有 16 套概率,每次抽奖只会使用一套概率,if else 写的手疼,请问各位大佬,有好的设计方式吗?

条件组合存在规律, 条件有优先级,每次抽奖只返回一套概率,目前我是把条件决定元素抽离出来,然后进行判断,决定使用 16 套概率中的一套概率,由这几个条件组成

  /**
     * 1  正常  2吐水
     * @var int
     */
    protected $level = 0;
    /**
     * 转盘 类型 1 普通 2 豪华
     * @var int
     */
    protected $luckTurntableType = 0;

    /**
     * 1 单抽
     * 转盘抽奖类型 1k(单抽)、10k(10连抽)、50k(50连抽)
     * @var int
     */
    protected $gearType = 0;

    /**
     * 是否每日第一次抽取
     * @var int 1 是 0 不是
     */
    protected $dailyFirstPlay = 0;

    /**
     * 是否是暴击时刻 1 是 0 不是
     * @var int
     */
    protected $criticalMoment = 0;

    /**
     * 暴击时刻类型 1 A 礼物 2 B 礼物
     * @var int
     */
    protected $criticalMomentPrizeType = 0;

    /**
     * 是否是大奖 1 是 0 不是
     * @var int
     */
    protected $isGrandPrize = 0;

目前的实现方式#

定义 根据条件组合获取的其中一套概率的类

代码已被折叠,点此展开
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 10

好家伙,难怪我基本没中过奖

3年前 评论

好家伙,难怪我基本没中过奖

3年前 评论

把中奖概率都放在一个数组里面,用 array_rand () 随机取一个

3年前 评论

好家伙,难怪我基本没中过奖

3年前 评论
mouyong

你的条件组合有规律吗?

// 抽奖策略,包含本次抽奖的所有奖品,并根据自己的规则进行抽奖处理
RafflePolicy {
- prizesRate; // 所有奖品与奖品的中奖概率
- losingPrizeRate; // 未中奖的概率

+ prizeDraw();
- getPrizesRate();
}

// 这个是工厂,获取当前抽奖策略用。
Raffle {
+ getCurrentPolicy(): 
}
3年前 评论
1012415019 (楼主) 3年前
mouyong (作者) 3年前
1012415019 (楼主) 3年前
mouyong (作者) 3年前
1012415019 (楼主) 3年前