生命游戏规则:
孤单死亡:细胞邻居小于一个,则细胞在下一次状态将死亡
拥挤死亡:细胞邻居在四个及以上,则该细胞在下一次状态将死亡
稳定:细胞的邻居为两个或三个,则下一次状态为稳定存活
复活:原位置无细胞存活,而该位置的邻居为三个,则该位置将复活一细胞。代码如下:
#include<stdio.h>
#include<stdlib.h>
#define DEAD 0
#define ALIVE 1
#define MAXROW 10
#define MAXCOL 25
int map[MAXROW][MAXCOL];
int newmap[MAXROW][MAXCOL];
void init(){
int row,col;
for(row=0;row<MAXROW;row++)
for(col=0;col<MAXCOL;col++){
map[row][col]=DEAD;
}
printf("the game of life\n");
printf("please enter x y where (x,y) is living cell");
puts("terminate with x,y=-1,-1:");
while(1){
scanf("%d%d",&row,&col);
if(row>=0&&row<MAXROW&&col>=0&&col<MAXCOL)
map[row][col]=ALIVE;
else if(row==-1&&col==-1){
break;
}
else
printf("(x,y) exceeds map ranage!");
}
}
int neighbor(int row,int col){
int sum=0;
int r,c;
for(r=row-1;r<=row+1;r++)
for(c=col-1;c<=col+1;c++){
if(r<0||r>=MAXROW||c<0||c>=MAXCOL)
continue;
if(map[r][c]==ALIVE)
sum++;
}
if(map[row][col]==ALIVE)
sum--;
return sum;
}
void output(){
int row,col;
printf("\ncell initiall status");
for(row=0;row<MAXROW;row++){
printf("\n%20c",' ');
for(col=0;col<MAXCOL;col++)
if(map[row][col]==ALIVE)
putchar('#');
else
putchar('-');
}
}
void copymap(){
int row,col;
for(row=0;row<MAXROW;row++)
for(col=0;col<MAXCOL;col++)
map[row][col]=newmap[row][col];
}
int main(){
int row,col;
char c;
init();
while(1){
output();
for(row=0;row<MAXROW;row++)
for(col=0;col<MAXCOL;col++)
switch(neighbor(row,col)){
case 2:newmap[row][col]=map[row][col];break;
case 3:newmap[row][col]=ALIVE;break;
default : newmap[row][col]=DEAD; }
copymap();
printf("continue?Y/N:");
getchar();
c=getchar();
if(c=='N'||c=='n')
break;
}
}