python实现生命游戏

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

Python代码实现

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation

def 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_grid

def 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参数控制动画的速度。

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值