手把手教你用ipycanvas实现Conway‘s Game of Life生命游戏
手把手教你用ipycanvas实现Conways Game of Life生命游戏【免费下载链接】ipycanvasInteractive Canvas in Jupyter项目地址: https://gitcode.com/gh_mirrors/ip/ipycanvasipycanvas是一款强大的Jupyter交互式画布工具能帮助开发者轻松创建动态图形和交互式应用。本文将带你快速掌握如何使用ipycanvas实现经典的Conways Game of Life生命游戏无需复杂编程知识只需简单几步即可拥有自己的生命演化模拟系统。准备工作安装ipycanvas的最快方法开始之前我们需要先安装ipycanvas。对于新手用户推荐使用pip或conda这两种简单方式使用pip安装推荐pip install ipycanvas使用conda安装conda install -c conda-forge ipycanvas如果你想进行开发或贡献代码可以参考开发安装指南详见docs/installation.rst。生命游戏简介让细胞自动演化的神奇规则 Conways Game of Life是由英国数学家约翰·康威在1970年发明的细胞自动机。它由一个二维网格组成每个细胞有存活或死亡两种状态根据以下简单规则演化存活规则当一个存活细胞周围有2-3个存活邻居时它会继续存活诞生规则当一个死亡细胞周围恰好有3个存活邻居时它会变成存活状态死亡规则其他情况下细胞会死亡或保持死亡状态这些简单规则能产生极其复杂的演化模式从稳定结构到周期性震荡甚至能模拟移动的滑翔机图使用ipycanvas实现的Conways Game of Life生命游戏界面展示了多种细胞模式的演化过程实现步骤从0到1创建生命游戏第一步导入必要的库首先我们需要导入ipycanvas和其他辅助库from time import sleep import numpy as np from ipycanvas import RoughCanvas, hold_canvas这里使用RoughCanvas可以创建具有手绘风格的图形让我们的生命游戏看起来更有艺术感第二步实现生命游戏核心逻辑接下来我们需要实现生命游戏的核心演化函数life_step它会根据当前细胞状态计算下一代状态def life_step(x): Game of life step nbrs_count sum(np.roll(np.roll(x, i, 0), j, 1) for i in (-1, 0, 1) for j in (-1, 0, 1) if (i ! 0 or j ! 0)) return (nbrs_count 3) | (x (nbrs_count 2))这个函数使用了numpy的数组操作来高效计算每个细胞的邻居数量这是处理大型网格的关键第三步创建绘制函数然后我们需要创建一个绘制函数用于在画布上绘制细胞状态def draw(x, canvas, colorblack): with hold_canvas(canvas): canvas.clear() # 绘制背景 canvas.fill_style #FFF0C9 canvas.stroke_style white canvas.rough_fill_style solid canvas.fill_rect(-10, -10, canvas.width 10, canvas.height 10) # 绘制存活细胞 canvas.rough_fill_style cross-hatch canvas.fill_style color canvas.stroke_style color living_cells np.where(x) rects_x living_cells[0] * n_pixels rects_y living_cells[1] * n_pixels canvas.fill_rects(rects_x, rects_y, n_pixels) canvas.stroke_rects(rects_x, rects_y, n_pixels)第四步设置初始状态并运行模拟最后我们设置初始细胞状态这里使用经典的滑翔机枪模式并运行模拟# 创建初始滑翔机枪模式 glider_gun [ [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0], # 更多初始模式行... ] x np.zeros((50, 70), dtypebool) x[1:10,1:37] glider_gun # 创建画布 n_pixels 15 canvas RoughCanvas(widthx.shape[0]*n_pixels, heightx.shape[1]*n_pixels) canvas.fill_style #FFF0C9 canvas.stroke_style white canvas.fill_rect(0, 0, canvas.width, canvas.height) # 显示画布并运行模拟 draw(x, canvas, #5770B3) display(canvas) for _ in range(100): x life_step(x) draw(x, canvas, #5770B3) sleep(0.1)完整的代码示例可以在docs/conways_game_of_life.ipynb中找到。探索更多让你的生命游戏更有趣 尝试不同的初始模式除了滑翔机枪你还可以尝试其他经典模式方块稳定不变的2x2方块** blinker**周期性震荡的3个细胞太空船能在网格中移动的模式调整参数获得不同效果通过修改以下参数你可以获得完全不同的视觉效果n_pixels细胞大小color细胞颜色尝试#FF6B6B或#4ECDC4sleep(0.1)演化速度值越小速度越快rough_fill_style填充风格尝试hachure或zigzag互动功能扩展你还可以利用ipycanvas的交互功能添加鼠标点击来手动创建或删除细胞使用on_mouse_down事件检测鼠标点击在点击位置切换细胞状态总结从简单规则到复杂系统的奇妙旅程通过本文的教程你已经学会了如何使用ipycanvas创建Conways Game of Life生命游戏。这个项目展示了如何将简单规则转化为复杂系统以及ipycanvas在创建交互式科学可视化方面的强大能力。无论你是编程新手还是有经验的开发者ipycanvas都能帮助你轻松创建各种精彩的交互式图形应用。现在就动手尝试修改代码探索生命游戏中无穷无尽的有趣模式吧想要了解更多ipycanvas的高级功能可以查阅官方文档docs/index.rst里面有关于动画、事件处理、3D绘图等更多精彩内容。【免费下载链接】ipycanvasInteractive Canvas in Jupyter项目地址: https://gitcode.com/gh_mirrors/ip/ipycanvas创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

