导航:首页 > 源码编译 > 手游的随机算法一般是什么

手游的随机算法一般是什么

发布时间:2023-01-11 20:29:19

1. 随机化算法 随机数的概念是什么

顾名思义.随机数就是随机生成的一个数字.不是人为生成的.这个随机数在产生之前.是不为人知的.
随机化算法是这样一种算法,在算法中使用了随机函数,且随机函数的返回值直接或者间接的影响了算法的执行流程或执行结果。随机化算法基于随机方法,依赖于概率大小。

2. 随机游走算法是什么

这个……设置一个1到4的随机数(假定游走的空间是二维的),如果随机数结果为1,就向上走一个单位,如果为2,向左走一个单位,如果为3,向下走一个单位,如果为4,向右走一个单位,每走一个单位,重复一遍上面的过程。

3. 炉石传说抽牌概率真的是随机吗

答案是肯定的,确实是随机。

4. 随机数算法是什么

在计算机中并没有一个真正的随机数发生器,但是可以做到使产生的数字重复率很低,这样看起来好象是真正的随机数,实现这一功能的程序叫伪随机数发生器。有关如何产生随机数的理论有许多如果要详细地讨论,需要厚厚的一本书的篇幅。不管用什么方法实现随机数发生器,都必须给它提供一个名为“种子”的初始值。而且这个值最好是随机的,或者至少这个值是伪随机的。“种子”的值通常是用快速计数寄存器或移位寄存器来生成的。下面讲一讲在C语言里所提供的随机数发生器的用法。现在的C编译器都提供了一个基于ANSI标准的伪随机数发生器函数,用来生成随机数。它们就是rand()和srand()函数。这二个函数的工作过程如下:”)首先给srand()提供一个种子,它是一个unsignedint类型,其取值范围从0~65535;2)然后调用rand(),它会根据提供给srand()的种子值返回一个随机数(在0到32767之间)3)根据需要多次调用rand(),从而不间断地得到新的随机数;4)无论什么时候,都可以给srand()提供一个新的种子,从而进一步“随机化”rand()的输出结果。这个过程看起来很简单,问题是如果你每次调用srand()时都提供相同的种子值,那么,你将会得到相同的随机数序列,这时看到的现象是没有随机数,而每一次的数都是一样的了。例如,在以17为种子值调用srand()之后,在首次调用rand()时,得到随机数94。在第二次和第三次调用rand()时将分别得到26602和30017,这些数看上去是很随机的(尽管这只是一个很小的数据点集合),但是,在你再次以17为种子值调用srand()后,在对于rand()的前三次调用中,所得的返回值仍然是在对94,26602,30017,并且此后得到的返回值仍然是在对rand()的第一批调用中所得到的其余的返回值。因此只有再次给srand()提供一个随机的种子值,才能再次得到一个随机数。下面的例子用一种简单而有效的方法来产生一个相当随机的“种子”值----当天的时间值:g#椋睿悖欤酰洌澹Γ欤簦唬螅簦洌椋铮瑁Γ纾簦弧。#椋睿悖欤酰洌澹Γ欤簦唬螅簦洌欤椋猓瑁Γ纾簦弧。#椋睿悖欤酰洌澹Γ欤簦唬螅螅Γ#矗罚唬簦穑澹螅瑁Γ纾簦弧。#椋睿悖欤酰洌澹Γ欤簦唬螅螅Γ#矗罚唬簦椋恚澹猓瑁Γ纾簦弧。觯铮椋洹。恚幔椋睿ǎ觯铮椋洌。。椋睿簟。椋弧。酰睿螅椋纾睿澹洹。椋睿簟。螅澹澹洌郑幔欤弧。螅簦颍酰悖簟。簦椋恚澹狻。簦椋恚澹拢酰妫弧。妫簦椋恚澹ǎΓ幔恚穑唬簦椋恚澹拢酰妫弧。螅澹澹洌郑幔欤剑ǎǎǎǎ酰睿螅椋纾睿澹洹。椋睿簦簦椋恚澹拢酰妫簦椋恚澹Γ幔恚穑唬埃疲疲疲疲。ǎ酰睿螅椋纾睿澹洹。椋睿簦簦椋恚澹拢酰妫恚椋欤欤椋簦恚蕖。ǎ酰睿螅椋纾睿澹洹。椋睿簦簦椋恚澹拢酰妫恚椋欤欤椋簦恚弧。螅颍幔睿洌ǎǎ酰睿螅椋纾睿澹洹。椋睿簦螅澹澹洌郑幔欤弧。妫铮颍ǎ椋剑埃唬椋Γ欤簦唬保埃唬椋。穑颍椋睿簦妫ǎΓ瘢酰铮簦唬ィ叮洌Γ#梗玻唬睿Γ瘢酰铮簦籦egjrand());}上面的程序先是调用_ftime()来检查当前时间yc并把它的值存入结构成员timeBuf.time中wae当前时间的值从1970年1月1日开始以秒计算aeh在调用了_ftime()之后在结构timeBuf的成员millitm中还存入了当前那一秒已经度过的毫秒数,但在DOS中这个数字实际上是以百分之一秒来计算的。然后,把毫秒数和秒数相加,再和毫秒数进行异或运算。当然也可以对这两个结构成员进行更多的计算,以控制se......余下全文>>

