C++使用class 制作生命游戏
时间: 2024-04-29 17:21:48 浏览: 87
c++实现lifegame
生命游戏是一种细胞自动机,它由一个二维的网格组成,每个网格可以存在或者不存在一个细胞。这些细胞根据一组简单的规则来演化。
下面是一个使用C++中的class制作生命游戏的示例代码:
```c++
#include <iostream>
#include <vector>
#include <cstdlib>
#include <ctime>
// 生命游戏类
class LifeGame {
public:
// 构造函数
LifeGame(int size) : size(size) {
// 初始化二维网格
for (int i = 0; i < size; ++i) {
grid.emplace_back(size, false);
}
}
// 随机初始化
void init() {
srand((unsigned int)time(NULL));
for (int i = 0; i < size; ++i) {
for (int j = 0; j < size; ++j) {
grid[i][j] = rand() % 2 == 0;
}
}
}
// 打印当前状态
void print() {
for (int i = 0; i < size; ++i) {
for (int j = 0; j < size; ++j) {
std::cout << (grid[i][j] ? "*" : ".");
}
std::cout << std::endl;
}
}
// 演化一次
void evolve() {
// 复制当前状态
std::vector<std::vector<bool>> next = grid;
// 对于每个细胞
for (int i = 0; i < size; ++i) {
for (int j = 0; j < size; ++j) {
// 统计周围存活细胞数
int count = 0;
for (int x = -1; x <= 1; ++x) {
for (int y = -1; y <= 1; ++y) {
if (x == 0 && y == 0) continue;
int nx = i + x;
int ny = j + y;
if (nx < 0 || nx >= size || ny < 0 || ny >= size) continue;
if (grid[nx][ny]) ++count;
}
}
// 根据规则判断演化后的状态
if (grid[i][j]) {
if (count < 2 || count > 3) next[i][j] = false;
} else {
if (count == 3) next[i][j] = true;
}
}
}
// 更新状态
grid = std::move(next);
}
private:
int size;
std::vector<std::vector<bool>> grid;
};
int main() {
LifeGame game(10);
game.init();
game.print();
for (int i = 0; i < 10; ++i) {
game.evolve();
game.print();
}
return 0;
}
```
在这个示例代码中,我们使用了C++中的class来实现生命游戏。我们首先定义了一个LifeGame类,它包含一个二维的bool类型的网格,表示每个细胞的存活状态。我们还定义了一些方法来初始化、打印和演化生命游戏。
在演化生命游戏时,我们首先复制当前状态,然后对于每个细胞,统计周围存活细胞数,并根据规则判断演化后的状态。最后,更新状态。
在main函数中,我们创建了一个大小为10的生命游戏对象,并使用随机数来初始化它。然后,我们演化了10次,并在每次演化后打印当前状态。
阅读全文