[c]代码库
#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
#define MAXROW 10
#define MAXCOL 25
#define DEAD 0
#define ALIVE 1
/* 生命游戏 */
/*某一细胞的邻居包括上、下、左、右、左上、左下、右上与右下相邻之细胞,游戏规则如下:
孤单死亡:如果细胞的邻居小于一个,则该细胞在下一次状态将死亡。
拥挤死亡:如果细胞的邻居在四个以上,则该细胞在下一次状态将死亡。
稳定:如果细胞的邻居为二个或三个,则下一次状态为稳定存活。
复活:如果某位置原无细胞存活,而该位置的邻居为三个,则该位置将复活一细胞。 */
int map[MAXROW][MAXCOL],newmap[MAXROW][MAXCOL];
void init();
int neighbors ( int,int );
void outputMap();
void copyMap();
int main()
{
int row,col;
char ans;
init();
while ( 1 )
{
outputMap();
for ( row=0; row<MAXROW; row++ )
{
for ( col=0; col<MAXCOL; col++ )
{
switch ( neighbors ( row,col ) )
{
case 0:
case 1:
case 4:
case 5:
case 6:
case 7:
case 8:
newmap[row][col]=DEAD;
break;
case 2:
newmap[row][col]=map[row][col];
break;
case 3:
newmap[row][col]=ALIVE;
break;
}
}
}
copyMap();
printf ( "\nContinuenextGeneration?" );
getchar();
ans=toupper ( getchar() );
if ( ans!='Y' ) break;
}
return 0;
}
void init()
{
int row,col;
for ( row=0; row<MAXROW; row++ )
for ( col=0; col<MAXCOL; col++ )
map[row][col]=DEAD;
puts ( "GameoflifeProgram" );
puts ( "Enterx,ywherex,yislivingcell" );
printf ( "0<=x<=%d,0<=y<=%d\n",
MAXROW-1,MAXCOL-1 );
puts ( "Terminatewithx,y=-1,-1" );
while ( 1 )
{
scanf ( "%d%d",&row,&col );
if ( 0<=row&&row<MAXROW&&
0<=col&&col<MAXCOL )
map[row][col]=ALIVE;
else if ( row==-1||col==-1 )
break;
else
printf ( "(x,y)exceedsmapranage!" );
}
}
int neighbors ( int row,int col )
{
int count=0,c,r;
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 )
count++;
}
if ( map[row][col]==ALIVE )
count--;
return count;
}
void outputMap()
{
int row,col;
printf ( "\n\n%20cGameoflifecellstatus\n" );
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];
}