用c++写生命游戏,要求可以设置网格大小。 模拟运行,直到用户触发停止信号。
时间: 2024-03-06 21:50:04 浏览: 39
好的,我可以为你提供一份C++代码来实现生命游戏。
首先,我们需要定义一个网格类,来表示生命游戏的游戏板。这个网格类需要具有以下基本属性和方法:
- 网格大小:宽度和高度
- 网格元素:每个网格元素可以是生命细胞或者空格
- 初始化:根据给定的宽度和高度,随机初始化网格元素
- 更新:根据生命游戏的规则,更新网格元素状态
- 输出:将当前网格元素状态输出到屏幕上
代码如下:
```cpp
#include <iostream>
#include <vector>
#include <cstdlib>
#include <ctime>
#include <chrono>
#include <thread>
class Grid {
public:
Grid(int width, int height) : width_(width), height_(height) {
grid_.resize(width_ * height_);
for (int i = 0; i < grid_.size(); ++i) {
grid_[i] = rand() % 2;
}
}
void update() {
std::vector<int> new_grid(grid_.size());
for (int i = 0; i < height_; ++i) {
for (int j = 0; j < width_; ++j) {
int count = live_neighbors(j, i);
int index = i * width_ + j;
if (count == 3 || (count == 2 && grid_[index])) {
new_grid[index] = 1;
} else {
new_grid[index] = 0;
}
}
}
grid_ = new_grid;
}
void print() {
for (int i = 0; i < height_; ++i) {
for (int j = 0; j < width_; ++j) {
int index = i * width_ + j;
if (grid_[index]) {
std::cout << "#";
} else {
std::cout << " ";
}
}
std::cout << std::endl;
}
}
private:
int live_neighbors(int x, int y) {
int count = 0;
for (int j = -1; j <= 1; ++j) {
for (int i = -1; i <= 1; ++i) {
int col = (x + i + width_) % width_;
int row = (y + j + height_) % height_;
int index = row * width_ + col;
count += grid_[index];
}
}
count -= grid_[y * width_ + x];
return count;
}
int width_;
int height_;
std::vector<int> grid_;
};
int main() {
srand(time(nullptr));
int width, height;
std::cout << "Enter grid width: ";
std::cin >> width;
std::cout << "Enter grid height: ";
std::cin >> height;
Grid grid(width, height);
while (true) {
grid.print();
std::this_thread::sleep_for(std::chrono::milliseconds(500));
grid.update();
}
return 0;
}
```
这份代码实现了生命游戏的主要逻辑,其中 `Grid` 类表示生命游戏的游戏板。在主函数中,我们先获取用户输入的网格大小,然后创建一个 `Grid` 对象,并在一个无限循环中不断输出网格状态并更新网格状态。我们使用 `<chrono>` 头文件和 `std::this_thread::sleep_for` 函数来让程序暂停一段时间,以便我们可以观察生命游戏的演变过程。你可以自行修改 `sleep_for` 函数的参数来调整输出速度。
希望这份代码对你有所帮助!
阅读全文