生命游戏使用C++类和对象以及easyx图形库实现
时间: 2023-12-13 13:05:40 浏览: 68
生命游戏是一种基于细胞自动机的模拟游戏,每个细胞只有两种状态:死亡或存活,它们根据周围的细胞状态来演化。下面是使用C++类和对象以及easyx图形库实现的生命游戏:
首先,我们需要定义一个cell类来表示每个细胞:
```c++
class cell {
public:
int x, y; // 细胞坐标
bool alive; // 细胞状态,true表示存活,false表示死亡
cell(int _x, int _y, bool _alive) {
x = _x;
y = _y;
alive = _alive;
}
};
```
然后,我们需要定义一个board类来表示整个生命游戏的棋盘:
```c++
class board {
public:
vector<cell> cells; // 存储所有的细胞
void init(int width, int height); // 初始化棋盘
void draw(); // 绘制棋盘
void update(); // 更新细胞状态
};
```
在init函数中,我们随机生成一些细胞,用draw函数将所有细胞绘制出来,用update函数根据规则更新细胞状态。
```c++
void board::init(int width, int height) {
for (int i = 0; i < width; i++) {
for (int j = 0; j < height; j++) {
bool alive = rand() % 2 == 0;
cell c(i, j, alive);
cells.push_back(c);
}
}
}
void board::draw() {
for (auto c : cells) {
if (c.alive) {
setfillcolor(WHITE);
} else {
setfillcolor(BLACK);
}
solidrectangle(c.x * CELL_SIZE, c.y * CELL_SIZE, (c.x + 1) * CELL_SIZE, (c.y + 1) * CELL_SIZE);
}
}
void board::update() {
vector<cell> new_cells;
for (auto c : cells) {
int count = 0;
for (auto n : cells) {
if (abs(n.x - c.x) <= 1 && abs(n.y - c.y) <= 1 && !(n.x == c.x && n.y == c.y)) {
if (n.alive) {
count++;
}
}
}
bool alive = false;
if (count == 3) {
alive = true;
} else if (count == 2 && c.alive) {
alive = true;
}
cell nc(c.x, c.y, alive);
new_cells.push_back(nc);
}
cells = new_cells;
}
```
在main函数中,我们初始化easyx图形库,创建一个board对象,然后在一个循环中不断调用draw和update函数:
```c++
int main() {
initgraph(WINDOW_WIDTH, WINDOW_HEIGHT);
board b;
b.init(WIDTH, HEIGHT);
while (true) {
b.draw();
b.update();
Sleep(50);
}
closegraph();
return 0;
}
```
这样,我们就成功地使用C++类和对象以及easyx图形库实现了生命游戏。
阅读全文