游戏开发论坛

 找回密码
 立即注册
搜索
查看: 23202|回复: 30

[原创] 「高阶数值」适用于大部分随机数算法的数值公式

[复制链接]

3

主题

23

帖子

49

积分

注册会员

Rank: 2

积分
49
QQ
发表于 2012-3-5 13:11:00 | 显示全部楼层 |阅读模式
数值规则:设计一个随机数,当随机到成功值时,就会获得一个对象或对象组中的对象。
如果是对象组,则某个对象获得的次数越多,其概率会随之降低,而其它对象的获得概率会有所增加(注:如果对象组中的某个对象获得的次数达到上限,则它的概率将会被合理地分配到其它对象中)

示例:假设游戏中的某个强化功能有A、B、C三类的强化槽,每次强化成功则A、B、C中随机一项获得一次强化值,A、B、C均有最大强化次数
(比如A可以增加多少点某个属性值,B以百分比的形式增加某个属性值,C以百分比的形式增加所有的属性值,当然,这个设定与该公式是无直接关系的,仅仅用于说明A、B、C的作用效果是A<B<C;A可以强化a次,B可以强化b次,C可以强化c次,总次数为all)
/* 示例的作用仅仅是便于理解,而非公式的局限性 */

1、设定参数
(1)基础数据:
成功概率:Rand_all;出现A的概率:Rand_a,出现B的概率:Rand_b,出现C的概率:Rand_c
出现数量:Num_all;A的出现数量:Num_a,B的出现数量:Num_b,C的出现数量:Num_c
总的数量:NumMax_all;A的最大数量:NumMax_a,B的最大数量:NumMax_b,C的最大数量:NumMax_c
(2)调整系数:
幂系数:Basis_pow;上限系数:Basis_max;属性系数:Basis_game;属性修正系数:Basis_gameX
(3)规则系数:
A的基础概率:A_rand;B的基础概率:B_rand;C的基础概率:C_rand(注:B_rand+C_rand=1.00)

2、制定公式
(1)强化成功
Rand_all = 1/(Num_all+1)^Basis_pow*max(Basis_max,roundup(Basis_game,0)*Basis_gameX))*(1-int(Num_all/NumMax_all))

(2)出现A或B或C的概率
Rand_a = ((A_rand - Num_a*(A_rand / NumMax_a))+((1-A_rand)+ Num_a*(A_rand / NumMax_a))*Num_b+Num_c)/(NumMax_b+Numax_c))*(1-int(Num_a / NumMax_a))
Rand_b = (B_rand*(1 ? Num_b / NumMax_b*(1-int(Num_c / NumMax_c)))+C_rand*(Num_c / NumMax_c)*(1 - int(Num_b / NumMax_b)))*(1 - Rand_a)
Rand_c = (C_rand*(1-Num_c / NumMax_c*(1-int(Num_b / NumMax_b)))+B_rand*(Num_b / NumMax_b)*(1-int(Num_c / NumMax_c)))*(1-Rand_a)
(注:max、roundup、int等属于excel中的函数格式规则)

3、公式解析:
(1)强化成功Rand_all
1/(Num_all+1)^Basis_pow     
// 强化成功的曲线,即整个公式的基础概率,Basis_pow用于调整获得的难度,如果第一次的成功率需要小于1,则可以将(Num_all+1)中的1设定成更大的浮点型数值
*max(Basis_max,roundup(Basis_game,0)*Basis_gameX))
// 该公式部分的作用是调整强化成功的基础概率,Basis_max用于控制强化值,以避免属性系数会使得强化成功概率在多次保持在100%;Basis_game是该部分的核心,可以表示用于代入游戏中的某个属性值,例如时间、成就点、级别、失败次数等等,也有可能是某个子公式,例如时间/3600,成就点区平方根或级别的幂函数等等。而Basis_gameX是用于对该数据的修正,例如遇到值过大的数据时,可以将该值修正为平衡数据,因此,属性修正系数允许省略。
*(1-int(Num_all/NumMax_all))
// 可省略。设置一个公式开关,以避免数据的漏洞导致强化总次数达到最大时仍然还有成功的概率会被继续强化,例如:原本是强化总次数30次,结果能够达到31次

(2_a)出现A的概率Rand_a
((A_rand - Num_a*(A_rand / NumMax_a))
// 基础系数A_rand也就是获得A的初始概率,该值为小于1的浮点型数据,后半部分表示当A出现的次数越多,则Rand_a的值会越小
+((1-A_rand)+ Num_a*(A_rand / NumMax_a))*(Num_b+Num_c)/(NumMax_b+Numax_c))
// 当B与C出现的次数增加时,则A的获得概率会相对提高。乘号之前的部分会随着A获得的数量而逐渐增加,趋近于100%,而后面半部分是核心,只有在B与C全部出现时,则会100%出现A
*(1-int(Num_a / NumMax_a))
// 不可省略。与(1)中的相关公式部分作用相同

(2_b)出现B的概率Rand_b
(B_rand*(1 ? Num_b / NumMax_b*(1-int(Num_c / NumMax_c)))
// 当B的获得数量增加时,则Rand_b的概率会随之降低;但是如果C的获得数量达到最大值时,则降低的规则将会被忽略,因为Num_c / NumMax_c会等于1,也只有其为整数时,int()函数才会输出为1,否则为0
+C_rand*(Num_c / NumMax_c)*(1 - int(Num_b / NumMax_b)))
// 当C的获得数量增加时,则Rand_b的概率会随之增加;但是如果B的获得数量达到最大值时,则增加的规则会被忽略。同时,上一部分和该部分的总和结果为0,因此Rand_b的获得概率为0
*(1 - Rand_a)
// 该数据为B与C的获得概率总和


