生命游戏

来源:互联网 发布:倩女幽魂辅助软件 编辑:程序博客网 时间:2024/06/08 13:25
生命游戏(game of life)为1970年由英国数学家J. H. Conway所提出,某一细胞的邻居包
括上、下、左、右、左上、左下、右上与右下相邻之细胞,游戏规则如下:
孤单死亡:如果细胞的邻居小于一个,则该细胞在下一次状态将死亡。
拥挤死亡:如果细胞的邻居在四个以上,则该细胞在下一次状态将死亡。
稳定:如果细胞的邻居为二个或三个,则下一次状态为稳定存活。

复活:如果某位置原无细胞存活,而该位置的邻居为三个,则该位置将复活一细胞。


#include <iostream>#include <time.h>using namespace std;#defineROW    10#defineCOLUMN 10#define     ALIVE   1#define     DEAD    0int nCellSta[ROW][COLUMN];int nTempSta[ROW][COLUMN];int CellCount(int nRow, int nColumn){int nSum = 0;for (int i = nRow-1; i< nRow +2; i++){for (int j = nColumn -1; j< nColumn +2 ; j++){if (i < 0 || i >ROW-1 || j<0 || j>COLUMN -1){continue;}if (nCellSta[i][j] == ALIVE){nSum++;}}}switch(nSum){case 0:case 1:case 4:case 5:case 6:case 7:case 8:return DEAD;case 2:return nCellSta[ROW][COLUMN];case 3:return ALIVE;}}int PrintValue(){int nSum = 0;for (int i = 0; i< COLUMN; i++){for (int j = 0; j< ROW; j++){cout<<nCellSta[i][j]<<" "; nSum += nCellSta[i][j];}cout<<endl<<endl;}return nSum;}int main(){int nFlag = 0;memset(nCellSta, 0, sizeof(nCellSta));memset(nTempSta, 0, sizeof(nTempSta));srand(time(NULL));for (int i = 0; i< COLUMN; i++){for (int j = 0; j< ROW; j++){nCellSta[i][j] = rand() % 2;}}PrintValue();while (1){cout<<"新一轮游戏进化开始"<<endl;for (int i = 0; i< COLUMN; i++){for (int j = 0; j< ROW; j++){nTempSta[i][j] = CellCount(i, j);}}memcpy(nCellSta,nTempSta,sizeof(nCellSta));if(!PrintValue()){cout<<"全部死亡,进化结束"<<endl;break;}cout<<"是否开启下一轮进化,1继续,0退出"<<endl;cin>>nFlag;if (nFlag){continue;}elsebreak;}system("pause");}




0 0