» 您尚未 登录   注册 | 社区银行 | 社区婚姻 | 社区成就 | 帮助 | 社区 | 无图版


火花天龙剑 -> 火炎之纹章 -> 精华区 -> GBA三作的实际命中率研究
 XML   RSS 2.0   WAP 

<<  1   2   3   4   5  >>  Pages: ( 5 total )
本页主题: GBA三作的实际命中率研究 加为IE收藏 | 收藏主题 | 上一主题 | 下一主题
路人甲

该用户目前不在线
级别: 站务议员
编号: 1243
精华: 5
发帖: 9280
威望: 10 点
配偶: 单身
火 花 币: 83080 HHB
注册时间:2002-12-31
最后登陆:2022-03-11
艾雷布的骑士(I)朱红之钻(I)
查看作者资料 发送短消息 引用回复这个帖子


完全排除HTML的可能性 一来是实际出发游戏程序和网页扯不上多大联系 二来从语句看不出丝毫HTML的可能性

再初步排除JAVA可能性 JAVA是解释语言 是一句一句来慢慢执行的 做大程序运行速度是非常慢的 相信每个做个课程或毕业设计的都深有体会(这里同样也就排除VB可能性 更慢)

所给代码是结构化程序 我甚至看不出面向对象的影子在里面 如果采用语言非C++ 自然也就不会是C 难道又和776一样是汇编?


蜀地由来多冷雨,川边自古漫寒烟。

[60 楼] | Posted:2006-07-02 18:01| 顶端
worse&better

头衔:军师军师
该用户目前不在线
级别: 火花会员
编号: 42667
精华: 15
发帖: 9493
威望: 78 点
配偶: 单身
火 花 币: 0 HHB
注册时间:2005-08-16
最后登陆:2019-05-18
艾雷布的圣骑士(II)朱红之钻(I)
查看作者资料 发送短消息 引用回复这个帖子


这段乱数生成的代码昨天讨论的时候算是基本弄明白了,开始时给m[m[0]], m[m[0]+2],m[m[0]+4]分别赋值为0x3671、0x90ea、0x1496然后根据那个算法计算(主要就是移位操作),最后的那句:
r[0] = (r[0] * 100) >>> 16;

这个r[0]就是产生出的乱数;

实际上给定了m[m[0]], m[m[0]+2],m[m[0]+4]这3个量的初始值后,全部的乱数就是由这个算法得到的,可以肯定这个算法产生出的乱数其循环周期一定小于2^48;当然这已经是很大的数了,昨天拿程序测试时,确定这个周期肯定是大于1亿的,至于是多少应该无所谓了,基本上不可能耗到循环的。

PS:拿C编了个测试的小程序:

#include<stdio.h>
#define NUM 10000

main()
{

  unsigned int m[3], ret;
  long i;
  FILE *fp;
  m[0]=0x3671;
  m[1]=0x90ea;
  m[2]=0x1496;
  fp=fopen("luanshu.txt", "w");
  for(i=0; i<NUM; i++) {
    ret=(((m[0]>>5)+(m[1]<<11))^((m[2]<<1)+(m[1]>>15)))&0xffff;
    m[2] = m[1]; m[1] = m[0]; m[0] = ret;
    ret=((long)ret * 100) >> 16;
    fprintf(fp, "%d ",ret);
    if(i%20==19)fprintf(fp, "\n");
  }
}

把产生的乱数写到luanshu.txt这个文件当中,20个一行,有兴趣的可以玩一玩


The world combines after long separation, separates after long combination.
[61 楼] | Posted:2006-07-02 18:52| 顶端
自由龙骑士

该用户目前不在线
级别: 火花会员
编号: 52885
精华: 2
发帖: 14227
威望: 10 点
配偶: 单身
火 花 币: 82572 HHB
注册时间:2006-04-17
最后登陆:2019-12-13
艾雷布的骑士(I)海蓝之钻(II)
查看作者资料 发送短消息 引用回复这个帖子


下面是引用路人甲于2006-07-02 18:01发表的:
完全排除HTML的可能性 一来是实际出发游戏程序和网页扯不上多大联系 二来从语句看不出丝毫HTML的可能性

