注册 | 登录

游侠NETSHOW论坛





游侠NETSHOW论坛 游侠NETSHOW论坛 金书红颜录 既然在憋大招,我就建议个随机函数替代办法吧。 ...
查看: 3128|回复: 17
打印 上一主题 下一主题

[建议] 既然在憋大招,我就建议个随机函数替代办法吧。 [复制链接]

帖子
119
精华
0
积分
60
金钱
945
荣誉
0
人气
3
评议
0
跳转到指定楼层
楼主
发表于 2014-6-15 22:53:58 |只看该作者 |正序浏览
本帖最后由 l0101270 于 2014-6-16 18:06 编辑

RT。金书随机数已经被人太多吐槽过了,不多说了。虽然不知道是不是著名的rand()伪随机,但个人取样300后,已经证实目前帖子的函数不靠谱。

所以,个人建议,既然在憋大招,就顺便把随机机制改了。我个人目前的想法是,不需要如魔兽那样搞多复杂的几率叠加,只要把随机数“生成”,改成“排序”就应当没问题了。具体流程如下。
(1)取随机数,整数1~100。事件判定前对1~100进行随机排序,可得一乱序数列。
举例,小二对小三战斗开始时,生成一乱序数列如下:
1,98,97,100,3.......
(2)在进行事件判定是,采取《火焰纹章》中的随机数消耗机制,消耗以上得到的数列。
举例,
小二对李秋水战斗开始后,小二先动,攻击小三,命中率假定46%。以(1)中得到的乱序数列判定,1~46为命中,47~100为不中。第一个数为1,在1~46区间内。小二命中。随机数1被消耗掉,不再使用。
接着,小三攻击小二,命中率假定97%。以(1)中乱序数列判定,1~97为命中,98~100为不中。第二个数为98(因为第一个数1,已经被之前事件消耗掉了),在98~100区间内,小三不中,小二闪避成功。随机数三被消耗掉。
(3)当整组乱序数列被消耗掉时,重新进行(1)中的排序。生成新的乱序数列以供使用。
(4)过程完毕
----------------------------------------------------------------------------------------------------------------------------------------------------------------
方法优势:强制使各种判定结果在100次判定中必然出现,使实际几率贴近于设定几率。考虑到玩家心里预期,在实际应用过程中,可考虑将数列尺寸压缩至1~50,或者1~10。写成子程序之后,可以方便替换现有函数。

方法劣势:称号,攻击,等等事件需使用单独数列,不可混合使用同一数列。个人建议,对于“攻击闪避事件”等判定次数较多的使用大尺寸数列(1~100),判定次数较少的,如群战中称号,使用小尺寸数列。需实地测试。需在群战中对每个目标使用单独数列 ,会带来运算量及内存占用,需实地估计。(个人观点,以目前普遍计算机性能(i5,4G起跳)来说问题不大。双核,2G之类恐怕需要测试)。
---------------------------------------------------------------------------------
补充:回帖时提到了PRD机制,为什么我觉得它不适合金书呢?用PRD机制的话,就意味着开局的判定几率会小的可怜(譬如李秋水开局机会不出称号)。这样大家可以开局战斗会非常舒心的搞掉某些重要人物,或者开局几回合根本打不中人。

所以倒不如把随机事件压缩在一个玩家可接受的回合范围内发生。





已有 3 人评分金钱 人气 收起 理由
慕容玄恭 + 30 + 1 狂拽炫酷吊炸天
lljjddy + 1 高端大气上档次
断崖听雪 + 1 数死早,纯支持

总评分: 金钱 + 30  人气 + 3   查看全部评分

使用道具 举报

帖子
1091
精华
0
积分
567
金钱
1560
荣誉
2
人气
10
评议
0
18#
发表于 2014-6-21 15:01:47 |只看该作者
怎么看都是C

使用道具 举报

帖子
698
精华
0
积分
349
金钱
3165
荣誉
0
人气
4
评议
0
17#
发表于 2014-6-21 13:37:50 |只看该作者
你这样会导致SL无效.有些关卡卡住了就真是卡住了

使用道具 举报

帖子
1456
精华
3
积分
1352
金钱
5416
荣誉
0
人气
237
评议
0
16#
发表于 2014-6-19 20:48:02 |只看该作者
断崖听雪 发表于 2014-6-18 10:41
话说宅神,如果一个游戏需要大量sl,本身也不太正常吧

是啊,我吐槽难度也不是一次两次了

使用道具 举报

