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; }
相关文章推荐
- Algorithm Gossip(10) 细胞生命游戏
- 生命游戏(c语言)
- 游戏Algorithm----数组重排:将数组中的元素,根据值放到与坐标相等的位置
- 生命游戏——元胞自动机程序实现
- Algorithm Gossip: 数字拆解
- 生命游戏
- 山寨腾讯“爱消除”游戏之生命特效
- LINQ 实现的生命游戏
- Algorithm Gossip(5) 老鼠找迷宫(1)
- Algorithm Gossip (17) 长 PI
- Algorithm Gossip: 約瑟夫問題(Josephus Problem)
- 用生命在做游戏
- 生命游戏代码(C#)
- LeetCode 289. Game of Life (生命游戏)
- Algorithm Gossip(6) 老鼠找迷宫(2)
- AlgorithmGossip (19) 完美数
- Algorithm Gossip (22) 中序式转后序式(前序式)
- Algorithm Gossip :八皇后问题
- Algorithm Gossip: 最大访客数
- 生命游戏 题解