生命游戏C++
时间: 2023-07-01 10:05:02 浏览: 47
生命游戏是一种经典的细胞自动机模拟游戏,其规则简单:每个细胞的生死状态由周围8个细胞的状态决定,规则如下:
- 如果一个细胞的周围有3个细胞是活的,则该细胞在下一个时刻变为活的(繁衍)
- 如果一个细胞的周围有2个细胞是活的,则该细胞的状态不变(稳定)
- 如果一个细胞的周围活细胞少于2个或者超过3个,则该细胞在下一个时刻死亡(死亡)
下面是C++实现生命游戏的代码:
```c++
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <ctime>
using namespace std;
const int ROW = 20, COL = 40;
char board[ROW + 2][COL + 2];
char temp_board[ROW + 2][COL + 2];
void init_board()
{
memset(board, '.', sizeof(board));
for(int i = 1; i <= ROW; i++)
{
for(int j = 1; j <= COL; j++)
{
if(rand() % 2 == 0)
board[i][j] = '.';
else
board[i][j] = '*';
}
}
}
void print_board()
{
for(int i = 1; i <= ROW; i++)
{
for(int j = 1; j <= COL; j++)
cout << board[i][j];
cout << endl;
}
cout << endl;
}
void update_board()
{
for(int i = 1; i <= ROW; i++)
{
for(int j = 1; j <= COL; j++)
{
int cnt = 0;
for(int k = -1; k <= 1; k++)
{
for(int l = -1; l <= 1; l++)
cnt += (board[i + k][j + l] == '*');
}
cnt -= (board[i][j] == '*');
if(cnt == 3)
temp_board[i][j] = '*';
else if(cnt == 2)
temp_board[i][j] = board[i][j];
else
temp_board[i][j] = '.';
}
}
memcpy(board, temp_board, sizeof(board));
}
int main()
{
srand(time(NULL));
init_board();
print_board();
for(int i = 1; i <= 100; i++)
{
update_board();
print_board();
}
return 0;
}
```
该代码实现了一个20x40的生命游戏,初始状态每个细胞有50%的概率是活的或死的。程序共运行100次,每次更新后打印出当前的状态。