帖子
3203
精华
1
积分
1903
金钱
5492
荣誉
0
人气
1010
评议
0
15#
发表于 2014-6-18 10:41:25 |只看该作者
zyf19860527 发表于 2014-6-17 19:30
1、LZ提出的方法,按通常来说,应该就是伪随机吧。在红颜录这样一款需要大量SL的游戏中,用伪随机是要搞死 ...

话说宅神,如果一个游戏需要大量sl,本身也不太正常吧
金书漫卷,踏歌长行

使用道具 举报

帖子
3203
精华
1
积分
1903
金钱
5492
荣誉
0
人气
1010
评议
0
14#
发表于 2014-6-18 10:39:23 |只看该作者
l0101270 发表于 2014-6-17 01:54
第一,我没有确定红颜录里采用了这个rand()函数,这个我开头就声明过的。金书的随机问题已经被人吐槽太 ...

建议楼主直接找runningon反应吧,这东西太专业,一般玩家都不太懂,而且到底游戏是怎么做的,别人也不清楚,容易引发争吵。runningon是游戏的主程序员,基本上代码都是他写的
金书漫卷,踏歌长行

使用道具 举报

帖子
5963
精华
0
积分
3000
金钱
9540
荣誉
0
人气
186
评议
0
13#
发表于 2014-6-18 00:09:51 |只看该作者
本帖最后由 LM31415 于 2014-6-18 00:12 编辑

我建议,可以引入“回避疲劳”的概念(每回避一次攻击后降低一些回避值,当受到攻击命中后清零),很多rpg和战旗游戏里都有,比如GBA上机战og原创系列,一代就是回避无双,全是真实系机体的天下,二代加入回避疲劳日后,超级系的机体就好用很多了。。。

不过红颜录命中回避计算貌似跟一般游戏的计算方式不同,全是命中率的叠乘,不知道实现的难度咋样。。










使用道具 举报

帖子
1456
精华
3
积分
1352
金钱
5416
荣誉
0
人气
237
评议
0
12#
发表于 2014-6-17 19:30:01 |只看该作者
1、LZ提出的方法,按通常来说,应该就是伪随机吧。在红颜录这样一款需要大量SL的游戏中,用伪随机是要搞死人的;
2、没有什么迹象表明当前游戏在简单随机以外还有什么修正,尤其是照顾玩家情绪降低难度的修正。

使用道具 举报

帖子
236
精华
0
积分
119
金钱
2549
荣誉
0
人气
6
评议
0
11#
发表于 2014-6-17 13:23:06 |只看该作者
l0101270 发表于 2014-6-17 01:54
第一,我没有确定红颜录里采用了这个rand()函数,这个我开头就声明过的。金书的随机问题已经被人吐槽太 ...

我无意和你争吵,{:13_431:}甚至也对这个讨论话题不那么热衷。我说的是有些偏离内容,那是因为我觉得你提到的PRD算法蛮有趣的,所以贴出来链接,让点进来帖子的人如果有兴趣可以了解一下。

嗯,我的红字就是在描述你的算法,我没看出它有什么和你的算法不同的地方,只是你解释的角度不太一样。PRD算法不是这样的,PRD机制显然在短时间内事件连续发生概率不一定减小(比如JUGG的前两刀是否都不触发暴击)。

我所说的关于实际命中率与理论命中率之间的区别,是为了反驳你之前发的测试帖子,以及你在本帖开头提到的“目前帖子的函数不靠谱”。我只是想说明你不能证明现在的概率是有问题的。
而对于玩家的感受,没错,现在的红颜录相当多的时候给玩家很恶心的感觉。但如果想解决这个问题的话,与其设计新的随机数算法,减少随机要素难道不是更釜底抽薪也更简单的办法吗?
比如作如下设计:
达摩称号:自身携带药物数量加半,死后100%几率半血复活一次
潘阆称号:外功必出招;每30回合100%几率清除所有不良状态,恢复30%的血内,减30伤
相比于强调设计令人费解的随机数系统,显然强调减少这游戏的随机要素更适宜吧