再初步排除JAVA可能性 JAVA是解释语言 是一句一句来慢慢执行的 做大程序运行速度是非常慢的 相信每个做个课程或毕业设计的都深有体会(这里同样也就排除VB可能性 更慢)

所给代码是结构化程序 我甚至看不出面向对象的影子在里面 如果采用语言非C++ 自然也就不会是C 难道又和776一样是汇编?

c++面向对象,c面向结构,但是对于光看一个函数是看不出其整体到底是对象还是结构。
此外,无论如何这都是高级语言,应该不是汇编。
但是,c/c++应该不会在函数前面出现“function”的,c++/c在函数前的前缀是函数类型。
另,怀疑>>>、<<<是>>、<<的误写。


[62 楼] | Posted:2006-07-02 23:08| 顶端
worse&better

头衔:军师军师
该用户目前不在线
级别: 火花会员
编号: 42667
精华: 15
发帖: 9493
威望: 78 点
配偶: 单身
火 花 币: 0 HHB
注册时间:2005-08-16
最后登陆:2019-05-18
艾雷布的圣骑士(II)朱红之钻(I)
查看作者资料 发送短消息 引用回复这个帖子


下面是引用自由龙骑士于2006-07-02 23:08发表的:
另,怀疑>>>、<<<是>>、<<的误写。

不是误写吧,左移是<<,而右移是>>>。

好像有的语言中,>>与>>>一个是算术右移,一个是逻辑右移。


The world combines after long separation, separates after long combination.
[63 楼] | Posted:2006-07-02 23:33| 顶端
路人甲

该用户目前不在线
级别: 站务议员
编号: 1243
精华: 5
发帖: 9280
威望: 10 点
配偶: 单身
火 花 币: 83080 HHB
注册时间:2002-12-31
最后登陆:2022-03-11
艾雷布的骑士(I)朱红之钻(I)
查看作者资料 发送短消息 引用回复这个帖子


军师正解 没误写 我记的>>>我都学过 是移位没错 不过学的语言太多 具体是那门语言忘了....(XD的学校 把C和FORTRAN什么的不同语言拿到一起在一张卷子上考 当年脑子考的是否清醒都记的不得了)

蜀地由来多冷雨,川边自古漫寒烟。

[64 楼] | Posted:2006-07-03 00:26| 顶端
路人甲

该用户目前不在线
级别: 站务议员
编号: 1243
精华: 5
发帖: 9280
威望: 10 点
配偶: 单身
火 花 币: 83080 HHB
注册时间:2002-12-31
最后登陆:2022-03-11
艾雷布的骑士(I)朱红之钻(I)
查看作者资料 发送短消息 引用回复这个帖子


关于这个计算公式 容我小小提出疑问一下

以前 在讨论命中乱数的时候 我们都知道是2个来判定 但因为是GBA模拟 无具体乱数表 所以只能大致估计出乱数的 还是 (这里提出乱数大小的问题 是因为后面的例子要用到)

而此计算公式 以前也有很多人提出过 最终却没能确定下来 因为有不少人都列举了实际的例子来反驳此公式
在这里试举2例
http://bbs.fireemblem.net/read.php?tid=23979&fpage=&toread=&page=2 20楼
http://bbs.fireemblem.net/read.php?tid=27249 6楼


小H不好意思 为了举例 把你坟挖了~


蜀地由来多冷雨,川边自古漫寒烟。

[65 楼] | Posted:2006-07-30 20:15| 顶端
worse&better

头衔:军师军师
该用户目前不在线
级别: 火花会员
编号: 42667
精华: 15
发帖: 9493
威望: 78 点
配偶: 单身
火 花 币: 0 HHB
注册时间:2005-08-16
最后登陆:2019-05-18
艾雷布的圣骑士(II)朱红之钻(I)
查看作者资料 发送短消息 引用回复这个帖子


下面是引用路人甲于2006-07-30 20:15发表的:
关于这个计算公式 容我小小提出疑问一下

