/****************************************
* 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;
}
Algorithm Gossip:生命游戏
最新推荐文章于 2021-05-18 05:53:52 发布