细胞生命游戏一维c语言,生命游戏 细胞死亡问题

[c]代码库#include

#include

#include

#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

{

for ( col=0; 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

for ( col=0; 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

0<=col&&col

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

{

printf ( "\n%20c",' ' );

for ( col=0; col

if ( map[row][col]==ALIVE ) putchar ( '#' );

else putchar ( '-' );

}

}

void copyMap()

{

int row,col;

for ( row=0; row

for ( col=0; col

map[row][col]=newmap[row][col];

}

694748ed64b9390909c0d88230893790.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值