以前 在讨论命中乱数的时候 我们都知道是2个来判定 但因为是GBA模拟 无具体乱数表 所以只能大致估计出乱数的 还是 (这里提出乱数大小的问题 是因为后面的例子要用到)

而此计算公式 以前也有很多人提出过 最终却没能确定下来 因为有不少人都列举了实际的例子来反驳此公式
.......

拿到了乱数表后已经可以利用连续测定几十个乱数大小的方法来把游戏中的乱数在乱数表定位了,所以现在已经可以比较简单的把战斗中所使用乱数的具体数值确定了,准备过些天去试试几作的Hard模式是否有所谓“里公式”的存在,当然能有人给出类似那2个例子出现的情况的存档是再好不过了。


The world combines after long separation, separates after long combination.
[66 楼] | Posted:2006-07-30 23:13| 顶端
路人甲

该用户目前不在线
级别: 站务议员
编号: 1243
精华: 5
发帖: 9280
威望: 10 点
配偶: 单身
火 花 币: 83080 HHB
注册时间:2002-12-31
最后登陆:2022-03-11
艾雷布的骑士(I)朱红之钻(I)
查看作者资料 发送短消息 引用回复这个帖子


例1是乱数均值高于命中 结果命中
例2是乱数均值低于命中 结果MISS
2例结果很难想象用一个简单的公式统一起来

我现在的疑问是 当时都未能提供截图 举例的是否都100%确定自己没看错


蜀地由来多冷雨,川边自古漫寒烟。

[67 楼] | Posted:2006-07-31 10:24| 顶端
worse&better

头衔:军师军师
该用户目前不在线
级别: 火花会员
编号: 42667
精华: 15
发帖: 9493
威望: 78 点
配偶: 单身
火 花 币: 0 HHB
注册时间:2005-08-16
最后登陆:2019-05-18
艾雷布的圣骑士(II)朱红之钻(I)
查看作者资料 发送短消息 引用回复这个帖子


下面是引用路人甲于2006-07-31 10:24发表的:
例1是乱数均值高于命中 结果命中
例2是乱数均值低于命中 结果MISS
2例结果很难想象用一个简单的公式统一起来

我现在的疑问是 当时都未能提供截图 举例的是否都100%确定自己没看错

总之现在有的都只是疑问,没有确实证据,所以实验是最重要的。


The world combines after long separation, separates after long combination.
[68 楼] | Posted:2006-07-31 16:11| 顶端
Heero Rainie

头衔:传说中剑圣传说中剑圣
该用户目前不在线
级别: 火花会员
编号: 9379
精华: 10
发帖: 3088
威望: 25 点
配偶: 单身
火 花 币: 19097 HHB
注册时间:2003-06-25
最后登陆:2020-11-02
游戏王国的浪人(I)艾雷布的骑士(I)朱红之钻(I)
查看作者资料 发送短消息 引用回复这个帖子


#include<stdio.h>
#define NUM 10000

main()
{

unsigned int m[3], ret;
long i;
FILE *fp;
m[0]=0x3671;
m[1]=0x90ea;
m[2]=0x1496;
fp=fopen("luanshu.txt", "w");
for(i=0; i<NUM; i++) {
  ret=(((m[0]>>5)+(m[1]<<11))^((m[2]<<1)+(m[1]>>15)))&0xffff;
  m[2] = m[1]; m[1] = m[0]; m[0] = ret;
  ret=((long)ret * 100) >> 16;
  fprintf(fp, "%d ",ret);
  if(i%20==19)fprintf(fp, "\n");
}
}
把注解写写吧,有些地方看不懂

[69 楼] | Posted:2006-11-23 18:58| 顶端
lmt396

头衔:希侬高級領主希侬高級領主
该用户目前不在线
级别: 火花会员
编号: 66655
精华: 0
发帖: 557
威望: 0 点
配偶: 单身
火 花 币: 4025 HHB
注册时间:2006-11-20
最后登陆:2012-09-12
查看作者资料 发送短消息 引用回复这个帖子


其實命中率就是中還是不中而已......98/99%打不中你會@#&#&*#&
敵人命中率1/2%打中你的時候你也會!@$#^&!@
不過這個研究也說明為什麼玩机戰的人會喜歡整天用回避
尤其是用gundam系列...........


