生命游戏可以使用多种编程语言实现,这里提供两个Python示例,一个使用`numpy`和`matplotlib`制作动画,另一个使用`pygame`实现一个简单的控制台版本。
使用Python和`numpy`实现生命游戏
安装所需模块
```bash
pip install numpy matplotlib
```
代码实现
```python
import argparse
from enum import IntEnum
import matplotlib.pyplot as plt
import matplotlib.animation as animation
import numpy as np
定义细胞状态枚举
class State(IntEnum):
off = 0
on = 255
初始化游戏
def init():
global grid, new_grid
grid = np.random.choice([State.on, State.off], size=(N, N), p=[0.5, 0.5])
new_grid = np.zeros_like(grid)
计算邻居数量
def neighbors(x, y):
count = 0
for i in range(-1, 2):
for j in range(-1, 2):
if i == 0 and j == 0:
continue
if 0 <= x + i < N and 0 <= y + j < N:
count += grid[x + i][y + j]
return count
更新游戏状态
def update():
global grid, new_grid
new_grid = np.zeros_like(grid)
for x in range(N):
for y in range(N):
state = grid[x][y]
if state == State.on:
if neighbors(x, y) < 2 or neighbors(x, y) > 3:
new_grid[x][y] = State.off
else:
if neighbors(x, y) == 3:
new_grid[x][y] = State.on
绘制游戏
def draw(frame, img):
plt.clf()
plt.imshow(grid, cmap='gray')
plt.axis('off')
img.set_array(grid)
动画制作
def animate():
ani = animation.FuncAnimation(fig, update, frames=range(100), interval=50, blit=True)
plt.show()
主函数
if __name__ == "__main__":
parser = argparse.ArgumentParser(description="Conway's Game of Life")
parser.add_argument("-N", "--size", type=int, default=100, help="Grid size")
args = parser.parse_args()
N = args.size
init()
fig = plt.figure()
img = plt.imshow(grid, cmap='gray')
animate()
```
使用Python和`pygame`实现生命游戏
安装所需模块
```bash
pip install pygame
```