You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用FuncAnimation实现康威生命游戏动画并导出MP4文件

原代码错误点

  1. 没有导入matplotlib.animation模块
  2. FuncAnimation默认会将当前帧序号作为第一个参数传入更新函数,你写的conway_step参数顺序不匹配
  3. 更新函数没有修改画布上的图像对象,也没有返回需要重绘的元素
  4. 没有配置导出MP4所需的writer参数

完整可运行修改版代码

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.animation import FuncAnimation, FFMpegWriter

def initialize(size):
    # 移除原函数里的弹窗逻辑,统一由动画模块控制渲染
    return np.random.choice([0, 1], size*size, p=[0.8, 0.2]).reshape(size, size)

def conway_step(frame, img, grid, size):
    new_grid = np.zeros_like(grid)
    for x in range(size):
        for y in range(size):
            total = sum([grid[(x+i) % size, (y+j) % size] for i in range(-1, 2) for j in range(-1, 2)])
            if grid[x, y] == 1 and total-1 in (2, 3):
                new_grid[x, y] = 1
            elif grid[x, y] == 0 and total == 3:
                new_grid[x, y] = 1
            else:
                new_grid[x, y] = 0
    # 更新画布上的图像数据
    img.set_data(new_grid)
    # 同步更新grid供下一帧计算使用
    grid[:] = new_grid[:]
    # 返回修改后的渲染元素,开启blit优化时必须返回
    return img,

def conway(size=100, frames=30, interval=200, save_mp4=False):
    grid = initialize(size)
    fig, ax = plt.subplots(figsize=(8,8))
    # 隐藏坐标轴更美观,用黑白配色符合生命游戏显示习惯
    ax.axis('off')
    img = ax.imshow(grid, cmap='binary')
    
    ani = FuncAnimation(
        fig,
        conway_step,
        fargs=(img, grid, size), # 传递给更新函数的额外参数
        frames=frames, # 总动画帧数
        interval=interval, # 帧间隔,单位毫秒
        blit=True # 开启局部重绘优化,大幅提升流畅度
    )

    # 导出MP4逻辑,需要提前安装ffmpeg并配置到系统环境变量
    if save_mp4:
        writer = FFMpegWriter(fps=1000/interval)
        ani.save('conway_game.mp4', writer=writer, dpi=150)

    plt.show()
    return ani

if __name__ == "__main__":
    # save_mp4设为True即可导出MP4文件到当前目录
    conway(size=100, frames=30, interval=200, save_mp4=False)

注意事项

  • 导出MP4需要提前安装ffmpeg工具,各操作系统都可以通过对应包管理器直接安装,配置到系统环境变量后即可正常调用
  • 可以通过修改frames参数调整总动画时长,修改interval参数调整动画播放速度
  • 如果不需要导出视频,只需要在线预览,可以删除FFMpegWriter相关的代码逻辑

内容的提问来源于stack exchange,提问作者Brais Romero

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 16:15:05