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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/dumzp13/article/details/51525446
生命游戏是由英国剑桥大学数学家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;
}


没有更多推荐了,返回首页

私密
私密原因:
请选择设置私密原因
  • 广告
  • 抄袭
  • 版权
  • 政治
  • 色情
  • 无意义
  • 其他
其他原因:
120
出错啦
系统繁忙,请稍后再试

关闭