(2_c)出现C的概率Rand_c
Rand_c与Rand_b的结构相同,因此不作解析

36

主题

1378

帖子

4955

积分

论坛元老

Rank: 8Rank: 8

积分
4955
发表于 2012-3-5 19:14:00 | 显示全部楼层

Re:「高阶数值」适用于大部分随机数算法的数值公式

一个不遵循玩家数据感觉出发 妄自断定的数值都是低阶数值

高阶数值不玩公式  不整随机 最主要的是不偷懒 什么数据都拿捏得恰到好处 无论你怎么玩 都是那个点

3

主题

23

帖子

49

积分

注册会员

Rank: 2

积分
49
QQ
 楼主| 发表于 2012-3-6 10:19:00 | 显示全部楼层

Re: Re:「高阶数值」适用于大部分随机数算法的数值公式

luyushun: Re:「高阶数值」适用于大部分随机数算法的数值公式

一个不遵循玩家数据感觉出发 妄自断定的数值都是低阶数值

高阶数值不玩公式  不整随机 最主要的是不偷懒 什么数据都拿捏得恰到好处 无论你怎么玩 都是那个点


抱歉,阁下属于拍着脑门子填数据的牛人,逼人惭愧之至

36

主题

1378

帖子

4955

积分

论坛元老

Rank: 8Rank: 8

积分
4955
发表于 2012-3-6 10:30:00 | 显示全部楼层

Re:「高阶数值」适用于大部分随机数算法的数值公式

一个不遵循玩家数据感觉出发 妄自断定的数值都是低阶数值

记住这句话

什么公式都是狗屎

就拿经验算法来说  一个怪物给予的经验等于 等级*20+5

那么 如果我希望 玩家每个 10-15  20-25 30-35 升级的时间都非常短  10-15 比 5~9要短 20~25要比15~19要短 你怎么用一个公式去做?  算法是要有 那只是方便你进行验证
但是陷进去了就不好了  你的东西就是如此

7

主题

1102

帖子

1178

积分

金牌会员

Rank: 6Rank: 6

积分
1178
发表于 2012-3-6 13:52:00 | 显示全部楼层

Re:「高阶数值」适用于大部分随机数算法的数值公式

第一:LZ 我想知道,你用你的方案,做过什么游戏?

第二:我这种人都看不大明白,如果把这个做文档发给程序,后果会怎样?

第三:ls说了,你的最终效果,也就是玩家体验是什么,合不合适,有没有分析,分析后有什么结论。

不管你想的理由和结论对错,关键你要由这个想的过程,至少表明你去验证过,思考过。

如果你这是拿个方案过来,为什么要有,怎么做,实现后效果都没有,拿过做什么呢?

10

主题

513

帖子

516

积分

高级会员

Rank: 4

积分
516
发表于 2012-3-6 16:49:00 | 显示全部楼层

Re:「高阶数值」适用于大部分随机数算法的数值公式

毫无嘲讽意味, 只是想向2楼求一个高阶数值制作的游戏学习一下, 就是不玩公式,不整随机的.

如果有的话万望赐教.

PS: 真的只是要学习一下...千万别误会...推荐一个2楼认为的即可, 我不会挑骨头说"这里有公式, 那里有随机"

36

主题

1378

帖子

4955

积分

论坛元老

Rank: 8Rank: 8

积分
4955
发表于 2012-3-7 02:24:00 | 显示全部楼层

Re:「高阶数值」适用于大部分随机数算法的数值公式

魔塔

10

主题

513

帖子

516

积分

高级会员

Rank: 4

积分
516
发表于 2012-3-7 07:55:00 | 显示全部楼层

Re: Re:「高阶数值」适用于大部分随机数算法的数值公式

luyushun: Re:「高阶数值」适用于大部分随机数算法的数值公式

魔塔


[em10]如果是单机游戏太多了我不用问, 呵呵是我说的不明白,网游,时代不要太久远的。。。

PS:魔塔其实算是解迷类游戏。。。有一些SNS的解迷游戏。。。不过这是游戏类型决定的。。。跟是不是"高阶数值"关系不是很大。。。需要一个彰显数值策划功力的而不是彰显游戏特点的例子。。。

36

主题

1378

帖子

4955

积分

论坛元老

Rank: 8Rank: 8

积分
4955
发表于 2012-3-7 09:11:00 | 显示全部楼层

Re:「高阶数值」适用于大部分随机数算法的数值公式

你要这样说就没有意思了
网游和单机都是游戏
其他RPG类的单机 经验 装备数据 掉率
与一般RPG类的网游 有不同吗?
这些都是游戏 别TM 这是单机 不是网游

数值是为系统服务的  
单机和网游 都是游戏
如果你非要将单机和网游隔离出来 似乎里边就有一道无法越过的鸿沟

所谓的网游就是一个广域的战网单机

10

主题

513

帖子

516

积分

高级会员

Rank: 4

积分
516
发表于 2012-3-7 10:45:00 | 显示全部楼层

Re: Re:「高阶数值」适用于大部分随机数算法的数值公式

luyushun: Re:「高阶数值」适用于大部分随机数算法的数值公式


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-6-27 00:20

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表