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毫秒