5. 什么是“随机”教你分清“伪随机”和“真随机”

​很久以前流传着这样一则笑话:一个身患重病的人决定去动手术。在手术之前,他问医生:“这起手术的成功率是多少?”医生回答他:“只有1%。”他很惊慌,但是医生说:“没事的,在你之前我已经治死过99个人了。”

这是一则嘲笑那些不懂“概率”的人的笑话,却讲出了“真随机”和“伪随机”之间的区别。

在四月末的时候,我曾写过一篇 《你打 游戏 靠的是技术,还是运气?》 ,其中就提及了“伪随机”这个概念。当时受限于篇幅,没有详细展开解释“伪随机”的概念。前不久,在因国际邀请赛而备受关注的Dota2在最近一次的更新中,有这么一条更新内容: “落空的负面效果和下坡攻击的落空效果现在都采用伪随机触发”

那么到底什么是 “伪随机” 呢?以及和“伪随机”对应的 “真随机” 又是什么概念?

赝随机数算法(Pseudo-Random Number Generator,简称PRNG) 是计算机的一个术语——当然,它也可以被叫做“伪随机数算法”,只是为了方便与 游戏 中的“伪随机数”进行区分,本文中统一称作“赝随机数算法”。

众所周知,计算机程序是由无数“0”和“1”两种状态构成的,如果一个状态不是“0”,那就必定是“1”,颇有种非黑即白的味道。

因此,在计算机程序中,不存在“不确定”的数字,只有确定的“1”和“0”。基于这种特性,计算机无法生成“真正的(不确定的)随机数”。

那么在计算机中,需要生成或是使用到随机数的时候怎么办呢? 通常是利用计算机抓取一些数值,然后将这些数值输入至一个复杂算法 (常用的算法是同余法和梅森旋转算法,有兴趣的读者可以自行查询,这里就不展开讲了) 当中,通过一系列运算得出一个数字,这就是平常说的赝随机数了。

只要最初输入的数值(初值)不变,那么输出的值都会是同一个值,这就证明了这个数并不随机,只是看起来随机而已。

换句话说,只要这个随机数是由确定算法生成的,那就是赝随机数。

所以下一次在和朋友聊天时提到真随机数、伪随机数时,如果有人插嘴:“计算机只能生成伪随机数,所以根本没有什么真随机”,那你就可以霸气侧漏地说他是 “云玩家” 了。

我们通常说的 真随机 又名 “纯随机”(True Random Distribution) ,就是我们平常一直说的那种、一般意义上的“随机”。

在真随机中, 每一个事件都是相互独立、服从真随机分布的,不受其他事件的发生而改变 。比方说某款 游戏 为了吸引用户,拥有这么一个随机抽卡系统:每次抽卡时,都有1%的几率抽出SSR卡片,这个概率服从真随机分布。

回到我们最开始说的那个“治死99个”的笑话:我们一眼就能看出这个笑话的不合理性。但在抽卡 游戏 中,我们的大脑瞬间失去理智。有相当一部分玩家认为: 我连抽100次,总能抽到这张卡吧!

实际上,连抽100次却抽不出1%的SSR卡的几率是为(1-0.01)^100=36.6%,甚至还稍稍超过了1/3。将连抽数字上升至300,也仍有4.9%的几率。

