数值策划入门指南(一):做数值就是做体验

数值策划要做什么?

有一天和朋友闲聊,说起我在做数值策划,他突然用很崇拜的语气问我:“是不是要会很多牛x的公式?”。其实很多人都会这样的想法:要会很多公式、数学要很厉害才能做数值策划。真的是这样么?数值策划这个职业比较难,但难点主要不在数学层面上,在这里分享一些经验和想法,希望能帮到一些打算入职或是已经入职的新人。 首先回答一下上面那个问题,要数学很厉害才能做数值策划么?不是,具备高中的数学知识加上少数的高数知识就可以做一个合格的数值策划了。升级所需经验要用什么样的公式?怪物的难度曲线应该长成什么样子的?属性增长该用幂函数还是二次函数?数值策划要做的并不是做这些数学题,而是做体验。  重要的事说三遍:做数值就是做体验!做数值就是做体验!做数值就是做体验!记住这句话能避免数值之道上的很多弯路。 什么是做体验,举个例子说明一下: 比方说现在一款游戏中的角色在12级的时候会把10级的蓝色武器换成10级的紫色武器,假设蓝色武器的攻击定好了是50,那这把武器的攻击应该是多少呢? 如果是用公式的思路来处理,我们可能得出:紫色武器的攻击=同等级蓝色武器攻击*1.2,然后得出这把紫色武器的攻击=60。简单、粗暴、快速,然而并没什么卵用,虽然60>50,换了之后玩家肯定是成长了,但玩家不一定能体验得到这种成长。 用做体验的思路来处理,我们完全不需要拘泥于公式,只需要去考虑体验上的问题:如何让玩家感觉到这种成长?
  1. 以前打不过的关卡变得能打过——体验明显,但前期不适合有这种挫败感,不行
  2. 以前3刀砍死的怪变为2刀砍死——体验明显,无不良影响,可以
  3. 以前需要1个群攻技能+1下普攻才能打死怪,现在只需要1下群攻技能——体验明显,面对一群怪的时候非常爽,比二好
  4. ……
可能还有更多不同的方案,当我们逐一比较确定出最好的之后,需要调整怪物、技能、武器等多个系统的数值来实现这个体验,过程稍微复杂一点点,但效果完全会高出前者N个档次。

如何成为一名优秀的数值策划?

俗话说条条大路通罗马,前文一直在强调的体验并不是一条大路,而是罗马本身。一切的数值工作都是为了体验,一切的数值工作都应瞄准体验,如果一直向着“精准的平衡计算”、“漂亮的数值曲线”、“高大上的数值公式”这些方向走,那很有可能白走很长的路。 说完“罗马”我们来说大路,通向体验之路可以分为两大模块:对数值体验的理解和对数值体验的把控能力。   先说对数值体验的理解,多数游戏剥去外皮后会变成一堆数字,一款游戏的数值体验是所有体验里的重中之重。一个数值策划,要对体验有自己的判断和理解,这样才有可能一步一步做出一套优秀的数值。很多时候在数值上相等的东西体验是完全不同的。比如:
  1. a) 打某个怪100%掉落1个碎片,100个碎片合成1把武器。
  2. b) 打某个怪1%掉落1把和a中相同的武器。a和b中单次打怪的收益期望都是1/100把武器,两个体验哪个好呢?
其实对体验的理解就是由很多类似的问题构成,每个问题都并不一定有标准答案。作为一个数值策划你可以不去和别人辩论这些问题的标准答案,但一定要有自己对问题的理解,因为这个理解决定了你会做出一个什么样的游戏。这个理解甚至可以不对,但一定要是属于你自己的,因为这是数值策划的核心竞争力。 下面给出一些体验的相关问题:
  1. 除了文中提到的几种,还有什么样的方式能带给玩家明显成长体验?
  2. 如何让玩家感觉到命中、闪避、暴击……等特殊属性的作用?
  3. 2%获得500元,100%获得10元,50%获得20元,几种体验有什么不同?
  4. 总消耗、总产出都相同的前提下,有失败可能的强化、100%成功的强化、有几率暴击的强化那种体验更好?
  5. 升级技能和强化装备都只消耗金币和升级技能消耗金币、强化装备消耗强化石两种方式的体验能做出怎样的差异?
  6. A:生命+1000、攻击+50、物理防御+50、法术防御+50
B:攻击+200 假设A和B的效用相同,两种成长方式有什么区别,分别适用于什么样的游戏系统?
  1. 怎样的消费体验比较好?
