C++: 生命游戏(模拟细胞群演化)

来源:互联网 发布:手机excle不同数据筛选 编辑:程序博客网 时间:2024/04/27 23:35
生命游戏是由英国剑桥大学数学家John Conway提出的,游戏的规则是这样的,在一个M*N棋盘上,每格只有两个状态, “生”和“死”,分别表示是否被一个生命棋子所占有.每个方格有八个邻格,游戏的规则如下:
a) 对于处在“生”状态的格,若八个邻居中当前有2个或3个“生命”,则继续保持存活状态,否则在下一个状态,将因过于孤独或过于拥挤而死亡.
b) 对于处在“死”态的空格,若八个邻格中有3个“生命”,则该格在下一状态将转变为“生命”(代表繁衍过程),否则继续空着. 
游戏中的所有生命棋子依据上述确定的局部规则作同步更新,一代繁殖一代地进行着。
用C++进行摸拟


#include<iostream>#include<ctime>#include<cstdlib>#include<unistd.h>using namespace std;void init();void printArea();void evol();int surroundingLifeCount(int y, int x);bool** cells;int lenArea;int amount;int main(void) {cout << "输入网格宽度: ";cin >> lenArea; cells = new bool*[lenArea];for(int i=0;i<lenArea;i++) cells[i] = new bool[lenArea];cout << "输入初始个数: ";cin >> amount;init();while(true) {system("cls");printArea();evol();sleep(1);}}void init() {srand(time(NULL));for(int i=0;i<lenArea;i++) for(int j=0;j<lenArea;j++) cells[i][j] = false;for(int i=0;i<amount;i++) {int m = rand()%lenArea,n = rand()%lenArea;if(cells[m][n]) {i--;continue;}else cells[m][n] = true;}}void printArea() {for(int i=0;i<lenArea;i++) {for(int j=0;j<lenArea;j++)if(cells[i][j]) cout << " " << "*";else cout << "  ";cout << endl;}}void evol() {int lifeCount, x, y;for(int i=0;i<lenArea;i++) {for(int j=0;j<lenArea;j++) {lifeCount = surroundingLifeCount(i,j);if(cells[i][j]) if(lifeCount<2 || lifeCount>3) cells[i][j] = false;if(cells[i][j]==false && lifeCount==3) cells[i][j] = true;}}}int surroundingLifeCount(int y, int x) {int curY, curX;int lifeCount = 0;for(curY=y-1;curY<=y+1;curY++)for(curX=x-1;curX<=x+1;curX++)if( !(curX==x&&curY==y) && curY>=0 && curY<lenArea && curX>=0 && curX<lenArea && cells[curY][curX]) lifeCount++;return lifeCount;}


0 0
原创粉丝点击