Python实现生命游戏的示例代码(GameofLife)攻略
生命游戏是一种经典的细胞自动机,由英国数学家约翰·何顿·康威于1970年发明。在这个游戏中,每个细胞都有两种状态:存活或死亡。游戏的规则非常简单:在每个时间步,每个细胞的状态都会根据其周围的细胞状态发生变化。在本攻略中,我们将介绍如何使用Python实现生命游戏,并提供两个示例说明。
实现思路
生命游戏的实现思路如下:
- 初始化一个二维数组,表示细胞的状态。
- 在每个时间步,遍历每个细胞,根据其周围的细胞状态计算出新的状态。
- 更新细胞的状态。
示例代码
以下是Python实现生命游戏的示例代码:
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
# 初始化细胞状态
def init_board(N):
board = np.zeros((N, N))
for i in range(N):
for j in range(N):
if np.random.rand() > 0.5:
board[i][j] = 1
return board
# 计算细胞的新状态
def update_board(board):
N = len(board)
new_board = np.zeros((N, N))
for i in range(N):
for j in range(N):
# 计算周围细胞的状态
neighbors = [(i-1, j-1), (i-1, j), (i-1, j+1), (i, j-1), (i, j+1), (i+1, j-1), (i+1, j), (i+1, j+1)]
count = 0
for x, y in neighbors:
if x >= 0 and x < N and y >= 0 and y < N and board[x][y] == 1:
count += 1
# 根据规则更新细胞状态
if board[i][j] == 1 and (count < 2 or count > 3):
new_board[i][j] = 0
elif board[i][j] == 0 and count == 3:
new_board[i][j] = 1
else:
new_board[i][j] = board[i][j]
return new_board
# 动画函数
def animate(i):
global board
board = update_board(board)
mat.set_data(board)
return [mat]
# 初始化细胞状态
board = init_board(50)
# 绘制动画
fig, ax = plt.subplots()
mat = ax.matshow(board)
ani = animation.FuncAnimation(fig, animate, interval=50, save_count=50)
plt.show()
在这个示例中,我们使用了numpy和matplotlib库实现了生命游戏。我们定义了init_board函数来初始化细胞状态。我们使用了numpy的zeros函数创建了一个N×N的二维数组,并使用随机数初始化了细胞的状态。我们定义了update_board函数来计算细胞的新状态。我们遍历了每个细胞,并计算了周围细胞的状态。根据生命游戏的规则,我们更新了细胞的状态。我们定义了animate函数来实现动画效果。我们使用了matplotlib的matshow函数来绘制细胞状态,并使用animation库实现了动画效果。
示例说明
示例1:改变细胞状态
在这个示例中,我们将演示如何改变细胞的状态。我们可以通过修改init_board函数来改变细胞的初始状态。例如,我们可以将所有细胞的状态都设置为1,如下所示:
def init_board(N):
board = np.ones((N, N))
return board
在这个示例中,我们使用了numpy的ones函数将所有细胞的状态都设置为1。
示例2:改变细胞的规则
在这个示例中,我们将演示如何改变细胞的规则。我们可以通过修改update_board函数来改变细胞的规则。例如,我们可以将细胞的生存条件改为周围有2个或3个细胞时存活,如下所示:
def update_board(board):
N = len(board)
new_board = np.zeros((N, N))
for i in range(N):
for j in range(N):
# 计算周围细胞的状态
neighbors = [(i-1, j-1), (i-1, j), (i-1, j+1), (i, j-1), (i, j+1), (i+1, j-1), (i+1, j), (i+1, j+1)]
count = 0
for x, y in neighbors:
if x >= 0 and x < N and y >= 0 and y < N and board[x][y] == 1:
count += 1
# 根据规则更新细胞状态
if board[i][j] == 1 and (count == 2 or count == 3):
new_board[i][j] = 1
elif board[i][j] == 0 and count == 3:
new_board[i][j] = 1
else:
new_board[i][j] = 0
return new_board
在这个示例中,我们修改了if语句的条件,将细胞的生存条件改为周围有2个或3个细胞时存活。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python实现生命游戏的示例代码(Game of Life) - Python技术站