首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

关于游戏中的随即数算法,该怎么处理

2012-03-02 
关于游戏中的随即数算法大家先看看这个程序:#include stdio.h#include stdlib.h#include time.hclas

关于游戏中的随即数算法
大家先看看这个程序:
#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 生成对象,
也完全可以 ~
[解决办法]
这世界面正是有无数的可能,而无限精彩.



[解决办法]
任何人所能做的,都只是其中的一种可能而已.
既然你发现了另一种可能,那么你可以.

热点排行