Selphie的Slot的规律(不算规律的规律)(五次更新)

2004-09-16 18:59 | bsp

第五次更新: 给出Selphie的某一等级和危险度下所有魔法的组合
第四次更新: 给出Selphie的各种等级和危险度下The End的出现几率
第三次更新: 加入魔法的部分规律性解释和The End的出现几率的分析
第二次更新: 给出周期为64次的结论证实
第一次更新: 加入魔法选取过程中用到的随机数的分析

忙了几天,也就这点成绩.贴出来吧,大家看一下.

影响Slot的因素:
1.Selphie的等级
2.Selphie的危险度
3.你的RP ^_^

与Slot无关的因素:
1.Selphie的Luck
2.Selphie的HP
3.队员的Luck和危险度(但是队员的状态会影响Selphie的危险度,比如KO)

其中:
1.危险度分5个等级,00-04,00不会发动Limit,01-04危险等级依次升高,越高Limit越好,这个对所有队员都适用
2.危险度在Selphie进行Slot时不会改变(即使队员被KO了),每次换人时危险度重新计算
3.Selphie的危险度越高越容易出现好东东
4.Selphie的Lv越高越容易出现好东东 <---真是模糊呀

魔法的顺序没有公式,对,没有.每个魔法都是按照下面的步骤算出来的,因此我只能解释这个过程.

详细步骤的图解:


首先是最后一步输出魔法的魔法表,里面记录了她的Slot里可能输出的所有魔法:

Magic01234567
0FireBlizzardThunderCureFireBlizzardThunderFull-cure
1FiraBlizzaraThundaraCuraCuraBlizzaraThundaraFull-cure
2FiragaBlizzagaThundagaCuragaFiragaBlizzagaThundagaWall
3WaterAeroBioFull-cureFiragaBlizzagaThundagaRapture
4WaterAerobioDemiHolyFlareQuakeRapture
5BioDemiHolyFlareMeteorQuakeTornadoRapture
6DemiHolyFlareMeteorQuakeTornadoUltimaRapture
7HolyFlareMeteorQuakeTornadoUltimaRaptureTornado
8MeteorHolyUltimaUltimaUltimaUltimaUltimaUltima
9BlindSleepSilenceEsunaBlindSleepSilenceFull-cure
AProtectAuraHasteDrainBlindSleepSilenceFull-cure
BBreakFloatRegenProtectAuraHasteDrainWall
CDispelShellDoubleSlowBreakConfuseCuragaWall
DDeathPainStopDispelShellDoubleSlowRapture
EBerserkDeathPainZombieMeltdownCuragaReflectTriple
FHolyMeteorUltimaUltimaMeteorUltimaUltimaThe End


说明:
1.颜色用来区分魔法的数量,蓝色表示1,红色表示2,绿色表示3
2.这个数表示当前魔法的最大可能释放数值,实际释放次数是1到这个数之间的一个数,计算方法random3%max+1

魔法表输出的魔法由行数和列数决定.其中列数是随机的,选中任一列的概率相等,计算方法random2%8.至于行数则由图中的行表决定:

Row01234567891011121314151617
0000000000000000000000101000000000001
10000000000010102020203040909090A0A0B
20909090A0A0B0B0C0C0D0D0E000001010102
30000010101020304050607080001020F0304
40001020F030405060708080F010204020702


说明:
表中标了红色的是能查到魔法表的第F行的3个位置,要想用The End,就必须使行表输出0F

行表输出的数值也由它所在的行数和列数决定.其中行数是按一定概率选取的,选中各行的概率是:
RowRandom NumberPossibility
000 - 2639 / 256
127 - 9E120 / 256
29F - D050 / 256
3D1 - F840 / 256
4F9 - FF7 / 256


列数则由公式计算:
column = sLevel / 10 + dDegree + random % 5 - 1
其中:
1.sLevel是Selphie的Lv, sLevel/10的范围是0-10
2.dDegree是她的当前的危险度,范围是1-4
3.random是一个随机数,random%5表示除以5的余数,范围是0-4
4.column的范围是0-17

嗯,所有的步骤都在这里了,大家帮忙分析一下吧,我会陆续把魔法的概率放上来.

更新:
关于魔法选取过程中用到的随机数

随机数的属性:
这里的随机数不同于我在关于chocobo world的那篇帖子里提到的线性同余式,而是采用了循环查表的方法,即程序事先在内存中放一张环形表,用一个指针指向某一个数,使用时把指针指向的数选出来,然后指针滑向下一个位置,准备下一次输出,至于指针的位置由每次进入战斗时随机确定(这里用到的倒是线性同余式了).整个表有256个数,如下(16进制):

6306F023F8E5A801C1AE7F487BB1DC09
226D7DEE9D58D55524397ADF8E546C1B
C00BD043D89A475D2102174BDB11AF70
CD4D344972912D62975945F76E46AA0A
A3C8319238FAD4E6CBF3DE6BBBF11C3C
D6ADB2A9DD5742950C79251FBCE7AC5B
832876F218DA87A1616FBE5A5E51EFB0
C9157489BDD1A275D799854C4FD2BF4A
200856A0503A67264133B7BAFB30CF7C
842C32E91D168278A480655F0E27B919
C3A7B6003BFC88E1C693FE8BD9B81369
2F641237FD77E2B504E01A8C8FB4CCF9
60EB29E390A5683D81733FAB7EB30FCE
C43594968671D32AE49F9CEC4E14F5EA
40A6F60398C507F42BC23EE89B36532E
8D0D5210661EED8A449E05FF5CC76ACA


举例来说,某一次输出了最后一行倒数的FF,那么接下来几次将会是5C, C7, 6A, CA, 63(指针滑向表的最开头,表是环状的), 06等等.

随机数的使用范围:
1.很广,不光是Selphie的Slot,敌我双方的几乎每次行动都会用到(没有全部测试,至少物理和魔法攻击是有的,甚至连小Tonberry移动一步也会用到一次-_-bbb).
2.不同的行动方式使用的次数不同.Selphie的Slot选一个魔法要用4次,小Tonberry移动一次要用1次.这个没有仔细测试,因此不排除有不同的行动方式有着相同的使用次数的可能.
3.大家共用这一张表和指针,轮到谁谁动几下,这样在一定程度上减小了随机数重复出现的可能性,但是也打乱了Slot的表面规律.

魔法选取的整个过程共4次用到了随机数:
1.查行表的列数时的公式里用了一次,目的是按相同的概率选一个0-4之间的数
2.查行表的行数时用了一次,目的是按不同的概率选择一行
3.查魔法表的列数时用了一次,目的是按相同的概率选择一列
4.输出魔法时用了一次,目的是按相同的概率选一个1-当前输出魔法最大释放次数之间的数
因此可以说当选取过程中第一次用到随机数时,这一次的魔法和释放次数已经唯一确定了.

举例:
当前Selphie等级为8,危险度为3,某次选取第一次随机数输出(16进制)69,那么按上面的概率表可知接下来的3次依次是2F, 64, 12.
计算过程:
1.公式column = sLevel / 10 + dDegree + random % 5 - 1 = 8/10 + 3 + 0x69%5 - 1 = 2,表示行表的第2列
2.第二个随机数2F查概率表为1,表示行表的第1行
3.查行表第1行第2列得到00,表示魔法表的第00行
4.第三个随机数0x64%8 = 4,表示魔法表的第4列
5.查魔法表第00行第4列:魔法为Fire,最大可能释放次数为3
6.第四个随机数0x12%3 + 1 = 1.
结果就是Fire 1 Times.

观察上面的随机数表不难发现,既然总数只有256个,那么这种方式输出的数字就必然每256次一个循环,第1次和第257次输出的必然是同一个数.再看魔法的选取过程,每次使用4个随机数,如果中间没有其它行动的话,下一个魔法将使用接下来的4个随机数.那么可以得出结论:在没有干扰的情况下,Slot的魔法将在256/4=64次后开始重复,包括魔法种类和释放次数.
但是干扰几乎是必然的,敌我双方的几乎任何行动都会使用随机数,也就是会打乱上面说的64次的周期,抛开己方队员不说(让他们老老实实呆着就是了),敌人隔一会来一下就够了,况且不同的攻击方式使用随机数的次数还不一样,鬼才知道它们什么时候会出什么招.

