请用c++写一个生命游戏可以暂停和恢复仿真
时间: 2023-12-18 10:05:41 浏览: 140
好的,我可以帮您用 C++ 写一个生命游戏,其中包含暂停和恢复仿真的功能。
首先,让我们来了解一下生命游戏。生命游戏是一种模拟细胞自动机的游戏,由英国数学家约翰·康威在1970年发明。生命游戏中,每个细胞都有两种状态:存活或死亡。游戏按照一定的规则演进,每次演进都会根据细胞周围的状态来判断它下一次的状态。
现在让我们开始编写代码。我们需要使用 `iostream` 和 `Windows.h` 库来实现控制台输出和暂停程序。我们还需要定义一些常量,例如控制台大小、细胞大小和颜色等。
```c++
#include <iostream>
#include <Windows.h>
using namespace std;
// 定义常量
const int CONSOLE_WIDTH = 80;
const int CONSOLE_HEIGHT = 40;
const int CELL_SIZE = 2;
const char BG_COLOR = ' ';
const char CELL_COLOR = '*';
```
接下来,我们需要定义一个二维数组来存储细胞的状态。我们可以使用 `rand()` 函数来随机生成一些初始状态。为了方便起见,我们可以使用 `0` 表示死亡细胞,使用 `1` 表示存活细胞。
```c++
// 定义二维数组来存储细胞状态
const int rows = CONSOLE_HEIGHT / CELL_SIZE;
const int cols = CONSOLE_WIDTH / CELL_SIZE;
int grid[rows][cols];
void init_grid() {
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
grid[i][j] = rand() % 2;
}
}
}
```
现在我们可以开始实现生命游戏的规则。根据细胞周围的状态,我们可以使用以下规则来计算它下一次的状态:
- 如果一个存活细胞周围有 2 或 3 个存活细胞,则它下一次仍然存活。
- 如果一个存活细胞周围有少于 2 个存活细胞或多于 3 个存活细胞,则它下一次死亡。
- 如果一个死亡细胞周围恰好有 3 个存活细胞,则它下一次变成存活状态。
```c++
// 计算下一次的细胞状态
void next_generation() {
int new_grid[rows][cols] = { 0 };
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
int count = 0;
for (int x = -1; x <= 1; x++) {
for (int y = -1; y <= 1; y++) {
if (i + x >= 0 && i + x < rows &&
j + y >= 0 && j + y < cols &&
!(x == 0 && y == 0) &&
grid[i + x][j + y] == 1) {
count++;
}
}
}
if (grid[i][j] == 1) {
if (count == 2 || count == 3) {
new_grid[i][j] = 1;
}
}
else {
if (count == 3) {
new_grid[i][j] = 1;
}
}
}
}
memcpy(grid, new_grid, sizeof(new_grid));
}
```
现在我们可以使用 `system("cls")` 函数来清空控制台,使用 `Sleep()` 函数来暂停程序,以及使用 `kbhit()` 函数来检测键盘输入,以实现暂停和恢复仿真的功能。
```c++
// 游戏循环
void game_loop() {
bool paused = false;
while (true) {
// 处理键盘事件
if (kbhit()) {
char key = getch();
if (key == ' ') {
paused = !paused;
}
else if (key == 'q') {
break;
}
}
// 更新细胞状态
if (!paused) {
next_generation();
}
// 绘制游戏界面
system("cls");
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
if (grid[i][j] == 1) {
cout << CELL_COLOR << CELL_COLOR;
}
else {
cout << BG_COLOR << BG_COLOR;
}
}
cout << endl;
}
Sleep(100);
}
}
```
现在您已经拥有了一个带有暂停和恢复仿真功能的生命游戏!
阅读全文