规则引擎介绍3
前文提到,规则引擎可以适配大多数任务。这里,我们以一个具体的案例,来介绍规则引擎的优点。
假设你是一名游戏策划,你需要为一款抽卡游戏设计一个卡池:
背景分析
抽卡系统具有以下几个特点:
- 高访问量。一款常见的游戏很可能有数十万的在线玩家,每秒钟可能会有上万次抽卡。抽卡系统需要能承载大量的请求,否则一旦崩溃,会造成用户数据的丢失,为公司带来损失。
- 需要复用。为了保证用户粘性,卡池是需要定期更新的,但又可能需要调整具体的机制。抽卡系统需要在被复用的同时,又能修改内部逻辑。
- 保密性。作为游戏的核心氪金项目,卡池的具体数据关系到游戏的收入。因此,卡池的机制需要一定程度的保密。最好能够仅由作为策划的你来维护。
规则引擎就很适合这样的场景。
规则引擎可以承载较大的数据吞吐量,同时又能快速更新。也能够让作为非技术人员的策划亲手管理这个系统,减少抽卡机制泄露。
有些游戏的卡池会使用复杂的随机数算法,以减少“欧皇”、“非酋”的产生。
也有游戏会检测玩家的数据,对老牢玩家反向使用这个机制,以更好的收割用户
这些机制都涉及复杂的逻辑,很适合规则引擎的发挥
具体实现
1
假设这个卡池有10%的概率抽到稀有卡,否则为普通卡
实现逻辑是,传入抽卡次数,生成一个随机数,如果小于等于概率则返回抽出稀有卡的结果,并减去一次抽卡次数
if 随机数 <= 0.1 and 抽卡次数 > 0:
抽卡次数 -= 1
return 稀有卡
else
抽卡次数 -=1
return 普通卡
经过比较,我选择了一款有可视化界面的规则引擎来呈现:
2
这样的抽卡机制很容易导致“非酋”和“欧皇”出现。为了玩家体验,我们可以修改具体机制为,一开始设定一个较低的概率,每次没有抽出增加一定概率。具体来说:
- 抽卡计数从1开始,每次加1
- 抽出稀有概率为:当前计数*1.5%
- 计数达到40时必定抽出稀有卡
- 抽出稀有卡时计数变回1
这样的综合概率仍然是10%。具体的证明,我邀请读者作为一个小练习(笑)
3
作为一个“良心”策划,你显然不满足于此。你决定再次修改系统,加入针对玩家的检测:
- 对新玩家,使用第1种机制,增加他们的刺激感。
- 当玩家的稀有卡数量大于100时,判定玩家为“老玩家”,采用第二种规则,以稳定榨干他们的钱包。
这种机制俗称“杀熟”,属于非常不道德的行为,如果真的有游戏策划在阅读这篇文章,请勿学习
final
完成规则逻辑的编写,我们就可以保存并测试这些规则。
测试通过后,即可发布规则,作为一个web服务。
也可以导出为jar包,直接嵌入应用
结论
通过分析以上案例,我们可以看到规则引擎的几个优势:
- 操作直观,无需学会复杂的底层代码即可维护规则,修改快捷方便。
- 灵活性高,将复杂的逻辑抽象成一个个规则包,便于增删改查。
- 安全性高,不用担心非技术人员乱动底层代码导致bug,也无需让技术人员了解规则具体内容。
- 功能丰富,集成了测试、版本管理等功能,大大减少开发成本。
另外,有些规则引擎还有我没有展示的其他功能。例如对规则进行热更新,管理规则修改审核的权限等,对于大型团队开发非常方便。
规则引擎通过提供灵活、高效的方式来处理业务逻辑,已经成为许多企业数字化转型的重要工具之一。选择合适的规则引擎对于提高业务效率、降低开发和维护成本具有重要意义。