换句话说,假设有10000个玩家连抽100次,就有约3660个玩家抽不出这张SSR;10000个玩家连抽300次,也仍有约490个玩家抽不出这张SSR ——这对玩家的 游戏 体验来说可以说是毁灭性的打击。

尽管纯随机在数学上是无罪的,在代码中更是明明白白、清清楚楚,但玩家抽不出卡可不会回想到初高中的数学课本, 而是首先怀疑几率是否被策划运营篡改、这背后又是否有肮脏的PY交易……

当然不仅仅是在抽卡系统当中如此。在一些竞技性比较强的 游戏 中(比如War3、Dota2之中——英雄联盟几乎完全摘除了随机系统,不在此列),连续数次的“走运”极大影响 游戏 的竞技性和观赏性。

比方说Dota中最着名的概率英雄虚空假面的技能“回到过去”: 使虚空假面有25%几率完全躲避一次伤害。 受限于War3引擎,这个技能采用的是真随机概率,在某个极端情况下(通常见于精彩集锦中),虚空假面能够保持很低的血量承受多次伤害却不死、最终反杀对手。这种带给敌方极差 游戏 体验的系统,因此也进入了计师们“整治范围”之中。

为了避免极差的 游戏 体验带来的玩家数量流失,设计者们提出了“伪随机”的概念: 在不确定性的随机事件当中,通过一系列算法使随机事件均匀分布在多次事件当中,尽可能减少或消除极端情况的发生,以提高玩家的 游戏 体验。

在设计师们的努力下,“伪随机”应运而生,这里的伪随机就和上文的赝随机数算法(PRNG)意义不同了。

制造“伪随机”的方法有很多,在War3、Dota2这类 游戏 当中普遍使用的是 “伪随机分布”(Pseudo Random Distribution,简称PRD) 处理概率。

就拿Dota2中最强大的暴击技能“恩赐解脱”来举例: 幻影刺客有15%的几率造成200%/325%/450%致命一击伤害 。在PRD机制下,幻影刺客的攻击实际上 并不是 每一刀都有15%的暴击率。

根据PRD机制的公式P(N)=N*C可得出15%几率的C值为3.22%,即幻影刺客的第一次攻击暴击概率为3.22%;如果第一刀没有暴击,则第二刀的暴击率提升至2倍,即6.44%;如果仍旧没有暴击,则提升至3倍的9.66%,以此类推。

如果继续推算,可得在第32刀时暴击几率会达到100%,最可能触发暴击的次数是第6刀,平均触发刀数是6.67刀等等……

同样,在连续触发暴击时,下一刀的暴击几率会减少。RPD机制使竞技 游戏 中连续触发或不触发技能的几率降低,避免了运气成分过度干扰战斗结果,大幅提升了玩家的 游戏 体验,但不影响这些随机事件的正反馈:TI6决赛的“打我五下晕三下”,可是令全球人民集体沸腾了呢!

除了伪随机分布RPD之外,还有两种常见的伪随机: 洗牌算法 组合随机

洗牌算法 最常见的用法,是在各大音乐播放器中的“随机播放”之中。在随机播放时,如果采用真随机,会导致一首歌无论如何都播放不出,或是同一首歌连续播放数次(有兴趣的读者可以计算一下这些概率)。为了解决这个问题,播放器采用的解决方案即是洗牌算法:将一个包含所有歌曲的数组像洗牌一样打乱,然后依次播放这个乱序数组。

至于 组合随机 ,这是一种广泛应用于各个 游戏 的做法:在抽奖的时候进行两次、或是更多次的判断,一次不随机,而剩下的判断则是真随机。比如说,你会在第X次抽卡时抽到SSR是确定的,但抽中的SSR具体是哪张卡,则是随机的——这就是广大手游中的“低保”系统了。

在一堆数据之中想要分清“真随机”和“伪随机”似乎并不是那么容易。那么接下来为大家介绍两个例子,有助于更好理解什么是“真随机”和“伪随机”:

真随机 :有一天,小明在的班级上举办了一次抽奖活动。这个班级有40个学生,所以为了公平起见,保证每个学生都有1/40的几率中奖,老师准备了40个相同的纸盒,每个纸盒中都有40张纸条,有1张纸条是中奖纸条。这样一来,每个学生都有1/40的几率中奖,但每个学生是否中奖并不受其他学生的影响。在极端情况下,这个班上可能40个学生都能中奖。这就是真随机。

伪随机 :小明班上举办了抽奖活动。为了公平起见,老师准备了1个纸盒,纸盒中有40张纸条,只有1张纸条是中奖纸条。这样一来,每个学生都有1/40的几率中奖——但是显而易见,这个班上有且仅有一名学生能够中奖。一名学生在中奖后,余下的所有学生中奖几率都会减少至0。这就是伪随机。

6. 求随机数常用算法

一般随机数都不是完全随机的,你在一个程序里两次调用系统的随机函数,你会发现是一样的!
给你个思路,用系统函数得到当前进程的开始时间,然后处理这个时间,算法想怎么写就怎么写,因为每次程序运行时间的不一样的,所以得到的随机数就“随机”了,很多随机函数都是这么做的!

7. 网络游戏里面的虚拟装备强化是按照一定概率成功的吗

随机的是直接调用引擎的随机函数来实现的,一般这种情况,所有的玄学都是无效的。但是也有例外情况,曾经在我们游戏里出现了一个怪现象,也是强化系统里的,就是在某种情况下,会出现连续成功的情况,而且可以重现。这个现象很诡异,也不好解释,只能说可能是引擎的随机算法可能存在问题。不过这种是极为少见的情况,可以忽略不计。

8. 随机数算法是什么

在计算机中并没有一个真正的随机数发生器,但是可以做到使产生的数字重复率很低,这样看起来好象是真正的随机数,实现这一功能的程序叫伪随机数发生器。有关如何产生随机数的理论有许多如果要详细地讨论,需要厚厚的一本书的篇幅。不管用什么方法实现随机数发生器,都必须给它提供一个名为“种子”的初始值。而且这个值最好是随机的,或者至少这个值是伪随机的。“种子”的值通常是用快速计数寄存器或移位寄存器来生成的。下面讲一讲在C语言里所提供的随机数发生器的用法。现在的C编译器都提供了一个基于ANSI标准的伪随机数发生器函数,用来生成随机数。它们就是rand()和srand()函数。这二个函数的工作过程如下:”)首先给srand()提供一个种子,它是一个unsignedint类型,其取值范围从0~65535;2)然后调用rand(),它会根据提供给srand()的种子值返回一个随机数(在0到32767之间)3)根据需要多次调用rand(),从而不间断地得到新的随机数;4)无论什么时候,都可以给srand()提供一个新的种子,从而进一步“随机化”rand()的输出结果。这个过程看起来很简单,问题是如果你每次调用srand()时都提供相同的种子值,那么,你将会得到相同的随机数序列,这时看到的现象是没有随机数,而每一次的数都是一样的了。例如,在以17为种子值调用srand()之后,在首次调用rand()时,得到随机数94。在第二次和第三次调用rand()时将分别得到26602和30017,这些数看上去是很随机的(尽管这只是一个很小的数据点集合),但是,在你再次以17为种子值调用srand()后,在对于rand()的前三次调用中,所得的返回值仍然是在对94,26602,30017,并且此后得到的返回值仍然是在对rand()的第一批调用中所得到的其余的返回值。因此只有再次给srand()提供一个随机的种子值,才能再次得到一个随机数。下面的例子用一种简单而有效的方法来产生一个相当随机的“种子”值----当天的时间值:g#椋睿悖欤酰洌澹Γ欤簦唬螅簦洌椋铮瑁Γ纾簦弧。#椋睿悖欤酰洌澹Γ欤簦唬螅簦洌欤椋猓瑁Γ纾簦弧。#椋睿悖欤酰洌澹Γ欤簦唬螅螅Γ#矗罚唬簦穑澹螅瑁Γ纾簦弧。#椋睿悖欤酰洌澹Γ欤簦唬螅螅Γ#矗罚唬簦椋恚澹猓瑁Γ纾簦弧。觯铮椋洹。恚幔椋睿ǎ觯铮椋洌。。椋睿簟。椋弧。酰睿螅椋纾睿澹洹。椋睿簟。螅澹澹洌郑幔欤弧。螅簦颍酰悖簟。簦椋恚澹狻。簦椋恚澹拢酰妫弧。妫簦椋恚澹ǎΓ幔恚穑唬簦椋恚澹拢酰妫弧。螅澹澹洌郑幔欤剑ǎǎǎǎ酰睿螅椋纾睿澹洹。椋睿簦簦椋恚澹拢酰妫簦椋恚澹Γ幔恚穑唬埃疲疲疲疲。ǎ酰睿螅椋纾睿澹洹。椋睿簦簦椋恚澹拢酰妫恚椋欤欤椋簦恚蕖。ǎ酰睿螅椋纾睿澹洹。椋睿簦簦椋恚澹拢酰妫恚椋欤欤椋簦恚弧。螅颍幔睿洌ǎǎ酰睿螅椋纾睿澹洹。椋睿簦螅澹澹洌郑幔欤弧。妫铮颍ǎ椋剑埃唬椋Γ欤簦唬保埃唬椋。穑颍椋睿簦妫ǎΓ瘢酰铮簦唬ィ叮洌Γ#梗玻唬睿Γ瘢酰铮簦籦egjrand());}上面的程序先是调用_ftime()来检查当前时间yc并把它的值存入结构成员timeBuf.time中wae当前时间的值从1970年1月1日开始以秒计算aeh在调用了_ftime()之后在结构timeBuf的成员millitm中还存入了当前那一秒已经度过的毫秒数,但在DOS中这个数字实际上是以百分之一秒来计算的。然后,把毫秒数和秒数相加,再和毫秒数进行异或运算。当然也可以对这两个结构成员进行更多的计算,以控制se......余下全文>>

