C++: 生命游戏(模拟细胞群演化)
2016-05-28 16:16
381 查看
生命游戏是由英国剑桥大学数学家John Conway提出的,游戏的规则是这样的,在一个M*N棋盘上,每格只有两个状态, “生”和“死”,分别表示是否被一个生命棋子所占有.每个方格有八个邻格,游戏的规则如下:
a) 对于处在“生”状态的格,若八个邻居中当前有2个或3个“生命”,则继续保持存活状态,否则在下一个状态,将因过于孤独或过于拥挤而死亡.
b) 对于处在“死”态的空格,若八个邻格中有3个“生命”,则该格在下一状态将转变为“生命”(代表繁衍过程),否则继续空着.
游戏中的所有生命棋子依据上述确定的局部规则作同步更新,一代繁殖一代地进行着。
用C++进行摸拟
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] ) {i--;continue;} else cells[m] = 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; }
相关文章推荐
- Linux C函数参考手册(PDF版)
- 书评:《算法之美( Algorithms to Live By )》
- 动易2006序列号破解算法公布
- C# partial关键字说明
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- Lua教程(十七):C API简介
- 简单谈谈lua和c的交互
- 超大数据量存储常用数据库分表分库算法总结
- C#数据结构与算法揭秘二
- C#冒泡法排序算法实例分析
- 算法练习之从String.indexOf的模拟实现开始
- C#算法之关于大牛生小牛的问题
- C#中的委托数据类型简介
- C#编写的艺术字类实例代码
- C#实现打造气泡屏幕保护效果
- C#实现的算24点游戏算法实例分析
- 举例讲解C#编程中委托的实例化使用
- 使用C#代码获取存储过程返回值