用c++写一个生命游戏
时间: 2023-12-25 13:54:24 浏览: 34
生命游戏(Conway's Game of Life)是一种细胞自动机,由英国数学家约翰·康威于1970年发明。游戏中,每个细胞的状态只有两种:存活或死亡。这些细胞在二维方格中排列,它们的状态受它们周围8个相邻细胞的状态影响。按照一定的规则进行迭代,可以模拟出各种有趣的模式。
下面是一个用 C++ 实现生命游戏的示例代码:
```cpp
#include <iostream>
#include <vector>
#include <cstdlib>
#include <ctime>
using namespace std;
const int ROWS = 20;
const int COLS = 20;
// 初始化二维数组
void init(vector<vector<int>>& board) {
srand(time(nullptr));
for (int i = 0; i < ROWS; i++) {
vector<int> row;
for (int j = 0; j < COLS; j++) {
int val = rand() % 2;
row.push_back(val);
}
board.push_back(row);
}
}
// 输出当前状态
void print(vector<vector<int>>& board) {
for (int i = 0; i < ROWS; i++) {
for (int j = 0; j < COLS; j++) {
if (board[i][j] == 1) {
cout << "* ";
} else {
cout << ". ";
}
}
cout << endl;
}
}
// 计算某个细胞周围的存活细胞数
int count_neighbors(vector<vector<int>>& board, int row, int col) {
int count = 0;
for (int i = row - 1; i <= row + 1; i++) {
for (int j = col - 1; j <= col + 1; j++) {
if (i >= 0 && i < ROWS && j >= 0 && j < COLS && !(i == row && j == col)) {
count += board[i][j];
}
}
}
return count;
}
// 根据规则更新状态
void update(vector<vector<int>>& board) {
vector<vector<int>> new_board;
for (int i = 0; i < ROWS; i++) {
vector<int> row;
for (int j = 0; j < COLS; j++) {
int neighbors = count_neighbors(board, i, j);
if (board[i][j] == 1 && (neighbors < 2 || neighbors > 3)) {
row.push_back(0); // 死亡
} else if (board[i][j] == 0 && neighbors == 3) {
row.push_back(1); // 诞生
} else {
row.push_back(board[i][j]); // 维持原状
}
}
new_board.push_back(row);
}
board = new_board;
}
int main() {
vector<vector<int>> board;
init(board);
while (true) {
system("cls"); // 清屏
print(board);
update(board);
cout << "Press Enter to continue..." << endl;
cin.get();
}
return 0;
}
```
这个程序会随机生成一个 20x20 的二维数组,用 1 表示存活细胞,用 0 表示死亡细胞。然后,每次迭代都会根据生命游戏的规则更新状态,并输出当前的二维数组。按下 Enter 键可以继续迭代。