装备掉落策略

2024-06-14 02:38
文章标签 策略 掉落 装备

本文主要是介绍装备掉落策略,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

http://www.gameres.com/762859.html


权重掉落组似掉落


由逐个百分比掉落引出的问题无法配置精确的组合,于是我们找到了一种可以解决这个问题的掉落方式:权重掉落组似掉落。

我们之前逐步掉落的方式的思路是这样的,循环判断每个道具的概率然后把他们放进一个掉落包中,然后掉落这个掉落包。

随机在游戏内掉落方式设计中的应用



我们再来看看权重掉落组似掉落的思路是什么样的。从下图可以看出和逐步掉落的方式的流程是非常接近的。但是它多了一步,它拥有母集和子集的概念。

随机在游戏内掉落方式设计中的应用



具体实现环节让我们来解析一下。之前看到的掉落设计方式其实都是单表的,而权重掉落组似掉落是拥有两张表的。先来看下母集表,如下图所示:

随机在游戏内掉落方式设计中的应用



母集中掉落编号30700004产生三个子集,他们分别代表一个木箱子中可能会掉落的金币,材料和装备。然后我们根据三个子集的编号在子集表中寻找道具以及对应权重。子集如下图所示:

随机在游戏内掉落方式设计中的应用



我们先来看第一个子集,它掉落的是金币,首先看权重,这里只有一条数据,那掉落的只能事它,然后再从最小数量和最大数量之间随机掉落数量。这里相当于开木箱子是100%获得金币的,如果我们想要玩家只有50%概率获得金币,可以再加入一条权重2000的空掉落集就可以了。根据流程会先判断子集中掉落哪一种道具,然后再根据道具的掉落最大最小数量算出掉落数量。

权重的掉落和前面的“圆桌理论”的实现方式有些类似。我们再来看第二个子集,它拥有三个掉落选择,我们先把掉落玄铁,饰品,马鞍的权重加在一起得到权重总值3000。然后我们随机1-3000的一个数值。当这个数值小于等于1000的时候掉落玄铁,大于等于1001小于2000的时候掉落饰品,大于等于2001小于3000的时候掉落马鞍。然后在根据道具的掉落最大最小数量算出掉落数量。

这里要注意一个问题,不同类型的道具在配置的时候一定要配置好它们对应的道具类型。类型将决定程序去哪张表寻找道具,如果配置错误会导致找不到这个掉落道具。而更为严重的问题是有些程序会直接跳过这条BUG不做任何报错,这就会导致我们预期的掉落物品实际上根本没有掉落。这会对经济系统的投放产生很大影响。所以请大家一定要杜绝这种问题的发生。

第三个子集的计算流程也是一样的,我们从权重中可以看出铁盾的掉落概率为50%,长袍和锁子甲的掉落概率各为25%。

最后,我们把三个子集的物品放在一起形成最终的掉落。

这种设计的优点在于你可以灵活的组合各种子集,从而形成一个非常丰富的掉落组合,并且不管是任何系统关联的掉落都可以只用一个母集的编号来对应。这对程序维护成本和程序效率是大有帮助的。缺点是母集和子集之间关联性强,容易出现数据问题,对数值自身要求较高。

4、进阶掉落

权重掉落组似掉落是目前较为主流的做法。但随着游戏在不断的发展,我们遇到了新的问题。比如某玩家想要获得某关键武器A,可是他的运气就是十分的差,在多次击杀相关BOSS之后就是不掉落武器A。玩家十分恼怒,并最终打电话像客服投诉。(非常真实的案例)

客服反馈了这个问题。但我们会发现权重掉落组似掉落中数值策划是无法控制某物品必然掉落的,此时我们结合计数掉落设计出进阶掉落。

进阶掉落其实是在权重掉落组似掉落基础上做了进化的版本,核心思想还是一样的,它多了一步前置的判断,在每次母集掉落之前会判断一次母集是否满足一定条件并产生进阶掉落。

流程如下图所示:

随机在游戏内掉落方式设计中的应用



如何判断是否产生进阶掉落那?我们在母集表中先添加三列数据:进阶组别,最小进阶次数,最大进阶次数。如下图所示:

随机在游戏内掉落方式设计中的应用



我们先看第一行数据,母集有一个70400001的子集,我们在这个子集里装的是金币,它对应的进阶母集是70400002,70400001进阶到70400002最少需要2次,最多需要3次。