当然,这游戏总要涉及随机要素,你提到的算法很有趣也能够派上用场。如果简单来估计一下的话,{:13_835:}我觉得它会在类似“10%触发点穴”这种类型的判定上起作用。即10回合内会且只会点穴一次,不会出现令玩家抓狂的连续点穴。但如果是命中率的话,如果设计0-99这样的随机数组,第一次攻击不命中,就只能使第二次命中的概率提升约1个百分点,其实没什么区别;而如果设计更小的数组则必然让实际概率和理论概率发生偏移。
总之我觉得你的算法如果能应用的话,应用到“10%概率点穴”“30%概率封气”这样的判定上不错,应用到命中率判定上则意义不大。
还有一个问题啊,比如己方一人和对方一人交替行动(这也是一般的情况),己方攻击不中,消耗了一个大的乱数。那么由于这个大的乱数消耗,轮到敌方行动的时候岂不是命中率提高了吗?这成了正反馈,与设计初衷完全相反了啊。


使用道具 举报

帖子
119
精华
0
积分
60
金钱
945
荣誉
0
人气
3
评议
0
10#
发表于 2014-6-17 01:54:42 |只看该作者
本帖最后由 l0101270 于 2014-6-17 02:08 编辑
falsitanvitt 发表于 2014-6-16 19:53
我之前有些误解了LZ的意思 现在想想的话LZ的算法还是有道理的
没理解错的话,它的作用在于使得 ...

第一,我没有确定红颜录里采用了这个rand()函数,这个我开头就声明过的。金书的随机问题已经被人吐槽太多,以至于我只能推测开发组简单采用了rand()函数。或许他们采取了某些别的措施,但从如此之多的玩家反馈来看,显然并没有解决问题 (无论目前的算法是伪随机,还是近似真随机,或者多么符合理论值)。

第二,关于计算机逻辑和赌徒谬误之间。这个答案不需要我来给出,回到我之前的帖子,你只需要考虑一下为什么暴雪要如此麻烦的加上一个PRD算法。dota里,某次随机事件的判定的影响可比红颜要小多了,但它的开发者都要费尽心思加上一个是随机事件均匀分布的算法。相较而言,红颜录做了什么呢?我不知道。

从目前金书游戏进程越来越依赖S/L来看,我只能臆测,什么都没做过,或者做过也是失败的。