多尺度形态学在眼前节组织分割中的实践与优化

多尺度形态学在眼前节组织分割中的实践与优化

1. 项目背景与核心价值眼前节组织分割在眼科临床诊断和术前规划中具有关键作用。传统分割方法往往面临边缘模糊、对比度低等挑战,而多尺度形态学方法通过模拟人眼视觉系统的层次化处理机制,能够有效捕捉从宏观到微观的组织结构特征。我在青光眼筛查项目中…

2026/10/14 6:20:53 阅读更多 →
【架构实战】APISIX落地实战:云原生时代的动态网关

【架构实战】APISIX落地实战:云原生时代的动态网关

一、那次"改个路由要重启网关"的事故 2022年,我们的网关还是 Nginx Lua 手写的那一套。 某次大促前,运营临时要调整灰度比例:把 5% 的流量切到新版本。 我改了 Nginx 配置,执行 nginx -s reload。 结果:全站…

2026/10/10 13:40:49 阅读更多 →
二叉堆详解:原理、实现与应用

二叉堆详解:原理、实现与应用

1. 什么是二叉堆二叉堆(Binary Heap)是一种特殊的完全二叉树数据结构,它满足堆性质:对于最大堆,每个节点的值都大于或等于其子节点的值;对于最小堆,每个节点的值都小于或等于其子节点的值。二叉…

2026/10/11 1:14:30 阅读更多 →

最新新闻

自动化测试与持续集成中的Git实战:分支策略、提交规范与Tag管理

自动化测试与持续集成中的Git实战:分支策略、提交规范与Tag管理

先说一个很常见的现象:很多团队的自动化测试跑不起来,或者跑起来天天报错,根子不在测试代码,而在 Git 版本控制配合上。版本一乱、分支一多、提交一乱,持续集成就成了摆设。这也就是为什么我想把“自动化测试”和“持续…

2026/10/14 6:22:26 阅读更多 →
Java二分查找从原理到边界处理:手写无懈可击的算法

Java二分查找从原理到边界处理:手写无懈可击的算法

开头聊到二分查找(Binary Search),很多人的第一反应是“这不就是面试必考的基础题吗”,但真正能一次写对的人其实很少。这个算法核心思想说来就一句话——在一个有序数组里,每次拿中间值和目标比较,把搜索范…

2026/10/14 6:22:26 阅读更多 →
Blender 3MF插件:解决3D打印数据失真与工作流断层问题

Blender 3MF插件:解决3D打印数据失真与工作流断层问题

简介:本资源是面向Blender三维建模与3D打印开发者的Blender3mfFormat插件源码包及配套技术指南,专为解决Blender原生不支持3MF格式导入导出的问题而设计,适用于2.80及以上版本的Python环境,特别适合需对接工业级3D打印工作流的软件…

2026/10/14 6:22:26 阅读更多 →
4. 【具身智能】多 Agent 具身智能家庭管家机器人系统方案

4. 【具身智能】多 Agent 具身智能家庭管家机器人系统方案

1 前言当前市面上家庭智能设备大多是单点能力产品:扫地机器人只负责清扫、家用摄像头仅承担安防监控、语音音箱只能完成简单对话。各类设备相互独立、数据不通,无法协同完成复合型家庭任务。本文设计一套多 Agent 家庭管家机器人集群方案,融合…

2026/10/14 6:22:26 阅读更多 →
AI科研日报怎么做?从信息降噪到筛选逻辑的完整指南

AI科研日报怎么做?从信息降噪到筛选逻辑的完整指南

1. 一份“AI科研日报”到底在解决什么问题每天早上打开手机,各种学术动态、模型发布、论文预印本、开源项目更新像潮水一样涌过来。我做过一段时间的信息聚合实验,光是arXiv上cs.CL、cs.CV、cs.LG三个分类,一天新增的预印本就能轻松超过三百篇…

2026/10/14 6:22:26 阅读更多 →
海南旅游推荐系统:混合算法与实时数据处理实践

海南旅游推荐系统:混合算法与实时数据处理实践

1. 项目背景与核心价值海南作为国内热门旅游目的地,每年吸引数千万游客。但面对庞大的景区、酒店、餐饮等旅游资源,游客常常陷入"选择困难症"——攻略信息过时、个性化推荐缺失、行程规划不合理等问题普遍存在。这正是我们开发这套旅游推荐系统…

2026/10/14 6:21:26 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →