游戏设计中的算法题——计算宝物升级所需的资源数-阿里云开发者社区

开发者社区> 万仓一黍> 正文

游戏设计中的算法题——计算宝物升级所需的资源数

简介: 当今社会,智能手机的飞速发展。使得可以做到人手一部智能手机。而各种应用层出不穷。 手游(手机游戏)的出现,满足了人们对打发碎片时间的需求。   而在游戏中,宝物升级是最常见的剧情元素之一。而优秀的游戏设计师,在设计宝物升级系统时,要难易适中,要能把用户黏合在自己的游戏中,既不能太难,也不能太简单。
+关注继续查看

当今社会,智能手机的飞速发展。使得可以做到人手一部智能手机。而各种应用层出不穷。

手游(手机游戏)的出现,满足了人们对打发碎片时间的需求。

 

而在游戏中,宝物升级是最常见的剧情元素之一。而优秀的游戏设计师,在设计宝物升级系统时,要难易适中,要能把用户黏合在自己的游戏中,既不能太难,也不能太简单。那么如何设计宝物升级中的各项参数就是重中之重。

 

本文重点介绍,给定宝物的设计系统的各项参数,计算宝物升级所需的资源数。

 

问题:

某宝物初始是0级,现在要升级

从0级升到1级,所需的资源数为1,成功概率为90%,成功升1级,失败还是0级;

从1级升到2级,所需的资源数为2,成功概率为80%,成功升1级,失败降1级,降为0级;

从2级升到3级,所需的资源数为3,成功概率为70%,成功升1级,失败降1级,降为1级;

从3级升到4级,所需的资源数为4,成功概率为60%,成功升1级,失败降1级,降为2级;

从4级升到5级,所需的资源数为5,成功概率为50%,成功升1级,失败降1级,降为3级;

问:某宝物从0级升级到5级,所需要的资源数平均是多少?

 

定义一个函数F(N,M),M≥N。表示该宝物从N级升级到M级所需的平均资源数。本题中就是计算F(0,5)

很明显

F(N,N)=0;即F(0,0)=0,F(1,1)=0

F(N,M)=F(N,K)+F(K,M),N≤K≤M,F(0,4)=F(0,2)+F(2,4),即F(2,4)=F(0,4)-F(0,2)

 

用简便表示函数F(N),即F(N)=F(0,N),那么本题就是计算F(5)

 

定义PN,为从N-1级升到N级的成功的概率

本题中,P1=0.9,P2=0.8,P3=0.7,P4=0.6,P5=0.5

定义LN,为从N-1级升到N级所需的资源数

本题中,N1=1,N2=2,N3=3,N4=4,N5=5

 

言归正传,下面分析如何计算F(N)

先分析F(1)

从0级升到1级,所需的资源数为L1。其中(1-P1)的会失败,还是停留在0级,这些还是需要从0级升到1级。那么,就有个分析公式

F(1)=L1+(1-P1)×F(1)

F(1)=L1÷P1=1÷0.9=1.111

 

再分析F(2)

从1级升到2级,所需的资源数为L2。其中(1-P2)的会失败,降级到0级,这些还是需要从0级升到2级。那么,就有个分析公式

F(2)=F(1)+L2+(1-P2)×F(2)

F(2)=(F(1)+L2)÷P2=(1.111+2)÷0.8=3.889

 

再分析F(3)

从2级升到3级,所需的资源数为L3。其中(1-P3)的会失败,降级到1级,这些还是需要从1级升到3级。那么,就有个分析公式

F(3)=F(2)+L3+(1-P3)×F(1,3)

F(3)=F(2)+L3+(1-P3)×(F(3)-F(1))

F(3)=(F(2)+L3-(1-P3)×F(1))÷P3

F(3)=(3.889+3-(1-0.7)×1.111)÷0.7=9.365

 

再分析F(4)

从3级升到4级,所需的资源数为L4。其中(1-P4)的会失败,降级到2级,这些还是需要从2级升到4级。那么,就有个分析公式

F(4)=F(3)+L4+(1-P4)×F(2,4)

F(4)=F(3)+L4+(1-P4)×(F(4)-F(2))

F(4)=(F(3)+L4-(1-P4)×F(2))÷P4

F(4)=(9.365+4-(1-0.6)×3.889)÷0.6=19.682

 

再分析F(5)

从4级升到5级,所需的资源数为L5。其中(1-P5)的会失败,降级到3级,这些还是需要从3级升到5级。那么,就有个分析公式

F(5)=F(4)+L5+(1-P5)×F(3,5)

F(5)=F(4)+L5+(1-P5)×(F(5)-F(3))

F(5)=(F(4)+L5-(1-P5)×F(3))÷P5

F(5)=(19.682+5-(1-0.5)×9.365)÷0.5=39.999

 

 

结论是

从0级升到1级,平均所需的资源数为P(1)=1.111

从0级升到2级,平均所需的资源数为P(2)=3.889