现在我应该解释清楚我为什么要发这个帖子了么?你所纠结的东西,已经过于偏离我们需要讨论的东西了。我们可以再算一遍目前的游戏里随机分布,但结果没有任何意义。因为玩家吐槽和S/L依赖程度,本身已经把它否定掉了。(当然,开发组可以继续抱着“这是我的游戏,我才不在乎玩家怎么想"的心态)。

第三,最后,我提出的这个方法,和你的红字还是有些区别。你的红字在描述PRD算法,而我的想法呢,就是把所有随机事件压缩至某几个回合必然发生。譬如我主楼举的例子,在每100回合内,必然会有46回合命中,54回合不中。如果把数列压缩至50回合,必然会有23次攻击命中,27次攻击不命中。这样对于玩家心理预期而言,即便一打出一溜miss,也变的可以承受许多,因为他们知道之后的回合,命中会提高了。


对于连续点穴,数列尺寸会压缩至10。譬如一阳指10%点穴,用我的算法的话(1~10数列),每10回合必定而且只会点穴一回合。对于20%点穴率而言,每10回合,必定且只会点穴2回合,但与10回合内点穴是否连续出现无关。

使用道具 举报

帖子
236
精华
0
积分
119
金钱
2549
荣誉
0
人气
6
评议
0
9#
发表于 2014-6-16 19:53:01 |只看该作者
l0101270 发表于 2014-6-16 17:47
我首先声明一件事情,因为玩家心理预期的原因,真实随机在游戏中是不能使用的。必须要让所有可能结果,在 ...

我之前有些误解了LZ的意思{:13_431:} 现在想想的话LZ的算法还是有道理的
没理解错的话,它的作用在于使得所有概率在长期(几十回合至一百回合)保持不变,而在短时间(几个回合)内同一事件连续发生的概率变小(连续命中、连续不命中、连续触发点穴等)。
关于PRD算法以及其应用于DOTA系统中还是第一次听说,长见识了{:13_431:}由于官方给出了消息,可以确定这样的系统是确实存在的:
http://www.playdota.com/forums/showthread.php?t=7993
http://dota2.gamepedia.com/Pseudo-random_distribution
另外我找到了LZ之前发的关于命中率测试的帖子。其中取样的数量过少了,合适的取样数量可以由想要的置信水平测定,具体可参考百度词条“置信区间”。
选用的实验方法也有些不适合,要实验的话为什么不选用十二钗呢?用面攻武功攻击十二钗可以很快得到足够多的样品数据
LZ既然认为红颜录采用了C里的rand()函数,为什么会觉得这种随机数产生的概率会与理论值不符呢?在计算机逻辑和赌徒谬误(或热手谬误)之间选择后者,似乎有些不智

使用道具 举报

帖子
119
精华
0
积分
60
金钱
945
荣誉
0
人气
3
评议
0
8#
发表于 2014-6-16 18:12:18 |只看该作者
harry1984 发表于 2014-6-16 16:58
目测,很占内存~~特别是群殴,这个锁定是一一对应,还是群体对应??

数列对内存占用其实还好,我设想中,一一对应最好,这样大概数千组数列的样子(六周星阵)。关键是运算量。。。。

使用道具 举报

帖子
119
精华
0
积分
60
金钱
945
荣誉
0
人气
3
评议
0
7#
发表于 2014-6-16 17:47:18 |只看该作者
本帖最后由 l0101270 于 2014-6-16 18:03 编辑
falsitanvitt 发表于 2014-6-16 10:42
相对于目前的方案 LZ这个才是“伪”随机
虽然不少玩家都觉得现在的概率有问题 但我还是相信既然 ...

我首先声明一件事情,因为玩家心理预期的原因,真实随机在游戏中是不能使用的。必须要让所有可能结果,在玩家心理能承受的回合内发生。

我举个简单例子,dota(魔兽引擎时代)里剑圣致命一击暴击率36%,但实际玩的时候你会发现,红字一串一串的,不会出现很久不出暴击的情况。同理还有幻刺那个15%的暴击率。为什么呢?因为它的算法里,第一刀不出暴击,下一刀暴击率会人为加大。(这也衍生出幻刺团战前打野拼暴击的玩法)。如果你随便扔个随机函数不管,剑圣连续不出暴击的玩家早就要骂翻天了。

你不妨想想,为什么暴雪要在魔兽引擎里这么做?而不是随随便便扔个rand()函数?

至于取样算概率的问题,我几个月之前发过贴子声明过结果,是小昭对杨逍的单挑流程。具体计算过程我得找一下,毕竟太久了,当时也是随手算的。事实上,我完全建议你也自己算算,省得别人的结果不可靠,对吧?取样又不麻烦。
-------------------------------------------------------------------------
在这里,我的思想与PRD(Pseudo Random Distribution)机制不同。为什么呢?用PRD机制的话,就意味着开局的判定几率会小的可怜(譬如李秋水开局机会不出称号)。这样大家可以开局战斗会非常舒心的搞掉某些重要人物。

所以倒不如把随机事件压缩在一个玩家可接受的回合范围内发生。

使用道具 举报

帖子
6186
精华
3
积分
3752
金钱
8899
荣誉
2
人气
390
评议
0
6#
发表于 2014-6-16 16:58:35 来自手机 |只看该作者
目测,很占内存~~特别是群殴,这个锁定是一一对应,还是群体对应??

使用道具 举报

卧龙岗散淡的人

帖子
6244
精华
8
积分
4795
金钱
15113
荣誉
3
人气
427
评议
0
5#
发表于 2014-6-16 16:51:01 |只看该作者
技术流,学习。
鬼谋神算,好似诸葛之亮;决胜千里,犹胜关云之长。

使用道具 举报

帖子
236
精华
0
积分
119
金钱
2549
荣誉
0
人气
6
评议
0
地板
发表于 2014-6-16 10:42:27 |只看该作者
相对于目前的方案 LZ这个才是“伪”随机
虽然不少玩家都觉得现在的概率有问题 但我还是相信既然是程序大概就不会有问题{:13_431:}
LZ既然进行了300取样 可否给出具体的过程和结果以及置信概率?{:13_431:}

使用道具 举报

剑仙 冰魂

白金会员勋章活跃勋章荣誉勋章特色头衔勋章动漫组资深组员勋章

帖子
62733
精华
0
积分
34765
金钱
191395
荣誉
318
人气
2185
评议
0

板凳
发表于 2014-6-16 08:41:04 来自手机 |只看该作者
不明觉厉

使用道具 举报

帖子
809
精华
0
积分
424
金钱
3441
荣誉
1
人气
82
评议
0
沙发
发表于 2014-6-16 02:29:38 |只看该作者
不明觉厉,貌似福利{:13_461:}

使用道具 举报

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

手机版|Archiver|游侠NETSHOW论坛 ( 苏ICP备2023007791号 )

GMT+8, 2025-8-2 02:58 , Processed in 0.328145 second(s), 13 queries , Gzip On, Memcache On.

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

分享到