您的位置:首页 > 教育 > 锐评 > python实现生命游戏

python实现生命游戏

2024/10/6 2:20:59 来源:https://blog.csdn.net/lycwhu/article/details/141226360  浏览:    关键词:python实现生命游戏

“生命游戏”(Conway’s Game of Life)是由数学家约翰·康威提出的一种零玩家游戏。它是一个细胞自动机,由一组简单的规则决定每个细胞的状态。以下是用Python实现“生命游戏”的代码示例:

Python代码实现

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animationdef initialize_grid(size):"""初始化游戏的网格,随机设置细胞状态(0为死,1为生)"""return np.random.choice([0, 1], size*size, p=[0.8, 0.2]).reshape(size, size)def update_grid(grid):"""根据生命游戏规则更新网格"""# 创建一个副本,用于计算邻居new_grid = grid.copy()size = grid.shape[0]# 遍历每个细胞for i in range(size):for j in range(size):# 计算该细胞周围的活细胞数total = int((grid[i, (j-1)%size] + grid[i, (j+1)%size] +grid[(i-1)%size, j] + grid[(i+1)%size, j] +grid[(i-1)%size, (j-1)%size] + grid[(i-1)%size, (j+1)%size] +grid[(i+1)%size, (j-1)%size] + grid[(i+1)%size, (j+1)%size]))# 生命游戏规则if grid[i, j] == 1:if (total < 2) or (total > 3):new_grid[i, j] = 0  # 死亡else:if total == 3:new_grid[i, j] = 1  # 诞生return new_griddef animate(frame, grid, plot):"""更新动画帧"""grid[:] = update_grid(grid)plot.set_data(grid)return plot,def run_game_of_life(size=50, interval=200):"""运行生命游戏"""grid = initialize_grid(size)fig, ax = plt.subplots()plot = ax.imshow(grid, cmap='binary')ani = animation.FuncAnimation(fig, animate, fargs=(grid, plot), frames=10, interval=interval, save_count=50)plt.show()# 运行游戏
run_game_of_life(size=50, interval=200)

代码说明

  1. initialize_grid(size): 生成一个随机的初始网格,网格中的每个细胞随机设置为活(1)或死(0)。

  2. update_grid(grid): 根据生命游戏的规则更新网格状态:

    • 规则1: 任何活细胞,如果有两个或三个邻居仍然存活,否则它将死亡。
    • 规则2: 任何死细胞,如果有恰好三个邻居活着,则该细胞诞生。
  3. animate(frame, grid, plot): 这个函数是用来逐帧更新动画的。

  4. run_game_of_life(size=50, interval=200): 这是运行游戏的主要函数,它设置了网格大小和动画帧之间的间隔时间。最终会显示一个动画,演示生命游戏的过程。

运行代码

当你运行run_game_of_life()函数时,将会显示一个动态的图像,展示细胞的生与死的演化过程。size参数决定网格的大小,interval参数控制动画的速度。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com