生命游戏

最后更新于:2022-04-01 10:11:50

生命游戏(game of life)为1970年由英国数学家J. H. Conway所提出,某一细胞的邻居包括上、下、左、右、左上、左下、右上与右下相邻之细胞,游戏规则如下: 孤单死亡:如果细胞的邻居小于一个,则该细胞在下一次状态将死亡。 拥挤死亡:如果细胞的邻居在四个以上,则该细胞在下一次状态将死亡。 稳定:如果细胞的邻居为二个或三个,则下一次状态为稳定存活。 复活:如果某位置原无细胞存活,而该位置的邻居为三个,则该位置将复活一细胞。 ~~~ #include <iostream> #include <time.h> using namespace std; #define ROW 10 #define COLUMN 10 #define ALIVE 1 #define DEAD 0 int 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; } else break; } system("pause"); } ~~~ ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-02-18_56c5c49b8a632.jpg)
';