二次更新
1.危险度的计算也会用到随机数一次,因此换人的过程和队友的状态变化(比如被KO)也计算入上面所说的干扰行动之内.
2.在UFO处的测试证明了64次一个周期的正确性,只要不换人,魔法的出现种类和次数每64次一循环,具体的魔法我就不帖了,大家自己测试一下吧,想要UFO的存档的请留下邮箱我发给你.

三次更新:
Slot的魔法部分规律性解释
首先看Slot的两种情况:

无干扰:
●●●●●●●……●●●●●…… <--随机数环,256个
●: 表示4个随机数输出一个魔法和一个数量

有干扰:
●●★★●●●★●★★●●●●……●●●●★★●★★★●…… <--随机数环,256个
\__________________/
稳定区
●: 意思同上
★: 表示干扰,干扰使用的随机数不定,出现时机也不定
平稳区: 表示两次干扰之间的一段较长区域

无干扰的情况很罕见,UFO处我方队员无行动无换人无状态变化时就是一个例子.在这种情况下Slot的魔法及其数量完全不受干扰,表现出很强的规律,每64次一个循环.因此在这里每选取64次不出现The End的话,就可以考虑按换人键了(仅仅退出Slot再进入是没有作用的).

剩下的几乎都是有干扰了.干扰大致分以下几种类型:

干扰类型 减少干扰的对策
敌方行动 Stop(有效性待测,再说也是暂时的)
我方行动 让大家都好好呆着
我方换人 进入Slot后不再受此影响
引发危险度变化的事件 进入Slot后不再受此影响
使用随机数的其他情况 待测

由于干扰因素的出现时机和随机数的使用次数都不易确定,造成64次循环的周期被完全破坏(注意魔法的选取一次需要4个随机数,如果干扰也是一次需要4个或者4的倍数的话,那么规律还是存在的,但实际上干扰使用的随机数是不定的),虽然采取相应的对策可以减少干扰因素的发生(见上表),但除了个别战斗外无法完全避免(PS的开盖法是否有效待测).

注意有干扰时的平稳区,在干扰因素很少的情况下(比如只有一个敌人攻击),如果手快的话,两次干扰之间是可以选取很多次魔法的,从而使平稳区的长度加长,出现次数增多.由于在这段选取过程中没有干扰,因此还是有一定规律的.随机数只有区区256个,如果采样足够(足够多的选取试验次数),会发现这段区域里的魔法及其数量(往往魔法的种类受到重视,其实数量同样有规律)都有固定的序列,具体表现就是有几种序列在选取过程中经常出现.但规律仅存在于这一段中,它的长度与平稳区的长短息息相关.当干扰再次来临(一般的情况是敌人又一次进攻),短暂的规律立刻被打破.可以看到,减少干扰的作用是加长平稳区的长度,使得魔法及其数量的可预见性更大一些.

The End的出现几率的分析
根据魔法的选取步骤,只有在魔法表选第F行,第7列时才会出现The End,列数的机会是均等的,只考虑行.这要求行表的输出必须是0F,也就是行表中我标记了红色的位置,一共有3处.行表也受到它自己的行和列的约束,行是由等级和危险度和随机数垒起来的,列是按不等的几率选的.
观察3处标记,其对应的列数分别为3,11,15;输出11的最低等级是40级,输出15的最低等级是80级,而3的最高等级是39级.因此1-39级时The End的输出都是第3列,40-79级时都是第11列,80-100级时是第11或15列.再考虑行,第3,11列对应的行的几率是7/256,第15列则是40/256.综合分析的结果如下表:

等级 输出列 输出行 行几率 总体比较
1-39 3 4 7/256 几率低
40-79 11 4 7/256 几率低
80-100 11或15 4或3 7/256或40/256 几率高