从0级升到3级,平均所需的资源数为P(3)=9.365

从0级升到4级,平均所需的资源数为P(4)=19.682

从0级升到5级,平均所需的资源数为P(5)=39.999

 

下面是通过计算机模拟宝物升级的过程,并做了统计,再求平均数。一共做了五组,每组1000000次。

 

  理论值 第1组 第2组 第3组 第4组 第5组
P(1) 1.111 1.111 1.111 1.111 1.111 1.111
P(2) 3.889 3.889 3.890 3.890 3.889 3.889
P(3) 9.365 9.367 9.365 9.368 9.363 9.364
P(4) 19.682 19.685 19.690 19.692 19.681 19.682
P(5) 39.999 40.000 40.002 40.001 39.996 39.988

 

从上表的数据来看,理论值和实际统计值差别不大了。说明我们分析的理论值是合理的。

 

综述:

F(1)=L1÷P1

F(N)=(F(N-1)+LN-(1-PN)×F(N-2))÷PN,当N≥2时。

 

再给一题:

某宝物初始是0级,现在要升级

从0级升到1级,所需的资源数为1,成功概率为100%,成功升1级;

从1级升到2级,所需的资源数为2,成功概率为85%,成功升1级,失败不降级;

从2级升到3级,所需的资源数为3,成功概率为75%,成功升1级,失败不降级;

从3级升到4级,所需的资源数为4,成功概率为65%,成功升1级,失败不降级;

从4级升到5级,所需的资源数为5,成功概率为55%,成功升1级,失败降1级,降为3级;

从5级升到6级,所需的资源数为6,成功概率为45%,成功升1级,失败降1级,降为4级;

从6级升到7级,所需的资源数为7,成功概率为35%,成功升1级,失败降1级,降为5级;

从7级升到8级,所需的资源数为8,成功概率为25%,成功升1级,失败降1级,降为6级;

从8级升到9级,所需的资源数为9,成功概率为20%,成功升1级,失败降1级,降为7级;

从9级升到10级,所需的资源数为10,成功概率为15%,成功升1级,失败降1级,降为8级;

问:某宝物从0级升级到10级,所需要的资源数平均是多少?

 

你的答案是多少?我的答案是7763.564285

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
连续x次奇数(n+2*x)是合数的算法题暴力算法
// 连续6个奇数a,a+2,a+4,a+6,a+8,a+10都是合数,求最小的a // 暴力解法 先上结果,后面贴上代码: 1次连续n=9,连续值个数: 1;耗时: 0ms,总计: 0ms 2次连续n=25,连续值个数: 1;耗时: 0ms,总计: 0ms 3次连续n=91,连续值个数: 1...
658 0
算法学习之路|个位数统计
给定一个k位整数,请编写程序统计每种不同的个位数字出现的次数。例如:给定N = 100311,则有2个0,3个1,和1个3。
865 0
怎么设置阿里云服务器安全组?阿里云安全组规则详细解说
阿里云服务器安全组设置规则分享,阿里云服务器安全组如何放行端口设置教程
7422 0
我们如何实现“业务 100% 云原生化,让阿里中间件全面升级到公共云架构”?
在今年的天猫双 11 中,中间件支撑了 5403 亿的交易量,并全面升级到了公共云架构。 此次的架构升级,是以开源为内核、以公共云为基础、以 OpenAPI 进行解偶扩展,在架构上,对开源、自研、商业化进行统一。通过采用和反哺开源、推动社区建设,通过阿里巴巴丰富的业务场景、打磨技术的性能和可用性,通过云上商业化服务更多企业、打造更好的用户体验,全方位锤炼云上产品的竞争力。
213 0
阿里云资源编排之函数计算
本文介绍阿里云资源编排服务(ROS)(下面简称ROS)函数计算相关功能,涉及如下资源类型: ALIYUN::FC::Service  创建服务 ALIYUN::FC::Function  创建函数 ALIYUN::FC::FunctionInvoker 主动执行函数 ALIYUN::FC::Trigger  创建触发器,触发执行函数 通过使
1019 0
基于投票的热门计数算法策略
类似基于投票的热门计数算法普遍应用在热门文章,热门评论等场景中, 典型的比如网易和今日头条的评论区,国外比如Hacker News和Reddit的主题排序。
3325 0
在Android中afinal框架下实现sqlite数据库版本升级的办法
     上一篇文章采用的是SQLiteOpenHelper中的onUpgrade方法实现数据库的升级。      首先获取Context: private Context mContext=this; 然后实现FinalDb内的静态方法: FinalDb.
787 0
面试题:使用递归的方法计算1到100的累加。
今天去面试,遇到这道题目,有段时间没写程序了,温习一下: 题目是使用递归的方法计算1到100的累加,也就是计算1+2+3+4+........+100。大家想必已经听说过高斯如何计算这道题的故事,也知道答案是5050。
938 0
+关注
万仓一黍
算法研究
151
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载