9. 有哪些随机数算法呢

1、数值概率算法:用于数值问题的求解。所得到的解几乎都是近似解,近似解的精度
随着计算时间的增加而不断地提高。
2、拉斯维加斯算法(LasVegas):要么给出问题的正确答案,要么得不到答案。反复求解多次,可
使失效的概率任意小。
3、蒙特卡罗算法(MonteCarlo):总能得到问题的答案,偶然产生不正确的答案。重复运行,每一次
都进行随机选择,可使不正确答案的概率变得任意小。
4、舍伍德算法(Sherwood):很多具有很好的平均运行时间的确定性算法,在最坏的情况下性能很
坏。引入随机性加以改造,可以消除或减少一般情况和最坏情况的差别。

10. 神武手游怎么计算宠物打书掉啥技能概率

对于一些带有顽固垃圾技能的宠物,不要急着直接顶高书,先把你顶格子的垃圾书换成有用的。这是防止你最后剩下一个顽固的垃圾技能掉不了。比如有人打带鬼魂术的罗刹女,十多本高书了,那个鬼魂岿然不动。铺了底子,也许最后宠物没完美,但至少不垃圾。每个技能都有用。

铺底子有原则的:不要和你要打的高书冲突。比如你打算打高法爆,就别用低法暴铺底。铺底技能多了,什么低幸运,法波,恐怖,凝气,冰霜等等。都不错。
领悟与顶格子
对于许多玩家洗出的满成长,资质暴高,但是技能少的可怜的情况,相信大家也是司空见惯,现在挽歌就为大家讲解下如何顶技能格子。首先先别急着打书上护符,练级练上去,少技能的宝宝领悟的概率是很大的,经常会有1技能或者没技能的领悟到4技能满。练到了四五十级如果还没有领悟(脸太黑- -|||),那就只能顶书硬加技能格。顶书需要注意的只有一点,因为打书只是有一定几率会增加格数,所以先用最垃圾的书不断的砸,直到顶出新技能格位置再开始考虑打好书。