在输出行表的列数的公式中,等级是固定的,随机数和危险度的起调节作用,范围是+0 至 +7.一般情况是危险度越高越好,但也不是绝对的.举个例子:在等级为38级时,要想选出The End必须输出第3列,这要求危险度最高为1,再高一点点就永远不可能选到The End(除非升级).

四次更新:
Selphie的各种等级和危险度下The End的出现几率:
Level\危险度01020304
01-090/2560/2560/2561/256
10-190/2560/2561/2560/256
20-290/2561/2560/2560/256
30-391/2560/2560/2560/256
40-490/2560/2560/2560/256
50-590/2560/2560/2560/256
60-690/2560/2560/2560/256
70-790/2560/2560/2560/256
80-890/2560/2560/2564/256
90-990/2560/2564/2560/256
1000/2564/2560/2561/256

由此可见:
1.对The End来说,危险度并不是越高越好,但是这并不影响其它魔法
2.表中的概率数据有可能偏小,但是为0的部分绝不会再大于0
3.注意Lv40-79时是无论如何也不可能选到The End的,无论危险度是多少,因此尽量避开这部分等级

五次更新:
之前的解释过于注重魔法的选取过程,现在换个角度思考:
魔法的输出,由随机数表中的连续4个随机数决定一次选取的魔法种类和释放次数,我们称这一次的种类和数量为一个魔法组合.既然随机数只有256个,那么当等级和危险度一定时,当前的Slot中可能的组合也就只有256种,这些组合的具体情况可以通过穷举随机数计算出来.我只举一个例子,其余的可以依次类推:
当前等级: 60-69级, 当前危险度: 2, 魔法组合情况:

