zoukankan      html  css  js  c++  java
  • 随机掉宝,对玩家来讲真的随机吗?

    一般我们处理随机率,使用Random.Range(MIN,MAX),如果返回值在我们设定的范围内,则随机命中成功。

    打个比方:牛魔王掉裁决的概率为0.1%,也就是说,搞死牛魔王1000次(默哀),会掉一把裁决。

    我们来模拟下,10组玩家击杀牛魔王1000次的结果:

    可以看出,大部分结果还是比较真实的反应了概率,但是值得注意的是第6组打了1000次,还是没有出裁决,这玩家肯定要骂娘了,为什么?还是思想“不患寡而患不均”在作祟,“你承诺了千分之一掉宝率,为什么我起早摸黑打下来毛都没有,第三组爆了三把?”

    同样的,比如镶嵌宝石成功率为20%,也就是理论上5次成功一次,那么镶嵌5次全部失败的概率是多少?0.8*0.8*0.8*0.8*0.8=32.768%,如果我们还加上镶嵌失败,装备爆掉的惩罚,估计玩家能郁闷很久。

    这个时候,光靠计算机那双“看不见的手”来控制随机率已经不够了,我们需要加入自己“看得见的手”

    那么我们如何修改呢?

    每次失败,随机值累加一次!成功之后,随机值还原。

    拿镶嵌宝石来说

    次数 成功率
    1 20%
    2 40%
    3 60%
    4 80%
    5 100%

    那么代码需要怎么修改呢?

    裁决掉宝率为千分之一:Random.Range(0,1001),我们设定命中值为最大的1000

    每次掉宝失败,随机范围的起始值+=掉宝率,这样,随着失败的增加,随机范围的起始值越接近命中值; 掉宝成功,起始值还原

    这样修改,可以保证游戏厂家对玩家做出的千分之一的掉宝率是有效的。

    但是我们也可以看出,由于我们的干预,在随机的过程中,随机范围是在不断缩减的,这导致掉宝的命中率不断提高。模拟的结果也证实了我们的猜测,掉宝的实际结果会比千分之一要高

    玩家是不会抱怨掉宝率的增加的。

    这个机制适用于各种用到随机值得地方,比如晕眩几率、任务触发几率、暴击几率等等。

    在比如BOSS掉宝、装备合成成功率的地方,将累加值存储起来,在玩家上下线之后,累加计数的影响依然存在。(一般在数据库设计的时候,在掉宝率所在的表里,把随机累加值作为字段添加进该表就好了)

    在频繁的实时战斗模块(比如晕眩、暴击),进入当前场景后,初始化累加值就好了。

  • 相关阅读:
    C语言源代码——计算任何一天是星期几
    计算任意一天是星期几
    wpf利用线程制作初始界面和关闭窗体特效
    实用的 集合工具类 和 String工具类
    从“关于Java堆与栈的思考”一帖看错误信息的传播
    web.xml 配置中classpath: 与classpath*:的区别
    git的安装-环境变量配置
    解决Oracle安装时报错“SID已在使用”办法
    ORACLE日期时间函数
    Java 开发环境配置
  • 原文地址:https://www.cnblogs.com/kimmy/p/3643188.html
Copyright © 2011-2022 走看看