曹操传吧 关注:84,723贴子:1,290,220
  • 1回复贴,共1

简单说说曹操传中的伪随机

取消只看楼主收藏回复

今天看到一个帖子:

该贴主能把两个机制完全不一样的mod放在一块来提问,说明很可能完全搞不懂或懒得去弄懂两者之间的区别。当然这里也有豪曹作者有意无意混淆概念的功劳,倒怪不了贴主。
首先我们必须明确一点,所有曹操传的mod都是使用了伪随机算法,除了豪曹14,完全摆脱了伪随机,仅仅是在每关开局调用了一下伪随机算法来重置全体武将集气(因为豪曹14攻击判断没有使用伪随机,所以该mod与主题无关,其实现机制以前有讨论过,这里不再赘述)。
这里需要引一个伪随机的基本概念:

通过查看汇编可以知道,原版曹操传游戏里,就是使用了大多数程序里一个十分常用的标准伪随机算法,并且只有在读档的时候才会重置【随机数种子】。因此,该贴二楼很合格,说得一点没错,只要你不读档,就肯定还是使用和产生同一个伪随机队列。

6.1里所谓的【伪随机】,其实就是在存档的同时把【随机数种子】也给保存下来,读档时不再重新获取而是直接设置【随机数种子】。如此即可保证每次读档后都能够得到完全相同的伪随机队列。
其实只要你理解了原理,就会发现6.1这种伪随机,反而更方便玩家可以机智地SL。因为这种情况下的伪随机队列是可以通过SL来大致推断出来的。
例如说:
如果当前【预备伪随机数】是70(假设范围为1~100),意味着只要命中率小于70就一定会打铁。
那么我们就应该让一个命中率高的人先攻击消耗掉这个【70】,从而等待下一个更好的【预备伪随机数】产生再让敏捷较低的人攻击。
如果是更机智的玩家,自然会想到,既然敌我使用的是同一个伪随机队列,那么只要把那些不好的【预备伪随机数】留给敌方,就可以更有利于我方等待并得到更好的【预备伪随机数】了。比如故意让敌方反击miss消耗一个坏数,假如没有反击判断的话则该坏数就得留给我方了。
诚然,这些都属于投机倒把的行为,确实是不值得提倡,也没必要深入研究(我没有玩过6.1的mod,以上都是凭经验举例)。只不过,本着实事求是的原则,时不时看到一些对伪随机误解的帖子,这回实在是不吐不快。曾经还有人在我的补丁发布贴里建议添加并大赞伪随机功能,当时真的感到十分无语。
说了那么多,其实想说的就是:只要还是伪随机,就一定可以继续SL。根本不存在什么伪随机就不能SL的说法。你不能SL,只能说明你没有掌握或懒得掌握其中规律罢了。甚至有的人连SL本身都不屑的,这都没问题,属于个人偏好,但是总不能由于他不屑SL而否定SL的作用吧?同理,总不能由于你不懂伪随机下SL而断定伪随机不能SL吧?
P.S.
本来只是想回复该贴主的,后来想想这些应该不是贴主想要关心的东西,说了也等于白说(有如该贴4楼层主)。不如专开一贴算了,让感兴趣的人有机会稍微看看,有个简单的概念。绝对不是为了水经验,不信可以点击查看我所关注的贴吧。


IP属地:广西1楼2017-06-02 09:28回复
    这里在顺便补一个通常计算机上的【真随机】的算法实现吧。说出来也很简单,其实就是【伪随机】算法的基础上再不停地重置【随机数种子】。这样就可以确保当前产生的随机数是与上一次无关的。
    比如说,有的游戏会在每次攻击前都重置一次【随机数种子】,这样就可以确保每次攻击都是无规律的。否则,根据【伪随机】的平均概率算法,这次攻击命中以后,下次攻击命中的概率一定相对降低。等于说连续得到两个很大的数的概率很低,但是,重置【随机数种子】后,这一次得到大数的概率就与上一次无关了,符合【真随机】的期望值。


    IP属地:广西5楼2017-06-02 10:02
    回复