用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - c代码库

生命游戏 细胞死亡问题

2012-10-30 作者: 程序猿style举报

[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];
}


网友评论    (发表评论)


发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。


扫码下载

加载中,请稍后...

输入口令后可复制整站源码

加载中,请稍后...