C++面向对象编写生命游戏
时间: 2023-07-01 18:13:16 浏览: 87
好的,生命游戏是一个经典的细胞自动机模拟游戏,下面是一个简单的C++面向对象实现:
```cpp
#include <iostream>
#include <vector>
using namespace std;
// 定义一个细胞类
class Cell {
public:
int x, y; // 细胞坐标
bool alive; // 细胞是否存活
Cell(int x, int y) : x(x), y(y), alive(false) {}
void setAlive(bool alive) {
this->alive = alive;
}
};
// 定义一个生命游戏类
class GameOfLife {
private:
int row, col; // 游戏界面大小
vector<vector<Cell>> board; // 游戏界面
public:
GameOfLife(int row, int col) : row(row), col(col) {
// 初始化游戏界面
board.resize(row, vector<Cell>(col, Cell(0, 0)));
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
board[i][j].x = i;
board[i][j].y = j;
}
}
}
// 初始化游戏界面,随机生成细胞的存活状态
void init() {
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
board[i][j].setAlive(rand() % 2);
}
}
}
// 显示游戏界面
void show() {
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
cout << (board[i][j].alive ? "*" : " ") << " ";
}
cout << endl;
}
}
// 计算每个细胞周围存活细胞数量
int countAliveNeighbors(int i, int j) {
int count = 0;
for (int r = i - 1; r <= i + 1; r++) {
for (int c = j - 1; c <= j + 1; c++) {
if (r >= 0 && r < row && c >= 0 && c < col) {
if (r != i || c != j) {
if (board[r][c].alive) {
count++;
}
}
}
}
}
return count;
}
// 更新游戏状态
void update() {
vector<vector<bool>> next(row, vector<bool>(col, false));
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
int count = countAliveNeighbors(i, j);
if (board[i][j].alive) {
if (count < 2 || count > 3) {
next[i][j] = false;
} else {
next[i][j] = true;
}
} else {
if (count == 3) {
next[i][j] = true;
} else {
next[i][j] = false;
}
}
}
}
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
board[i][j].setAlive(next[i][j]);
}
}
}
};
int main() {
int row = 20, col = 20;
GameOfLife game(row, col);
game.init();
while (true) {
game.show();
game.update();
system("cls"); // 清空控制台
}
return 0;
}
```
这里我们定义了一个细胞类Cell,包含细胞的坐标和是否存活状态,以及一个生命游戏类GameOfLife,包含游戏界面大小和细胞的二维向量board,以及游戏的初始化、显示、更新等方法。在主函数中,我们首先初始化游戏界面,然后循环显示游戏界面和更新游戏状态。
阅读全文