海信家电”换帅 “ 高玉玲接替代慧忠出任新任董事长
2024-11-22
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]; |
CDC* pDC=GetDC(); …… for(int i=1;i<349;i++) for(int j=1;j<349;j++) { if(Cells[i][j]==0)//死亡的细胞所对应的像素用黑色表示。 pDC->SetPixel(i,j,RGB(0,0,0)); if(Cells[i][j]==1)//活着的细胞所对应的像素用黄色表示。 pDC->SetPixel(i,j,RGB(255,255,0)); } …… ReleaseDC(pDC); |
仿真结果及进一步的扩展
我们用前面的程序对一个细胞群进行仿真,初始时所有的细胞群都是活着的,但由于过分拥挤,到第二代只有四个角上的少量细胞存活了下来(图一),然后他们不断的繁衍,逐渐向空旷的群体中央扩散(图二、图三),当从四角繁衍到中央时,中央也变的拥挤,细胞群又开始从拥挤的中央地带逐渐的向相对疏松的周遍区域扩散(图四、图五)、当繁衍到一定程度时,细胞会大致均匀的散布于整个观察空间,此时活着的细胞的数量和分布都趋于稳定,既不会突然大量滋生,也不会突然大量死亡(图六),当然,这都是在无外界干扰的理想情况下实现的。
[图一:繁殖到第10代] |
[图二:繁殖到第150代] |
[图三:繁殖到第300代] |
[图四:繁殖到第450代] |
[图五:繁殖到第1000代] |
[图六:繁殖到第4500代] |
struct Animal { …… int Age; //描述生物的年龄 int Energy; //描述生物的能量 int Healthy; //描述生物的健康指数 int Size; //描述生物的个体大小 int Intelligence; //描述生物的智力发育 bool IsLife; //描述生物是否死亡 …… }; |
评论 {{userinfo.comments}}
{{child.content}}
{{question.question}}
提交