这里有些人会质疑如何保证在这个进阶次数区间内就一定进阶。我们来解释一下这个流程。假设最小进阶次数a,最大进阶次数b。然后我们先统计出掉落次数x,再随机一个a到b的随机数y,之后判断x是否大于等于y,是的话产生进阶掉落,不是的话还是掉落之前的母集。

流程图如下:

随机在游戏内掉落方式设计中的应用



我们套用这个流程再来看之前的数据

条件如下:

a=2
b=3

第一次掉落开始,x=1,第一次开始掉落。y随机到2,判定失败,还是产生之前掉落。
第二次掉落开始,x=2。y随机到3,运气真是太差了,如果随机到2判定就成功了,但是失败之后还是产生之前掉落。
第三次掉落开始,x=3。y随机到2,判断成功,产生进阶掉落,另外x的次数被重置为0。

这里大家可以看到在第二次掉落开始的时候,如果随机到2的话,那么在第二次掉落的时候就会发生进阶掉落。第三次掉落的时候结果是必然成功的。这就保证掉落次数达到最大进阶次数时必定发生进阶。

进阶掉落其实是可以叠加多次的。还是之前的数据,70400001进阶70400002所用次数时2-3次,再来看70400002进阶到70400003需要3-5次,可以算出70400001进阶到70400003需要6-15次。那也就意味着,我们每打开6-15个木箱子的时候,我们就会得到1次掉落钻石的机会,钻石的数量为20。这样我们就可以计算出从木箱子获得钻石的期望为每打开10.5个木箱子可得到20个钻石。1个木箱子约含有2钻石的价值,这样玩家获得木箱子的成本必然要大于2钻石。

子集如下图所示:

随机在游戏内掉落方式设计中的应用



进阶掉落是目前很多游戏都在采用的做法。你可以把想要对进阶产生影响的因素通过不同的方式来计算统计,然后使之成为判断进阶条件。比如很多游戏的VIP等级就是会对随机产生影响,VIP等级高的人更容易刷出商店中的高级道具。我们在这里就不对这些元素一一介绍了,其道理和进阶掉落都是一样的。

5、木桶原理掉落


首先解释一下木桶原理:一个水桶无论有多高,它盛水的高度取决于其中最低的那块木板。这个道理也往往被人称之为短板效应。而在游戏中玩家会遇到有非常多的道具,可往往自己心里想要得到的道具总也不掉落。木桶原理掉落就是用来解决这样的问题,木桶原理掉落让你最短缺的道具有更高的掉落几率。

在这里说明一下,木桶原理掉落是笔者自己根据《皇室战争》这款游戏反推出来的,可能会和真实游戏的设计方案有一定误差,请大家谅解。

首先讲一下流程。在确定它们的权重之前,我们要先计算预期量和现有量是多少,再计算空缺量有多大。之后根据空缺量计算出空缺率有多大,空缺率非常大的道具会获得额外系数加成。最后由空缺量乘以系数加成算出掉落权重。流程如下图所示:

随机在游戏内掉落方式设计中的应用



我们再来看下表格

随机在游戏内掉落方式设计中的应用



预期量是我们根据游戏的进度来决定期望让玩家得到多少数量该类型道具。现有量是统计目前玩家有多少数量道具得到的数值。然后我们算出空缺量公式:

空缺量=预期量-现有量

空缺量最小值等于10,我们不希望道具在达到我们的预期量之后一点权重都没有。然后根据空缺量算出空缺率:

空缺率=空缺量/预期量

再根据空缺率算出系数加成,我在这里思考的是如果空缺量大于等于90%证明该道具是极度空缺,系数加成为4,而空缺量大于等于70%小于90%为较空缺,系数加成为2,其他比例的系数加成为1。再用之前算出来的空缺量乘以系数加成得出最终的权重。

我们可以看到道具1由于空缺大所以它的掉落是最高的,然后是道具4,但是其他道具也是有几率掉落的。最终掉率是符合我们设计预期的。

这篇关于装备掉落策略的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1059143

相关文章

Python 中 requests 与 aiohttp 在实际项目中的选择策略详解

《Python中requests与aiohttp在实际项目中的选择策略详解》本文主要介绍了Python爬虫开发中常用的两个库requests和aiohttp的使用方法及其区别,通过实际项目案... 目录一、requests 库二、aiohttp 库三、requests 和 aiohttp 的比较四、requ