Fira x 2, Flare x 1, Fire x 2, Flare x 1,
Holy x 2, Death x 2, Blizzara x 1, Curaga x 2,
Rapture x 1, Water x 1, Curaga x 1, Blizzaga x 1,
Shell x 1, Holy x 2, Thunder x 2, Blizzara x 3,
Flare x 1, Quake x 1, Flare x 1, Water x 1,
Blizzaga x 2, Ultima x 1, Firaga x 1, Blizzard x 1,
Thundaga x 2, Wall x 1, Ultima x 1, Firaga x 1,
Firaga x 1, Demi x 1, Fira x 2, Dispel x 2,
Fire x 2, Slow x 1, Water x 2, Flare x 2,
Wall x 1, Flare x 2, Blizzaga x 1, Thundara x 2,
Full-cure x 1, Cure x 2, Full-cure x 1, Aero x 2,
Full-cure x 1, Death x 2, Blizzaga x 3, Double x 2,
Firaga x 2, Blizzaga x 1, Thundaga x 2, Aero x 1,
Flare x 1, Thundaga x 2, Wall x 1, Aero x 1,
Blizzaga x 2, Rapture x 1, Ultima x 1, Thundaga x 3,
Thundaga x 1, Double x 2, Cure x 1, Dispel x 2,
Pain x 3, Thundaga x 1, Water x 2, Thundaga x 1,
Tornado x 1, Quake x 1, Meteor x 1, Slow x 1,
Rapture x 1, Quake x 2, Curaga x 1, Pain x 2,
Quake x 1, Fire x 2, Thundaga x 3, Flare x 1,
Pain x 2, Pain x 3, Double x 1, Ultima x 1,
Thundaga x 2, Blizzaga x 1, Firaga x 2, Blizzara x 2,
Blizzaga x 2, Full-cure x 1, Fire x 1, Wall x 1,
Tornado x 1, Slow x 3, Curaga x 1, Firaga x 1,
Thundaga x 3, Thundaga x 1, Holy x 3, Thunder x 2,
Ultima x 2, Aero x 2, Shell x 1, Wall x 1,
Thundaga x 1, Double x 2, Thundaga x 1, Blizzaga x 2,
Rapture x 1, Bio x 1, Death x 1, Confuse x 3,
Fire x 3, Blizzaga x 2, Blizzaga x 3, Pain x 1,
Ultima x 1, Curaga x 3, Wall x 1, Holy x 2,
Blizzaga x 2, Firaga x 2, Rapture x 1, Thundaga x 2,
Ultima x 1, Double x 3, Firaga x 1, Fira x 1,
Thunder x 2, Water x 3, Dispel x 2, Thundaga x 2,
Wall x 1, Thundaga x 3, Blizzara x 2, Full-cure x 1,
Wall x 1, Double x 3, Dispel x 1, Holy x 1,
Wall x 1, Shell x 1, Firaga x 3, Holy x 1,
Thundaga x 2, Aero x 3, Flare x 1, Thundara x 2,
Thundara x 1, Firaga x 1, Firaga x 3, Dispel x 3,
Flare x 2, Rapture x 1, Thundaga x 1, Full-cure x 1,
Aero x 2, Death x 1, Cure x 2, Wall x 1,
Curaga x 1, Death x 3, Cure x 1, Firaga x 2,
Holy x 1, Blizzaga x 1, Tornado x 1, Slow x 3,
Thundaga x 2, Ultima x 2, Aero x 2, Meteor x 2,
Dispel x 1, Blizzara x 2, Rapture x 1, Firaga x 1,
Thundaga x 2, Full-cure x 1, Blizzaga x 3, Rapture x 1,
Bio x 2, Ultima x 1, Break x 3, Fire x 1,
Ultima x 1, Cura x 3, Wall x 1, Firaga x 1,
Shell x 1, Shell x 1, Holy x 2, Demi x 3,
Demi x 3, Curaga x 1, Bio x 1, Blizzaga x 3,
Berserk x 2, Blizzaga x 1, Aero x 2, Curaga x 1,
Rapture x 1, Curaga x 1, Slow x 3, Curaga x 1,
Wall x 1, Thundara x 2, Break x 3, Confuse x 2,
Firaga x 1, Thundaga x 3, Thundaga x 3, Blizzaga x 2,
Demi x 1, Meteor x 1, Firaga x 1, Rapture x 1,
Shell x 3, Holy x 1, Tornado x 1, Firaga x 3,
Blizzara x 1, Bio x 2, Water x 2, Quake x 1,
Reflect x 1, Flare x 1, Fire x 2, Blizzaga x 2,
Rapture x 1, Fire x 2, Meteor x 1, Bio x 3,
Slow x 2, Water x 3, Meteor x 1, Thundaga x 3,
Curaga x 1, Quake x 1, Blizzaga x 2, Blizzaga x 2,
Thunder x 1, Water x 1, Thunder x 1, Thundaga x 1,
Blizzard x 1, Bio x 3, Firaga x 3, Thundaga x 3,
Blizzaga x 1, Full-cure x 1, Quake x 1, Wall x 1,
Stop x 2, Bio x 1, Slow x 1, Thundaga x 1,

也就是说当Selphie的等级为60-69级时,危险度为2时,可能的组合不会超出这256种(不计算重复则还要再少些).每一次的魔法选取就相当于从这256种之中选一种出来,显示在屏幕上,这样解释应该比较清楚了.

由于随机数一次用4个,那么无干扰(别忘了干扰会占用随机数)时应该是每隔4个组合选一个,比如第一次选了第5组,那么下一次选第9组,再下一次选第14组,为了方便起见,我把上面的表格按4个一行排列,这样无干扰时每次选的必然按同一列依次往下选,也就是共有4个序列.

有干扰就不是这样,要视干扰占用的随机数而定.比如你正在选取,突然敌人释放了一个魔法,占用了3个,那么这次就得跳过3个而不是4个,从一列跳到了另一列.原来的规律被打破,按照这一列的规律继续选取,直到再一次被干扰打断.两次干扰之间是不会换列的,在这之间的魔法序列会保持规律.这样就解释了一段魔法序列经常出现的问题.一个比较好的情况是干扰恰巧占用了4的倍数的随机数,那么就不会换列,而是按列往下跳过几个组合继续选,这样仍然能保持规律.

注意当下一次的组合超过256时会跳到开头,因为随机数表是环状的.比如当前是第254组,而下一组要跳过5组,那么就是第254+5-256=3组.

上面的表格我是编程实现的,很简单.你可以自己写,也可以留下邮箱,我把程序发给你.

-
Kweh!!Kweehhhh!!