生命游戏C++
时间: 2023-07-01 18:10:06 浏览: 34
生命游戏是一种模拟细胞自动机的游戏。以下是一个简单的 C++ 实现:
```c++
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <ctime>
using namespace std;
const int N = 50; // 棋盘大小
const int T = 100; // 迭代次数
int a[N][N], b[N][N]; // 两个棋盘,用于交替更新
int dir[][2] = {{-1,-1},{-1,0},{-1,1},{0,-1},{0,1},{1,-1},{1,0},{1,1}}; // 八个方向
void init() { // 初始化
srand(time(NULL));
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
a[i][j] = rand() % 2;
b[i][j] = 0;
}
}
}
void print() { // 输出棋盘
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
if (a[i][j]) cout << "*";
else cout << " ";
}
cout << endl;
}
}
int count(int x, int y) { // 统计周围细胞数
int cnt = 0;
for (int i = 0; i < 8; i++) {
int nx = x + dir[i][0];
int ny = y + dir[i][1];
if (nx >= 0 && nx < N && ny >= 0 && ny < N && a[nx][ny]) cnt++;
}
return cnt;
}
void update() { // 更新棋盘
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
int cnt = count(i, j);
if (a[i][j]) {
if (cnt <= 1 || cnt >= 4) b[i][j] = 0;
else b[i][j] = 1;
} else {
if (cnt == 3) b[i][j] = 1;
else b[i][j] = 0;
}
}
}
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
a[i][j] = b[i][j];
}
}
}
int main() {
init();
for (int i = 0; i < T; i++) {
print();
update();
system("cls"); // 清屏,Windows下可用
// system("clear"); // 清屏,Linux下可用
}
return 0;
}
```
这个程序使用了两个棋盘,交替更新。每次迭代时,根据周围细胞的数量,更新每个细胞的状态。最后输出棋盘,并清屏(在 Windows 下使用 `system("cls")`,在 Linux 下使用 `system("clear")`)。