您的位置:首页 > 编程语言 > Go语言

Algorithm Gossip:生命游戏

2015-01-31 22:12 866 查看
/****************************************
*  File Name  : arithmetic.c
*  Creat Data : 2015.1.31
*  Author     : ZY
*****************************************/

/*Algorithm Gossip:生命游戏*/
/*生命游戏(game of life)为1979年由英国数学家J.H.Conway
所提出的,某一细胞的邻居包括上,下,左,右,左上,左下,
右上与右下相邻的细胞,游戏规则如下:
孤单死亡:如果细胞的邻居小于一个,则该细胞在下一次状态将死亡。
拥挤死亡:如果细胞的邻居在四个以上,则细胞在下一次状态将死亡。
稳定:如果细胞的邻居为两个或三个,则下一次状态为稳定存活。
复活:如果某位置原无细胞存活,而该位置的邻居为三个,则该位置将复活一细胞。
用case语句写程序
当邻居个数为0,1,4,5,6,7,8死亡
当邻居个数为3稳定
当邻居个数为2复活*/

#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 row,col;
for(row  = 0;row < MAXROW;row++)
{
for(col = 0;col < MAXCOL;col++)
{
map[row][col] = DEAD;
}
}
puts("Game of life Program");
puts("Enter x,y where x,y is living cell");
printf("0<=x<=%d,0<=y<=%d\n",MAXROW-1,MAXCOL-1);
puts("Terminate with x,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)exceeds map ranage!");//位置坐标超过范围时
}
}
}

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%20cGame of life cell status\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];
}
}
}

int main(void)
{
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;
default:
break;
}
}
}
copyMap();
printf("\nContinue next Generation?");
getchar();
ans = toupper(getchar());//将字符c转换为大写英文字母
if(ans != 'Y')
{
break;
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: