生命游戏C++
时间: 2023-07-01 12:05:02 浏览: 117
生命游戏c++代码分享
5星 · 资源好评率100%
生命游戏是一个经典的细胞自动机模型,它由英国数学家约翰·康威于1970年发明。生命游戏的规则非常简单,它是基于一个二维的方格图,每个格子可以有两种状态:死亡或存活。每个格子的状态由它周围的8个格子的状态决定。具体的规则如下:
1. 如果一个活细胞周围的活细胞小于2个,则这个细胞死亡,模拟中用0表示死亡;
2. 如果一个活细胞周围的活细胞等于2个或3个,则这个细胞继续存活,模拟中用1表示存活;
3. 如果一个活细胞周围的活细胞大于3个,则这个细胞死亡,模拟中用0表示死亡;
4. 如果一个死亡细胞周围的活细胞等于3个,则这个细胞复活,模拟中用1表示存活。
下面是一个简单的C++实现:
```cpp
#include<iostream>
#include<cstdlib>
#include<ctime>
using namespace std;
const int ROW=20,COL=60; // 定义行和列的大小
int board[ROW][COL]; // 存储细胞状态的二维数组
void initBoard(){
srand(time(NULL)); // 随机数种子
for(int i=0;i<ROW;i++){
for(int j=0;j<COL;j++){
board[i][j]=rand()%2; // 随机生成细胞的状态
}
}
}
void printBoard(){
for(int i=0;i<ROW;i++){
for(int j=0;j<COL;j++){
if(board[i][j]) cout<<"*"; // 存活状态
else cout<<" "; // 死亡状态
}
cout<<endl;
}
}
int countLive(int x,int y){
int count=0;
for(int i=x-1;i<=x+1;i++){
for(int j=y-1;j<=y+1;j++){
if(i>=0 && i<ROW && j>=0 && j<COL && board[i][j]==1) count++; // 边界判断和统计活细胞数量
}
}
count-=board[x][y]; // 减去自身状态
return count;
}
void updateBoard(){
int newBoard[ROW][COL]; // 存储新一轮的细胞状态
for(int i=0;i<ROW;i++){
for(int j=0;j<COL;j++){
int liveCount=countLive(i,j); // 统计周围活细胞数量
if(board[i][j]){ // 细胞存活
if(liveCount<2 || liveCount>3) newBoard[i][j]=0; // 规则1和规则3
else newBoard[i][j]=1; // 规则2
}
else{ // 细胞死亡
if(liveCount==3) newBoard[i][j]=1; // 规则4
else newBoard[i][j]=0;
}
}
}
for(int i=0;i<ROW;i++){
for(int j=0;j<COL;j++){
board[i][j]=newBoard[i][j]; // 更新细胞状态
}
}
}
int main(){
initBoard();
for(int i=0;i<100;i++){ // 模拟100轮
printBoard();
cout<<"----------------------"<<endl;
updateBoard();
}
return 0;
}
```
这段代码实现了生命游戏的核心逻辑,它首先随机生成一个二维的细胞状态数组,然后模拟100轮生命游戏的过程,并输出每一轮的细胞状态。在每一轮中,它会根据规则统计每个细胞周围的活细胞数量,并根据规则更新细胞的状态。最后,它将新一轮的细胞状态更新到原来的数组中,进入下一轮模拟。
阅读全文