生命游戏

来源:互联网 发布:node.js代替php 编辑:程序博客网 时间:2024/06/08 09:15
生命游戏又称为元胞自动机,模拟自然界里的生物进化,在自然界中,一个孢子需要一定的生活资源,如果周围的孢子为2个,则维持原状,如果为3个则孢子复活,为他情况则改孢子死亡。元胞自动机在GIS行业中应用很广泛,可以模拟自然界中的进化现象。#include <math.h>#include <ctype.h>int Cell[10][10];int Temp[10][10]; //定义原细胞与临时细胞void Init(){for(int Row=0;Row<10;Row++){for(int Col=0;Col<10;Col++){Cell[Row][Col]=0;   //初始化原细胞存活状态,开始为0,为死亡状态Temp[Row][Col]=0;   //  初始化临时细胞存活状态,开始为0,为死亡状态}}}void OutPut()                                   //打印输出{for(int Row=0;Row<10;Row++){for(int Col=0;Col<10;Col++){if(Cell[Row][Col]==1)printf("A");elseprintf(" ");}printf("\n");}}void InPut()            //输入{    while(1){int Row,Col;scanf_s("%d %d",&Row,&Col);if(0<=Row&&Row<10&&0<=Col&&Col<10)Cell[Row][Col]=1;else if(Row==-1&&Col==-1)break;elseprintf("请输入正确的坐标");}}int CalcNum(int Row,int Col){int Count=0;for(int i=Row-1;i<=Row+1;i++){for(int j=Col-1;j<=Col+1;j++){if(i<0||i>=10||j<0||j>=10)continue;if(Cell[i][j]==1)Count++;}}if(Cell[Row][Col]==1)Count--;               //如果原来本身存活,则需要减一,因为是判断该细胞周围的细胞数量return Count;}void CopyCell()                        //输出一次就需要保存一次状态,为下一次变化做准备{int row, col;for (row = 0; row < 10; row++)for (col = 0; col < 10; col++)Cell[row][col]=Temp[row][col];}int main(){Init();InPut();while(1){OutPut();for(int Row=0;Row<10;Row++){for(int Col=0;Col<10;Col++){switch(CalcNum(Row,Col))      //计算周围细胞数量{case 0:case 1:case 4:case 5:case 6:case 7:case 8:Cell[Row][Col]=0;break;case 2:Cell[Row][Col]=Temp[Row][Col];break;case 3:Cell[Row][Col]=1;break;}}}CopyCell();getchar();int ans = toupper(getchar());if (ans != 'y')break;}return 0;}

0 0
原创粉丝点击