Mud 版 (精华区)
发信人: Baggio (傻瓜牌生活), 信区: Mud
标 题: NT下的random()解决办法 xiha
发信站: 哈工大紫丁香 (Tue May 4 20:32:48 1999), 转信
发信人: xiha (随风而去), 信区: Mud_Builder
标 题: NT下的random()解决办法
发信站: BBS 荔园晨风站 (Sun Apr 26 22:45:51 1998), 转信
BBS水木清华站∶精华区
发信人: Ranma (乱马~~~~~~~无聊中), 信区: Mud_Builder
标 题: Re: 如何让MUDLIB在NT上跑
发信站: BBS 水木清华站 (Wed Oct 8 09:10:53 1997)
我想在95环境下跑mudos,能不能重写random()呢,
以前想到要重写,但是不知道怎么调用被继承的efun,
看了关于add_action的讨论我想,在95下random()可以
重写为这个样子:
float random(float max)
{
if (max>10000)
return efun::random(max/100) * 100;
else
return efun::random(max);
}
本来我想这样写的,利用参数不同来选择调用的是原型还是用户重载的
因为一般用户都是int的参数,int的返回值,所以可以写成如下形式
int random(int max)
{
if (max>10000)
return (int) random((float) max/100) * 100;
else
return (int) random((float) max);
}
【 在 peacock (孔雀明王) 的大作中提到: 】
∶ 原来的文章是我写的,刚才看来一下前面的文章,好象找不出来了,也没被收
∶ 到精华区,只好再写一遍了。
∶ MS的random(x) 函数有问题,在x >> 10000的时候分布不均匀。大体上
∶ random(100000)的返回值集中在10000到25000之间,偶尔能看见8000几,
∶ 超过40000 的时候几乎没有。而且x 再上升,好象分布也不见提高。
∶ 解决办法是变一下随机数的引用方法。
∶ 判断打中打不中,combatd.c 里用的是
∶ if ( random( ap + dp ) < dp )
∶ {
∶ //躲闪成功;
∶ }
∶ else if ( random(ap + pp ) < pp )
∶ {
∶ //招架成功
∶ }
∶ else
∶ {
∶ //击中
∶ }
∶ 所以你攻防一高,就会出现谁也打不着谁的情况。
∶ 只要把 if ( random( ap + dp) > dp )
∶ 改成 if ( random(100) > dp * 100 / ( ap + dp) )就成了。
∶ 误差在1%范围内,应该是可以接受的吧?
--
小楼一夜听秋雨
--
伫倚危楼风细细 望极春愁 黯黯生天际 草色烟光残照里 无言谁会凭栏意[0
拟把疏狂图一醉 对酒当歌 强乐还无味 衣带渐宽终不悔 为伊消得人憔悴
※ 来源:·BBS 水木清华站 bbs.net.tsinghua.edu.cn·[FROM: 166.111.5.32]
BBS水木清华站∶精华区
--
※ 来源:.BBS 荔园晨风站 bbs.szu.edu.cn.[FROM: 202.192.140.167]--
※ 转寄:.BBS 荔园晨风站 bbs.szu.edu.cn.[FROM: 172.18.32.20]
--
☆ 来源:.哈工大紫丁香 bbs.hit.edu.cn.[FROM: bin@fengyun.hit.edu.]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:16.709毫秒