WEB开发网
开发学院软件开发VC 用Visual C++ 6.0模拟仿真生态系统 阅读

用Visual C++ 6.0模拟仿真生态系统

 2008-11-14 19:34:40 来源:WEB开发网   
核心提示: 由于此仿真模型比较简单,有关生命对象的生命状态只有生或死,用Visual C++ 6.0模拟仿真生态系统(2),所以可以用一个二维数组int Cells[350][350];来存放当前时刻的所有细胞个体的生命状态,并用另一个二维数组int Temp[350][350];来寄存下一时刻的生命

由于此仿真模型比较简单,有关生命对象的生命状态只有生或死,所以可以用一个二维数组int Cells[350][350];来存放当前时刻的所有细胞个体的生命状态,并用另一个二维数组int Temp[350][350];来寄存下一时刻的生命状态。该生命群体的初始状态可以通过以时间为种子的随机数来产生,也可以通过直接对Cells数组的赋值来完成对初试状态的设定:

srand((unsigned)time(NULL)); //以时间为种子
for(int i=0;i<350;i++) //枚举每一个细胞个体,并设定其初始的生命状态
 for(int j=0;j<350;j++) {
  if(ID==1) //ID为1时设定为全生
   Cells[i][j]=1;
  if(ID==2) //ID为2时设定为全死
   Cells[i][j]=0;
  if(ID==3) //ID为3时设定其生死状态为随机
   Cells[i][j]=rand()%2;
  Temp[i][j]=Cells[i][j];
 }

生命总是在随着时间的推移而不断的代谢、繁殖,我们可以将定时器发出的每一次中断作为指示我们的生命模型完成一次的代谢与繁殖的信号,通过枚举每一个细胞个体周围的细胞个数来决定下一代细胞群的生命状态,下面将此实现此过程的核心代码摘选如下:

int nCount=0;//用以统计每个细胞周围的细胞个数
for(int i=1;i<349;i++)
 for(int j=1;j<349;j++){
  //每个细胞的前后左右的
  nCount=Cells[i-1][j]+Cells[i][j-1]+Cells[i][j+1]+Cells[i+1][j];
  //细胞个数。
  switch(nCount)//根据人工生命的模拟规则,对其个体的生存状态进行判别
  {
   case 0://周围没有细胞,该细胞死亡。
    Temp[i][j]=0;
    break;
   case 1://周围有一个细胞,维持当前状态不变。
    break;
   case 2://周围有两个细胞,产生一个新细胞。
    Temp[i][j]=1;
    break;
   case 3://周围有三个细胞,该细胞死亡。
    Temp[i][j]=0;
    break;
   case 4://周围有四个细胞,该细胞死亡。
    Temp[i][j]=0;
    break;
   default:
    break;
  }
 }
 ……
 for(i=0;i<350;i++)
  for(int j=0;j<350;j++)
   Cells[i][j]=Temp[i][j];

上一页  1 2 3 4  下一页

Tags:Visual 模拟 仿真

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接