Redis过期键删除策略解读

《Redis过期键删除策略解读》Redis通过惰性删除策略和定期删除策略来管理过期键,惰性删除策略在键被访问时检查是否过期并删除,节省CPU开销但可能导致过期键滞留,定期删除策略定期扫描并删除过期键,... 目录1.Redis使用两种不同的策略来删除过期键,分别是惰性删除策略和定期删除策略1.1惰性删除策略

在JS中的设计模式的单例模式、策略模式、代理模式、原型模式浅讲

1. 单例模式(Singleton Pattern) 确保一个类只有一个实例,并提供一个全局访问点。 示例代码: class Singleton {constructor() {if (Singleton.instance) {return Singleton.instance;}Singleton.instance = this;this.data = [];}addData(value)

缓存策略使用总结

缓存是提高系统性能的最简单方法之一。相对而言,数据库(or NoSQL数据库)的速度比较慢,而速度却又是致胜的关键。 如果使用得当,缓存可以减少相应时间、减少数据库负载以及节省成本。本文罗列了几种缓存策略,选择正确的一种会有很大的不同。缓存策略取决于数据和数据访问模式。换句话说,数据是如何写和读的。例如: 系统是写多读少的吗?(例如基于时间的日志)数据是否是只写入一次并被读取多次?(例如用户配

Flink任务重启策略

概述 Flink支持不同的重启策略,以在故障发生时控制作业如何重启集群在启动时会伴随一个默认的重启策略,在没有定义具体重启策略时会使用该默认策略。如果在工作提交时指定了一个重启策略,该策略会覆盖集群的默认策略默认的重启策略可以通过 Flink 的配置文件 flink-conf.yaml 指定。配置参数 restart-strategy 定义了哪个策略被使用。常用的重启策略: 固定间隔 (Fixe

Java后端微服务架构下的API限流策略:Guava RateLimiter

Java后端微服务架构下的API限流策略:Guava RateLimiter 大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿! 在微服务架构中,API限流是保护服务不受过度使用和拒绝服务攻击的重要手段。Guava RateLimiter是Google开源的Java库中的一个组件,提供了简单易用的限流功能。 API限流概述 API限流通过控制请求的速率来防止

未雨绸缪:环保专包二级资质续期工程师招聘时间策略

对于环保企业而言,在二级资质续期前启动工程师招聘的时间规划至关重要。考虑到招聘流程的复杂性、企业内部需求的变化以及政策标准的更新,建议环保企业在二级资质续期前至少提前6至12个月启动工程师招聘工作。这个时间规划可以细化为以下几个阶段: 一、前期准备阶段(提前6-12个月) 政策与标准研究: 深入研究国家和地方关于环保二级资质续期的最新政策、法规和标准,了解对工程师的具体要求。评估政策变化可

面对Redis数据量庞大时的应对策略

面对Redis数据量庞大时的应对策略,我们可以从多个维度出发,包括数据分片、内存优化、持久化策略、使用集群、硬件升级、数据淘汰策略、以及数据结构选择等。以下是对这些策略的详细探讨: 一、数据分片(Sharding) 当Redis数据量持续增长,单个实例的处理能力可能达到瓶颈。此时,可以通过数据分片将数据分散存储到多个Redis实例中,以实现水平扩展。分片的主要策略包括: 一致性哈希:使用一

集群环境下为雪花算法生成全局唯一机器ID策略

雪花算法是生成数据id非常好的一种方式,机器id是雪花算法不可分割的一部分。但是对于集群应用,让不同的机器自动产生不同的机器id传统做法就是针对每一个机器进行单独配置,但这样做不利于集群水平扩展,且操作过程非常复杂,所以每一个机器在集群环境下是一个头疼的问题。现在借助spring+redis,给出一种策略,支持随意水平扩展,肥肠好用。 大致策略分为4步: 1.对机器ip进行hash,对某一个(大于

数据库归档策略

数据库迁移策略 为备战双11,需要将数据库中的相关表(历史订单)进行归档,以便腾出更多的空间迎接订单的暴增。作者经过尝试,得出自认为最优的解决方案。下面给出数据库归档策略及示例代码。 现有条件: 1.现有两个数据库:db-A 以及 db-B; 2.两个库中有字段相同的表:tba(表中只有字段订单id–rx_id(long型) 有索引); 3.归档库的tba中还有17年整年的归档数据。 4.由于单