3DMGAME 3DM首页 新闻中心 前瞻 | 评测 游戏库 热门 | 最新 攻略中心 攻略 | 秘籍 下载中心 游戏 | 汉化 购买正版 论坛

注册 登录

QQ登录

只需一步,快速开始

查看: 9026|回复: 32
打印 上一主题 下一主题

[心得] (抛砖引玉)所谓的随机函数以及如何掌控他们的函数值

  [复制链接]

6

主题

291

帖子

285

积分

高级玩家

Rank: 4

贡献度
16
金元
2208
积分
285
精华
0
注册时间
2009-11-29
跳转到指定楼层
主题
发表于 2012-10-5 23:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 kotnredwolf 于 2012-10-5 23:31 编辑

这个理论我很久以前已经有了。3大妈论坛的素质比较高,所以选择在这里首发,希望能帮到大家。另外,很多概念和专有名词之类已经记不清了,希望大家能看懂,不当之处还请高人见谅和指出。

大多数人对随机数理解并不准确,随机数不是完全随机的。
用得比较多的是时钟秒数小数点后几位,同理的还有温度的小数点后几位。看来非常随机,但在足够短的时间内,它们的值是和时间相关的拟线性函数。既然如此,那么在这段足够小的时间里,我们尝试的次数足够多的话,我们就能得出所有结果。
比如说,目标生命值150,计算伤害减免后你的攻击造成的伤害值是固定值(比如说100)+随机数*100,向上取整,于是你能造成的伤害就是100~200。同时,随机数是小数点的后两位。那么在1秒内不停地重复尝试,我们是可以得到任何随机数造成的伤害的。在这1秒里怎么无限次尝试呢?用过模拟器的人应该有这概念,对,实时存档!通过不停的读档,读档瞬间发出攻击指令,第二次稍稍晚一点,你会发现,你能控制伤害值了,也就是说你能控制随机数了。第一次攻击造成了135伤害,目标没有挂;于是第二次你读档后晚一点点攻击,这次造成了179点伤害,看来攻击时机太晚了;继续尝试,第N次以后,你恰好造成了149伤害,把这个剩1点血的目标留给了只能造成1点伤害的牧师。
包括现在的网游,这种在短时间内保持拟线性特征的“随机函数”存在非常普遍。为什么呢,因为他们简单,在大量随机数获取请求下,只会耗费服务器很少的资源。这就给随机数控制开了方便之门。强化装备前使用“垫刀”就是其中一种。为什么要垫刀?看垫刀强化的结果,我们就大致能知道随机函数的走势。比如说,如果强化成功率是30%,而服务器“随机函数”的周期是5秒,那么在连续失败了3.5秒后,下一次强化是必然成功的。所以,垫刀不是为了提升自己所谓的“RP”值,而是导出随机函数的值。如果大家都用这个办法,那成功率不是形同虚设了吗?游戏商有他们的办法:方法1,缩短随机函数周期,比如说,周期改成0.5秒甚至0.1秒,那么要是玩家按的不够快,结果就基本随机了;方法2,随机函数上套上更复杂的函数,比如说,随机数平方后再输出(为了举个简单的例子,我这里就不考虑结果是不是均匀分布了),这种方法,如果函数模型做得不够好,随机函数还是会在特定时间段上出现拟线性的结果;方法3,强制隔开用户发送指令的时间间隔,比如说,强化指令发出后,指令进入5秒冷却时间,但是服务器不可能要求每个玩家发送的指令之间都有间隔,于是我们可以多开账号,用按键精灵之类的工具在短时间内让几个账号一起强化相同的武器,最严重的情况是,服务器所有玩家都在待命,看到第一个玩家的强化公告后一起跟风强化。

现在的网游,用了各种办法(最好的是办法2,做个比较完善的函数嵌套,比如说非固定周期函数,就能得出非常随机的结果了),随机值已经不容易预知了。

好吧,我其实是来写东西骗金元的……

评分

9

查看全部评分

回复

使用道具 举报

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

本版积分规则

Archiver|手机版|3DMGAME ( 京ICP备14006952号-1  沪公网安备 31011202006753号

GMT+8, 2026-4-7 08:20 , Processed in 0.027028 second(s), 17 queries , Memcached On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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