…… 以上问题只是和体验有关的一小部分问题,这些小问题都是在一个大问题之下的:什么样的数值体验是好的数值体验?如果一个人对这个问题没有自己的见解,那可以断定他对数值这份工作并没有太深的理解和爱,面试十有八九会被刷下去。推荐玩一些画面约等于零的挂机游戏,感受一下在几乎没有画面和操作的情况下纯粹的数值是怎样的体验,如:《无尽的饼干》、《战斗无止境》、《小黑屋》、《模拟虫群》、《挂机传奇》……   一个画家对美的理解非常重要,这决定了他是毕加索还是莫奈,但无论他是谁他都需要会用笔。数值策划对数值体验的理解也非常重要,这决定了他做出来的是《魔兽世界》还是《最终幻想》,但无论他做什么游戏他都需要会用EXCEL。 在做数值策划以前,我以为做数值需要用到matlab、SPSS,需要用一堆大学乃至数学专业研究生的知识。做数值策划后慢慢认识到,数值策划并不是需要非常高的数学能力,什么拉格朗日、微积分、插值法、大学高数范畴的知识甚至都不需要用。加减乘除、概率、期望会这些基本就能解决80%的问题,剩下15%的问题用VBA模拟分分钟搞定,还有5%的问题可以留到后续版本调整,好数值都是慢慢调出来的。 工具方面最主要的就是要熟练使用EXCEL和VBA,要能在EXCEL的表格中建立基本的数学模型,把数与数之间的关系建立起来。而VBA一般是用来模拟一些过程或是复杂点地处理数据。 本文不会做有关于EXCEL和VBA的具体教学,这些一百度就知道的东西自己慢慢学就好,这里按照难度递增的原则梳理一条EXCEL的实践路线供大家练手:
  1. 现在有推图、经验副本、每日任务三种获得经验的方式,做出一个上限为60级的升级经验的表,至少包含这些信息:每级所需的升级经验、每级所需的时间、玩家在不同天数到达的等级。
  2. 在上表中引入属性,包含:生命、攻击、防御
  3. 添加战斗公式:伤害=MAX((攻击-防御),0.15*攻击),玩家和怪物均为每秒钟同时攻击一次,做出玩家10级时需要正好消耗80%血量才能杀死的怪物属性。
  4. 做出攻击型、防御型、生命型三种符合3中要求的怪物。
  5. 加入10级、20级……60级的装备,每级有3件装备,装备在推图和装备副本中均有掉落,做出一个装备产出的表,要求玩家到60级时刚好能凑齐50级的装备。
  6. 做出一份战力期望表,根据天数推算每天玩家的等级和装备情况,并推算出相应的属性。
  7. 算出玩家每个等级所应面对的攻击型、防御型、生命型三种类型的怪物属性。(全为1V1情况下玩家需要耗血80%)
  8. 在装备、怪物、等级属性的表中加入命中、闪避、暴击、坚韧等属性,公式自拟。然后再重复做7一次。
  9. 加入装备强化的玩法,每次强化增加被强化装备1%的属性,消耗金币,给出推图的金币产出和强化的金币消耗。
  10. 以上所有数值均以体验好为标准,重复调整至自己满意为止,也可以尝试进一步扩展这个表。
按照上边的过程一步一步做下来,得出的是一份极简的游戏数值,真正的数值体系当中会有更多的属性、更复杂的战斗公式和抽奖这样的随机产出方式和类似于洗练这种随机的成长方式,并且还要同时兼顾到各种各样的消费人群,可能会需要用到VBA来处理一些复杂的问题,工作量要比上边的实践大得多,但并不会很难。能做出一张完整的数值表,是一个数值策划的基础,网上有很多人分享类似的数值表,我就不做重复的工作了,建议各位新人百度一两份学习一下。 综上:优秀的数值策划=数学基本功+熟练使用EXCEL+能用VBA处理一些问题+对体验的深刻理解。 欢迎有疑惑或是不同观点的读者在评论区交流讨论,希望你我都能从进一步的讨论中获益。

查看原文:http://www.51xyyx.com/2990.html
  • 8
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 C# 中,可以通过 `Thread` 类来创建线程,并在线程中更新 `Chart` 控件的数值。具体实现步骤如下: 1. 在窗体上添加 `Chart` 控件,并设置其 `ChartType` 属性为 `SeriesChartType.Line`。 2. 在窗体的构造函数中启动一个新线程,该线程每隔一段时间随机生成一个数值,并通过 `Invoke` 方法将该数值更新到 `Chart` 控件中。 下面是示例代码: ```csharp using System; using System.Threading; using System.Windows.Forms; using System.Windows.Forms.DataVisualization.Charting; namespace ChartThreadDemo { public partial class Form1 : Form { private Random random = new Random(); public Form1() { InitializeComponent(); // 启动新线程 Thread thread = new Thread(new ThreadStart(UpdateChart)); thread.Start(); } private void UpdateChart() { while (true) { // 随机生成一个数值 int value = random.Next(100); // 将数值添加到 Chart 控件中 chart1.Invoke(new Action(() => { chart1.Series[0].Points.AddY(value); chart1.ChartAreas[0].AxisX.ScaleView.Scroll(ChartScrollStyle.Last); })); // 等待一段时间 Thread.Sleep(1000); } } } } ``` 上述代码中,`UpdateChart` 方法是线程的入口点,该方法使用 `Random` 类生成一个随机数值,并通过 `Invoke` 方法将数值添加到 `Chart` 控件中。在 `Invoke` 方法中,使用了一个匿名方法来更新 `Chart` 控件,其中 `Series[0]` 表示 Chart 控件中第一个系列的数据,`Points` 属性表示该系列中的数据点,`AddY` 方法可以将一个数值添加到数据点中。`ChartAreas[0].AxisX.ScaleView.Scroll` 方法可以控制 Chart 控件的滚动,将其滚动到最后一个数据点的位置。 需要注意的是,在更新 Chart 控件时,需要使用 `Invoke` 方法跨线程访问控件,否则会抛出线程访问异常。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值