当前位置: 首页 > news >正文

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • ubuntu安装nginx
  • chatgpt和语言学
  • 【鸿蒙基础系列】鸿蒙基础组件
  • C# 中的抽象类和抽象方法
  • RK3576 芯片介绍
  • Android笔试面试题AI答之Kotlin(9)
  • Cookie 和本地存储,浏览器缓存
  • 三级_网络技术_18_路由器的配置及使用
  • HCIP-HarmonyOS Application Developer 习题(三)
  • Linux中ES的安装
  • 【信创】双系统下删除Windows只保留麒麟系统
  • Amazon VPC基础指南
  • Docker——常用命令
  • c语言第18天笔记
  • 第11章 第3节 软件测试的基本概念(软件评测师)
  • 【css3】浏览器内核及其兼容性
  • Android单元测试 - 几个重要问题
  • CentOS学习笔记 - 12. Nginx搭建Centos7.5远程repo
  • CSS 三角实现
  • docker-consul
  • IDEA常用插件整理
  • log4j2输出到kafka
  • nfs客户端进程变D,延伸linux的lock
  • spark本地环境的搭建到运行第一个spark程序
  • Terraform入门 - 3. 变更基础设施
  • webgl (原生)基础入门指南【一】
  • Webpack 4 学习01(基础配置)
  • 阿里云Kubernetes容器服务上体验Knative
  • 多线程事务回滚
  • 给第三方使用接口的 URL 签名实现
  • 经典排序算法及其 Java 实现
  • 前端技术周刊 2018-12-10:前端自动化测试
  • 小程序测试方案初探
  • 一个SAP顾问在美国的这些年
  • 在 Chrome DevTools 中调试 JavaScript 入门
  • 7行Python代码的人脸识别
  • 关于Android全面屏虚拟导航栏的适配总结
  • 进程与线程(三)——进程/线程间通信
  • 扩展资源服务器解决oauth2 性能瓶颈
  • #14vue3生成表单并跳转到外部地址的方式
  • $L^p$ 调和函数恒为零
  • (1)STL算法之遍历容器
  • (10)工业界推荐系统-小红书推荐场景及内部实践【排序模型的特征】
  • (20)目标检测算法之YOLOv5计算预选框、详解anchor计算
  • (c语言)strcpy函数用法
  • (leetcode学习)236. 二叉树的最近公共祖先
  • (ros//EnvironmentVariables)ros环境变量
  • (附源码)ssm经济信息门户网站 毕业设计 141634
  • (转)微软牛津计划介绍——屌爆了的自然数据处理解决方案(人脸/语音识别,计算机视觉与语言理解)...
  • ***通过什么方式***网吧
  • .gitignore不生效的解决方案
  • .NET CORE Aws S3 使用
  • .NET版Word处理控件Aspose.words功能演示:在ASP.NET MVC中创建MS Word编辑器
  • .NET基础篇——反射的奥妙
  • .NET开源项目介绍及资源推荐:数据持久层 (微软MVP写作)