我就是bws玩家!!!!
[70 楼] | Posted:2006-11-23 19:14| 顶端
worse&better

头衔:军师军师
该用户目前不在线
级别: 火花会员
编号: 42667
精华: 15
发帖: 9493
威望: 78 点
配偶: 单身
火 花 币: 0 HHB
注册时间:2005-08-16
最后登陆:2019-05-18
艾雷布的圣骑士(II)朱红之钻(I)
查看作者资料 发送短消息 引用回复这个帖子


下面是引用Heero Rainie于2006-11-23 18:58发表的:
#include<stdio.h>
#define NUM 10000

main()
{
.......

随便用C写的那么一个程序,算法的原理大概是这样:

首先定义一个数列m,数列中的每个元素都是一个16位二进制数,其规则如下:
m(1)=0x1496;
m(2)=0x90ea;
m(3)=0x3671; 这是这个数列初始的3个数

然后存在一个递推公式:m(i)=f(m(i-1),m(i-2),m(i-3)) 其中i>4,这个f就是函数的对应法则了,有些类似于Fibonacci数列:F(i)=F(i-1)+F(i-2),当然我们这里的对应关系f要更为复杂。

这样这个数列就定义好了,根据规则可以写出任意多项来。

然后游戏中我们所用到的乱数也可以认为是另一个数列ret,而这个数列中的每个元素是数列m的函数,其中ret(i)=g(m(i+3)),之后所有的乱数就都确定了。

剩下的就是这2个函数关系f和g:

f的法则大概是这样:
设2个中间变量x和y(都是16位二进制数)
其中x的低11位是m(i-1)的高11位,x的高5位是m(i-2)的低5位;
y的高15位是m(i-3)的低15位,y的最低位是m(i-2)的最高位;

然后我们的m(i)就等于x和y按位进行异或的结果

厚道的推导一下m(4):
x=0x51b3
y=0x292a
m(4)=0x789e

f的法则完了,接下来是g:

g的法则很简单,我们所要用到的乱数ret(i)就等于m(i+3)*100/65535这个结果的整数部分

因为数列m中的数都是16位二进制数,所以除以65535(0xffff)相当于把它变成一个0~1之间的小数,乘以100后取整当然就是我们所需要的0~99之间的乱数。

比如第一个乱数ret(1)就等于m(4)*100/65535,m(4)就是刚才计算出来的0x789e,看着不爽化成十进制就是30878,乘以100再除以65535后取整,得到我们的第一个乱数47,烈火琳篇所用到的第一个乱数就是这个数。

当然也可以直接把数列m本身就当成16位的二进制小数(取值范围0~1),然后乘以100取整就是我们所需要的乱数。

扯了这么多最后说明一点,不明白的话完全我不负责任,我只是自己写着爽 [s:2]


[ 此贴被worse&better在2006-11-23 20:35重新编辑 ]


The world combines after long separation, separates after long combination.
[71 楼] | Posted:2006-11-23 20:11| 顶端
myrw



该用户目前不在线
级别: 注册会员
编号: 66922
精华: 0
发帖: 1
威望: 0 点
配偶: 单身
火 花 币: 23868 HHB
注册时间:2006-11-23
最后登陆:2006-12-05
查看作者资料 发送短消息 引用回复这个帖子


数学分析。。。
[72 楼] | Posted:2006-11-23 20:50| 顶端
lmt396

头衔:希侬高級領主希侬高級領主
该用户目前不在线
级别: 火花会员
编号: 66655
精华: 0
发帖: 557
威望: 0 点
配偶: 单身
火 花 币: 4025 HHB
注册时间:2006-11-20
最后登陆:2012-09-12
查看作者资料 发送短消息 引用回复这个帖子


這個還只是命中率吧了,到時樓主講必殺機率的時候可能超過半數的人會感到頭痛呢!!!!

我就是bws玩家!!!!
[73 楼] | Posted:2006-11-23 20:54| 顶端
worse&better

头衔:军师军师
该用户目前不在线
级别: 火花会员
编号: 42667
精华: 15
发帖: 9493
威望: 78 点
配偶: 单身
火 花 币: 0 HHB
注册时间:2005-08-16
最后登陆:2019-05-18
艾雷布的圣骑士(II)朱红之钻(I)
查看作者资料 发送短消息 引用回复这个帖子


下面是引用lmt396于2006-11-23 20:54发表的:
這個還只是命中率吧了,到時樓主講必殺機率的時候可能超過半數的人會感到頭痛呢!!!!

必杀判定很简单,就用一个乱数,基本上概率和看到的数字一样


The world combines after long separation, separates after long combination.
[74 楼] | Posted:2006-11-23 20:59| 顶端
lmt396

头衔:希侬高級領主希侬高級領主
该用户目前不在线
级别: 火花会员
编号: 66655
精华: 0
发帖: 557
威望: 0 点
配偶: 单身
火 花 币: 4025 HHB
注册时间:2006-11-20
最后登陆:2012-09-12
查看作者资料 发送短消息 引用回复这个帖子


那麼必殺也有自己的亂數表哦!?

我就是bws玩家!!!!
[75 楼] | Posted:2006-11-23 21:08| 顶端
worse&better

头衔:军师军师
该用户目前不在线
级别: 火花会员
编号: 42667
精华: 15
发帖: 9493
威望: 78 点
配偶: 单身
火 花 币: 0 HHB
注册时间:2005-08-16
最后登陆:2019-05-18
艾雷布的圣骑士(II)朱红之钻(I)
查看作者资料 发送短消息 引用回复这个帖子


下面是引用lmt396于2006-11-23 21:08发表的:
那麼必殺也有自己的亂數表哦!?

只要用到乱数,都是这个了,没有第二个表


The world combines after long separation, separates after long combination.
[76 楼] | Posted:2006-11-23 21:14| 顶端
lmt396

头衔:希侬高級領主希侬高級領主
该用户目前不在线
级别: 火花会员
编号: 66655
精华: 0
发帖: 557
威望: 0 点
配偶: 单身
火 花 币: 4025 HHB
注册时间:2006-11-20
最后登陆:2012-09-12
查看作者资料 发送短消息 引用回复这个帖子


也就是說越靠近零越容易使出必殺了?(0-99)

我就是bws玩家!!!!
[77 楼] | Posted:2006-11-23 21:21| 顶端
worse&better

头衔:军师军师
该用户目前不在线
级别: 火花会员
编号: 42667
精华: 15
发帖: 9493
威望: 78 点
配偶: 单身
火 花 币: 0 HHB
注册时间:2005-08-16
最后登陆:2019-05-18
艾雷布的圣骑士(II)朱红之钻(I)
查看作者资料 发送短消息 引用回复这个帖子


假设必杀率是30%,那么如果用来判定必杀的乱数小于30将发动必杀,大于等于30时则是普通攻击

The world combines after long separation, separates after long combination.
[78 楼] | Posted:2006-11-23 21:38| 顶端
Heero Rainie

头衔:传说中剑圣传说中剑圣
该用户目前不在线
级别: 火花会员
编号: 9379
精华: 10
发帖: 3088
威望: 25 点
配偶: 单身
火 花 币: 19097 HHB
注册时间:2003-06-25
最后登陆:2020-11-02
游戏王国的浪人(I)艾雷布的骑士(I)朱红之钻(I)
查看作者资料 发送短消息 引用回复这个帖子


下面是引用worse&better于2006-11-23 20:11发表的:

随便用C写的那么一个程序,算法的原理大概是这样:

首先定义一个数列m,数列中的每个元素都是一个16位二进制数,其规则如下:
m(1)=0x1496;
.......

解释了F函数就可以了,其他懂
C现在才学不久.所以深入没学不知

[79 楼] | Posted:2006-11-24 16:42| 顶端
<<  1   2   3   4   5  >>  Pages: ( 5 total )

火花天龙剑 -> 精华区




Powered by PHPWind v3.0.1 Code © 2003-05 PHPWind
辽ICP备05016763号
Gzip enabled

You can contact us