发表于 2007-9-23 10:231#
楼主有人问,流星不是已经提供了Rand指令函数来产生随机数了吗?
为什么还要发这个帖?
那我告诉你,流星的这个Rand指令有缺陷
缺陷在于,如果两次rand函数使用距离太近,其结果是一样的
也就是
i = Rand(30);
j = Rand(30);
i和j有90%的可能性是一样的,主要是因为时间太近,流星的Rand每次都以时间为基数
为了在AI中同时随机添加N个出生不同的机器人,请使用我的Rand函数
我的Rand函数可以快速同时产生真随机出生点
GetMyRand(int sz)
{
int g_next;
int g_tmpReturn;
//读取随机种子
int f = OpenFile("level\rand.sav", "r");
g_next = ReadFile(f);
CloseFile(f);
//随机
g_next = g_next*1048573+12345;
//重置随机种子
f = OpenFile("level\rand.sav", "w");
WriteFile(f, g_next);
CloseFile(f);
//落在设定范围内
g_tmpReturn = (g_next/65536)%32768;
g_tmpReturn = g_tmpReturn%sz;
return g_tmpReturn-0;
}
为什么还要发这个帖?
那我告诉你,流星的这个Rand指令有缺陷
缺陷在于,如果两次rand函数使用距离太近,其结果是一样的
也就是
i = Rand(30);
j = Rand(30);
i和j有90%的可能性是一样的,主要是因为时间太近,流星的Rand每次都以时间为基数
为了在AI中同时随机添加N个出生不同的机器人,请使用我的Rand函数
我的Rand函数可以快速同时产生真随机出生点
GetMyRand(int sz)
{
int g_next;
int g_tmpReturn;
//读取随机种子
int f = OpenFile("level\rand.sav", "r");
g_next = ReadFile(f);
CloseFile(f);
//随机
g_next = g_next*1048573+12345;
//重置随机种子
f = OpenFile("level\rand.sav", "w");
WriteFile(f, g_next);
CloseFile(f);
//落在设定范围内
g_tmpReturn = (g_next/65536)%32768;
g_tmpReturn = g_tmpReturn%sz;
return g_tmpReturn-0;
}
UID 12792


_200612171116341.jpg)
啥函数
估计卡住了。一下发了两帖。