我们在游戏中会采用不同的随机方式。而玩家感觉起来像随机的事件其实也不完全是按随机事件来设计的。下面我们来谈谈这些做法。

1、计数随机

在早期游戏中,有些道具的掉落是和怪物被击杀的次数相关的,通常在成千上万次的击杀后掉落某些物品。如果玩家并不是特别细心的话是发现不了这种计数似掉落的。

这种做法的好处是只要玩家杀到一定数量的怪物是肯定可以得到回报的。但缺点是一旦被玩家发现之后,玩家会利用这个设计来达成一些自己的目的。比如升级装备,玩家会先用一些不好的装备来升级,最后在快要成功的时候,换上自己真正想要升级的装备。而且一旦有几个玩家发现这个问题,那这个技巧就会被快速传播,然后对经济产耗形成巨大冲击。

这种设计在单机游戏中更为的多见。而目前市面上的游戏多数都不采用这种设计方法了。

2、逐个百分比掉落

在早期的MMORPG中道具的物品种类并没有那么的丰富,怪物身上往往掉落的东西不会超过五种。(种类不是数量)

这时候比较流行的掉落方式是逐个百分比掉落。假设我们有ABCD四个道具,那我们会先计算A是否掉落,然后计算A的掉落数量,再计算B是否掉落以及掉落数量,然后直到所有道具循环完毕。来看下实例,我们先设置概率和最大掉落和最小掉落数量。


ABCD的掉落几率分布为15%,20%,25%,30%。当确定A掉落后,掉落数量的概率是均等的,掉1个和2个的概率分别为50%。

我们和概率进行对比,如果小于等于概率则生成掉落,大于就代表没有掉落。

这里要注意一点,我们在这里要用到四个随机数而不是一个。为什么要用四个而不是一个,我们希望不同物品的随机事件是独立的不是一个互相影响事件。如果只用一个随机数会发生什么结果那?一旦掉落了物品A,那么势必BCD全部都会掉落。(掉落A证明随机数是小于15%)这样的体验是非常诡异的,一个良好的体验肯定是让玩家尽量在每次掉落中都能获取物品。达到这样的设计目的明显我们不能只用一个随机数。

采用四个随机数我们得到如下图的一组随机数

它非常易于理解并且对于单个物品的总体产出是很稳定的。但它有一个问题,无法控制掉落组合的精确数量,比如我们想要掉1个A加1个B的概率是5%,我们是无法做到的。这种设计更加的适合关卡掉落,而不适合用在礼包掉落。

3、权重掉落组似掉落

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

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

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

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

先来看下母集表,如下图所示

母集中掉落编号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等级高的人更容易刷出商店中的高级道具。我们在这里就不对这些元素一一介绍了,其道理和进阶掉落都是一样的。
怪物掉落

之前给大家介绍了几种掉落的方式,怪物掉落一般使用的是进阶掉落,但也不是所有子集都进阶。

说一下我们的设计思路。首先,我们要规划所有的子集类型。举例来说

1、货币子集。这个子集是控制掉落货币的子集。怪物掉落的货币一般来说是不会有很大波动,我们可以通过这个掉落来算出每个怪物的产出货币量,最终控制总产出符合我们的预期。这个货币子集可能根据怪物类型而不同。比如有些游戏人形生物掉落货币会比动物多,有些游戏动物植物甚至是不掉落货币的。

2、材料子集。这里的材料包含普通材料和宝石等等。如果有特殊需要,材料子集也可以分多个子集。我们会根据材料的稀缺性来决定产出的量级,并且不会让玩家轻易获得珍稀材料。

3、装备子集。装备子集是玩家非常在意的一个掉落子集。一般情况下,我们会给玩家投放一些基础装备让他们可以通过日常杀怪获得这些装备。稀有装备有严格的进阶掉落控制,玩家可以在击杀一定量的怪物后可以获得一件稀有装备。这样保证在一定时间内给玩家一个较大收获,刺激玩家继续杀怪。

注:本文节选自《平衡掌控者—游戏数值战斗设计》

