关于游戏中的随即数算法,该怎么处理
关于游戏中的随即数算法
大家先看看这个程序:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
class clRandom
{
protected:
int mRange;
int mIndex;
int *mTable;
bool mAutoGenerate;
public:
clRandom(unsigned int Range,bool AutoGen=false):mRange(Range),mTable(NULL),mIndex(0),mAutoGenerate(AutoGen)
{
srand((unsigned)time(NULL));
mRange = Range;
mTable = new int [mRange];
Generate();
}
virtual ~clRandom()
{
if(mTable != NULL)
{ delete[] mTable;
mTable = NULL;
}
mRange = 0;
}
int GetNumber()
{
int Number = -1;
if(mRange> 0)
{
Number = mTable[mIndex];
++mIndex;
if(mIndex > = mRange)
{ mIndex = 0;
if(mAutoGenerate){
Generate();
}
}
}
return Number;
}
void Generate()
{
int loop,offset;
for(loop=0;loop <mRange;loop++)
{
mTable[loop] = loop;
}
for(loop=0;loop <mRange;loop++)
{
int temp;
offset=(rand()%mRange)+loop;
if(offset > = mRange)
{
offset=offset-mRange;
}
temp=mTable[loop];
mTable[loop]=mTable[offset];
mTable[offset]=temp;
}
mIndex=0;
}
};
int main()
{
clRandom *RandMaker;
int loop,Range=20;
RandMaker=new clRandom(Range);
for(loop=0;loop <Range;loop++)
{
printf( "%d ",RandMaker-> GetNumber());
}
printf( "\n\n ");
RandMaker-> Generate();
}
return 0;
}
这里在main()函数里面
clRandom *RandMaker;
int loop,Range=20;
RandMaker=new clRandom(Range)
能解释一下吗?
为什么不能直接写成 clRandom RandMaker(Range) 呢 然后利用RandMaker. 函数解决呢 ?
------解决方案--------------------
判断一下 作用域 ~
如果局部对象可以,
使用局部对象自然也是可以的 ~
但是,
显然,
使用 new 生成对象,
也完全可以 ~
------解决方案--------------------
这世界面正是有无数的可能,而无限精彩.
大家先看看这个程序:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
class clRandom
{
protected:
int mRange;
int mIndex;
int *mTable;
bool mAutoGenerate;
public:
clRandom(unsigned int Range,bool AutoGen=false):mRange(Range),mTable(NULL),mIndex(0),mAutoGenerate(AutoGen)
{
srand((unsigned)time(NULL));
mRange = Range;
mTable = new int [mRange];
Generate();
}
virtual ~clRandom()
{
if(mTable != NULL)
{ delete[] mTable;
mTable = NULL;
}
mRange = 0;
}
int GetNumber()
{
int Number = -1;
if(mRange> 0)
{
Number = mTable[mIndex];
++mIndex;
if(mIndex > = mRange)
{ mIndex = 0;
if(mAutoGenerate){
Generate();
}
}
}
return Number;
}
void Generate()
{
int loop,offset;
for(loop=0;loop <mRange;loop++)
{
mTable[loop] = loop;
}
for(loop=0;loop <mRange;loop++)
{
int temp;
offset=(rand()%mRange)+loop;
if(offset > = mRange)
{
offset=offset-mRange;
}
temp=mTable[loop];
mTable[loop]=mTable[offset];
mTable[offset]=temp;
}
mIndex=0;
}
};
int main()
{
clRandom *RandMaker;
int loop,Range=20;
RandMaker=new clRandom(Range);
for(loop=0;loop <Range;loop++)
{
printf( "%d ",RandMaker-> GetNumber());
}
printf( "\n\n ");
RandMaker-> Generate();
}
return 0;
}
这里在main()函数里面
clRandom *RandMaker;
int loop,Range=20;
RandMaker=new clRandom(Range)
能解释一下吗?
为什么不能直接写成 clRandom RandMaker(Range) 呢 然后利用RandMaker. 函数解决呢 ?
------解决方案--------------------
判断一下 作用域 ~
如果局部对象可以,
使用局部对象自然也是可以的 ~
但是,
显然,
使用 new 生成对象,
也完全可以 ~
------解决方案--------------------
这世界面正是有无数的可能,而无限精彩.