值得一提的是如果宠物缺少的是你想要的技能,如龙女的剑气、狐狸的善恶,那么就前把前面的2个技能先打掉换成有用的,领悟后就可以直接用的。
保留特殊技能
上面说的内容是针对该宠物没有特别想要保留下的技能,下面就说说几只特别宠物的技能打法:九尾灵狐(善恶有报),罗刹女(禁锢诅咒),浣熊大师(上善若水)。由于这3个技能是宠物自带的特殊技能,是没有魔兽要诀可以买的,打掉了就是没了,对于一些想要这些技能的玩家来说打书则需要慎重,下面就分别讲解3只的相应打法:
1、九尾灵狐:一般出4技能爆资质又高成长的概率太低,大多都是3技能,塞书一般只考虑高必杀、高吸血、高夜战3本。挽歌个人建议只上1本或2本,善恶掉的几率实在太大,塞高夜战和高必杀,如果没那么想毛线就直接打一本高必杀就好,护符再搭配夜战或吸血,恶报加必杀,秒人稳稳的。万一真的一本掉善恶,那就将就着塞高夜、高必、高恐怖(高冲击)带剑气护符吧。

2、罗刹女:罗刹出4技能的概率还是挺高的,但是有鬼混这个相当顽固的技能,和高夜战这个法宠无用的技能,打书也不好打。挽歌建议先从高级冰霜、高级凝气、高级毒等辅助技能中选一两本打上去,运气好能掉鬼魂,不掉也只能再砸。最后只要留下的是有用技能,基本上就可以不用贪心再敲书了。运气不好打掉的禁锢诅咒,那就可以放心的拿低级垃圾书狂塞,把鬼魂塞掉后再慢慢替换有用的辅助书,最后上高法连、高法爆、高灵性、高恐怖、任意大法,护符也可以计算在内搭配。

3、浣熊大师:上善若水是伤害加成非常高的一个技能,但需要敌人攻击才会触发效果,次数越多效果越明显。那么问题来了,首先你的宠物速度要慢,只有在你出手前打才会在本回合触发效果,下回合消失;其次你的宠物要经打,所以打书也需要做另外选择。3技能如果想要上善若水和大法不太建议打书,太容易掉;4技能可以高保命(高神佑)、高法爆、高灵性任选1到2本,运气不好掉了也可以打成高法连、高法爆、高灵性、高神佑(高保命)、大法,输出也是很可观的。

先便宜后贵,先次要后主要
这个不需要解释了吧,你最想留下的最后上。可选的技能先上。比如反制宠,一定是先上高灵敏高夜,最后上高反高吸。这个是按照次要主要顺序来的。比如隐身宠,那高隐高偷最后上,其他的先上。再比如法宠,先上高法连,高法爆,高灵性,高恐怖等,最后上大法。

不要连续打
也就是每个一段时间去打。有人说连续打很可能顶掉你刚上的书。这个是什么呢,方法是对的,解释是错的。计算机里的随机,都是基于结果随机,而实现过程其实是伪随机。比如我们经常看到挖宝或者副本奖励的传闻一刷一排,又经常发现神佑保命要么连续神连续保,要么就不神不保。恐怖恐吓也是要么连续出,要么死活不出。

封系要么神封百封百中,要么虽然有修有技能连续水,气的都想摔键盘~这其实都是伪随机算法造成的现象。当然了,你追求真正的随机,也就放弃了传说中的超强人品。你可能这样做减少了由于伪随机算法导致的一本顶一本的问题出现的可能性,但你也放弃了较小概率出现的一次成功的可能。
心态:适可而止,量力而行
不要意气用事,不要赌气,不要有赌徒心理。打书完美了,那是运气好。完美不了,也不要去强求。只要铺了底子,没垃圾技能。总归还是很实用的。有时候也行要求放低一点点,收获很心情都会好很多。
神武 http://www.87g.com/youxi/300.html

阅读全文

与手游的随机算法一般是什么相关的资料

热点内容
代码编译后叫什么 浏览:969
电脑文件夹做了保护怎么删除 浏览:678
php数据库连接全局 浏览:528
葫芦岛有程序员吗 浏览:986
小胖机器人显示无命令 浏览:775
一日一画pdf 浏览:97
编程猫拔萝卜文字评价模板 浏览:252
cmdjava命令 浏览:237
扫描版pdf转文字版 浏览:534
单片机专用寄存器 浏览:499
学习python的手册 浏览:676
vue编译成js文件 浏览:90
给单片机供电的电池 浏览:341
什么app是分享教育的 浏览:899
可视化编程java 浏览:83
人工智能温控器算法 浏览:377
大号文件夹多少钱一个 浏览:573
pdf阅读器打开文件 浏览:99
winrar解压日文文件 浏览:39
什么app可以看广东珠江电视台 浏览:76