游戏中掉落系统的设计相关推荐

  1. 关于游戏中仓库类的设计

    前言 这个游戏中的仓库类设计开始于春节前,和大家一样,我也是期盼着放假而无心工作,所以在放假前一天虽然蹦出了思维的火花,我却没有使用文字记录下来,但是大致的思路我已经记录到脑子中了,这一次的突然感悟, ...

  2. 开发笔记:掉落系统模块设计思路

    本文所讨论的掉落系统是一个游戏中的通用模块,不仅局限于打怪时掉落物品,包括抽卡.开宝箱.任务奖励.活动奖励等功能都可以使用.抽象地说,掉落系统是由给定参数按照特定的算法生成一系列可附加在玩家身上的东西 ...

  3. 关于类DOTA游戏多样化技能系统的设计思考

    在游戏里,每一个人物都有很多的技能.像DOTA,英雄联盟一样,技能也不都是单一的直线判断,而是有很多的花样.这类游戏的技能系统是如何设计的呢? 这里想从自动机的角度来抽象这个问题,以期得到一个更泛化的 ...

  4. 游戏中的人工智能AI设计

    因为在现在的项目中花了很大精力设计和制作怪物AI和技能,所以在这里也做个小总结. 什么叫做游戏中的AI        游戏中的AI可以简单的理解为计算机控制的智能角色,这些智能角色能够通过周遭环境或者 ...

  5. 游戏开发-GM系统的设计

    游戏管理员(gm)作为游戏中拥有更高权限的账号, 在游戏开发的过程中,我们需要很早的将gm系统做出来, 作为测试游戏逻辑具有不可替代的作用. 内容目录 服务端与客户端通讯基本流程 gm命令格式设计 g ...

  6. 游戏中用户升级的设计

    在游戏中,有多个模块都会涉及到升级的问题,例如,玩家升级,装备升级,英雄升级等升级问题. 用户升级 数据库设计 需要一个经验值静态表 id : 等级的idexp_line : 本级达标经验值exp_o ...

  7. Unity制作游戏中改名系统(第一次改名免费、改名提示、充值获得改名次数等 )

    Unity游戏制作中UI界面名字修改 游戏名称修改 简单粗暴直接上代码 关于充值系统的概念 游戏名称修改 现在网络游戏中名字是标新立异.展示自己独一无二的个性的方式之一,名字越来越烧,操作越来越低,也 ...

  8. 游戏脚本在移动游戏设计中的作用_关卡设计师谈游戏中的敌对角色设计Monster Design...

    原作者:Emil Glans 关卡设计是一门非常广泛的学科,不仅涵盖了基础几何学.脚本中的事件&敌人设计,还涉及到不同部分的组合.紧张度调节和叙事.在本文中,我将重点讨论一些与核心游戏设计密切 ...

  9. 游戏设计之我见 —— 动作游戏中的敌人移动设计

    这篇博客结合了一些游戏案例,介绍了在3D动作游戏中常用的AI移动规律的设计. 移动方向 在3D游戏中,所有的物件都是以"横·纵·高"三个轴为基础进行移动. 但是对于动作游戏来讲,如 ...

最新文章

  1. 以太坊智能合约Demo
  2. 使用WKWebView替换UIWebView
  3. 利用均值漂移实现图像分割的原理和OpenCV代码
  4. 如何在队列排队之前让ThreadPoolExecutor将线程增加到最大数量
  5. BNU 34974 MATLAB大法好
  6. Linux文件系统的类型及日志文件系统和非日志文件系统的区别
  7. boost::mpl模块实现reverse相关的测试程序
  8. app配置智能硬件的解决方案
  9. 苹果CMS萝卜二开修复渐变绿影视原生App源码-投屏试看可用
  10. 学计算机的人玩什么游戏,亲戚眼中的大学专业:学的计算机啊,游戏打的肯定贼好吧...
  11. jni开发-java调用c函数,c调用java函数实现
  12. commit(), commitNow()和commitAllowingStateLoss()
  13. 椭圆极点极线性质_圆锥曲线(18)———圆锥曲线题目背后的性质总结(1)
  14. Windows安装光盘启动优盘制作
  15. java实现打开新窗口_[Java教程]javascript 打开新窗口(window.open)
  16. [机器学习、Spark]Spark机器学习库MLlib的概述与数据类型
  17. 打死都不要进外包,来看看我在阿里外包的这2年......
  18. 【kali-漏洞利用】(3.4)Metasploit渗透攻击应用:MySQL渗透过程
  19. 光伏项目电力监控系统的重要
  20. windows 命令大全

热门文章

  1. android free form,android freeform模式定制桌面系统
  2. Socket多人聊天MFC版
  3. 多张图片合成一张的ps技术
  4. Solidworks提示字体Arial Unicode MS安装不正确,PDF文件中一个或多个文本字串可能遗失怎么办...
  5. Navicat Premium12 安装教程
  6. 【vue】滴滴cube-ui 简化安装
  7. 中国科学院计算机所张浩,专家人才库数据----中国科学院计算技术研究所
  8. Nwafu-OJ-1429 Problem Z C语言实习题五——4.用指针实现数据位置调整
  9. sublime text + LaTex 写作生成PDF | LaTex代码自动补全工具 | MiKTeX安装宏包
  10. 耗时一个星期整理的APP自动化测试工具大全