元胞自动机Python康威生命游戏

import pygame import sys from pygame.locals import * # 初始化Pygame pygame.init() # ===================== 配置参数 ===================== # 单元格大小(像素) CELL_SIZE = 20 # 网格行列数 GRID_COLS = 40 # 列数 GRID_ROWS = 30 # 行数 # 窗口尺寸 WINDOW_WIDTH = CELL_SIZE * GRID_COLS WINDOW_HEIGHT = CELL_SIZE * GRID_ROWS # 颜色定义 BLACK = (0, 0, 0) # 死细胞/背景色 WHITE = (255, 255, 255) # 活细胞颜色 GRAY = (40, 40, 40) # 网格线颜色 # 设置窗口 screen = pygame.display.set_mode((WINDOW_WIDTH, WINDOW_HEIGHT)) pygame.display.set_caption("康威元胞自动机 | Enter启停 | 空格切换速度(0.1/0.5/1秒) | R键重置 | 左键放置/删除") # 初始化细胞状态:False=死(黑),True=活(白) cells = [[False for _ in range(GRID_COLS)] for _ in range(GRID_ROWS)] # 运行状态和更新间隔(毫秒) is_running = False # 速度档位:0.1秒(100ms)、0.5秒(500ms)、1秒(1000ms) speed_levels = [100, 500, 1000] current_speed_idx = 1 # 默认选中0.5秒(索引1) UPDATE_INTERVAL = speed_levels[current_speed_idx] # 自定义事件:更新细胞状态 UPDATE_CELLS_EVENT = USEREVENT + 1 pygame.time.set_timer(UPDATE_CELLS_EVENT, UPDATE_INTERVAL) # ===================== 核心函数 ===================== def count_neighbors(row, col): """ 计算指定单元格的活邻居数量 边界处理:超出网格的区域视为死细胞 """ count = 0 # 遍历8个邻居方向 for dr in (-1, 0, 1): for dc in (-1, 0, 1): if dr == 0 and dc == 0: continue # 跳过自身 # 计算邻居坐标并检查边界 r = row + dr c = col + dc if 0 <= r < GRID_ROWS and 0 <= c < GRID_COLS: if cells[r][c]: count += 1 return count def reset_cells(): """重置细胞状态:清空所有活细胞,暂停运行""" global cells, is_running cells = [[False for _ in range(GRID_COLS)] for _ in range(GRID_ROWS)] is_running = False pygame.time.set_timer(UPDATE_CELLS_EVENT, 0) # 关闭定时器 # ===================== 主循环 ===================== def main(): global is_running, UPDATE_INTERVAL, current_speed_idx while True: # 填充背景为黑色 screen.fill(BLACK) # 事件处理 for event in pygame.event.get(): # 关闭窗口 if event.type == QUIT: pygame.quit() sys.exit() # 键盘事件 elif event.type == KEYDOWN: # Enter键:切换运行/暂停状态 if event.key == K_RETURN: is_running = not is_running # 暂停时关闭定时器,运行时开启 pygame.time.set_timer(UPDATE_CELLS_EVENT, UPDATE_INTERVAL if is_running else 0) # 空格键:循环切换速度(0.1秒 → 0.5秒 → 1秒 → 0.1秒...) elif event.key == K_SPACE: current_speed_idx = (current_speed_idx + 1) % len(speed_levels) UPDATE_INTERVAL = speed_levels[current_speed_idx] if is_running: pygame.time.set_timer(UPDATE_CELLS_EVENT, UPDATE_INTERVAL) # R键:重置所有细胞(清空+暂停) elif event.key == K_r or event.key == K_R: reset_cells() # 鼠标左键点击:切换细胞状态(放置/删除) elif event.type == MOUSEBUTTONDOWN: if event.button == 1: # 左键 x, y = event.pos # 转换鼠标坐标为网格坐标 col = x // CELL_SIZE row = y // CELL_SIZE # 确保坐标在网格范围内 if 0 <= row < GRID_ROWS and 0 <= col < GRID_COLS: cells[row][col] = not cells[row][col] # 定时更新细胞状态(仅运行时生效) elif event.type == UPDATE_CELLS_EVENT and is_running: # 先复制当前状态(避免边遍历边修改导致错误) new_cells = [[False for _ in range(GRID_COLS)] for _ in range(GRID_ROWS)] # 应用康威元胞自动机规则 for row in range(GRID_ROWS): for col in range(GRID_COLS): neighbor_count = count_neighbors(row, col) current_state = cells[row][col] # 规则1:活细胞邻居<2 → 死亡 # 规则2:活细胞邻居=2/3 → 存活 # 规则3:活细胞邻居>3 → 死亡 # 规则4:死细胞邻居=3 → 复活 if current_state: new_cells[row][col] = 2 <= neighbor_count <= 3 else: new_cells[row][col] = neighbor_count == 3 # 更新细胞状态 cells[:] = new_cells # 绘制网格线 # 绘制竖线 for col in range(1, GRID_COLS): pygame.draw.line(screen, GRAY, (col * CELL_SIZE, 0), (col * CELL_SIZE, WINDOW_HEIGHT), 1) # 绘制横线 for row in range(1, GRID_ROWS): pygame.draw.line(screen, GRAY, (0, row * CELL_SIZE), (WINDOW_WIDTH, row * CELL_SIZE), 1) # 绘制细胞(活细胞为白色方块,死细胞为黑色背景) for row in range(GRID_ROWS): for col in range(GRID_COLS): if cells[row][col]: cell_rect = pygame.Rect( col * CELL_SIZE, # x坐标 row * CELL_SIZE, # y坐标 CELL_SIZE, # 宽度 CELL_SIZE # 高度 ) pygame.draw.rect(screen, WHITE, cell_rect) # 更新显示 pygame.display.flip() if __name__ == "__main__": main()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1027562.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI大模型落地指南:十大行业案例详解,程序员必收藏

本文介绍十大AI落地案例展示如何助力企业实现AI转型。案例涵盖文档翻译、流程自动化、合同审校、IT运维等多个场景&#xff0c;显著提升效率、降低成本。公司提供全周期一站式服务&#xff0c;从咨询规划到交付运维&#xff0c;帮助企业真正让大模型为员工提质增效&#xff0c;…

四步重塑小米AI音箱:从语音助手到全屋智能中枢的进化之路

四步重塑小米AI音箱&#xff1a;从语音助手到全屋智能中枢的进化之路 【免费下载链接】mi-gpt &#x1f3e0; 将小爱音箱接入 ChatGPT 和豆包&#xff0c;改造成你的专属语音助手。 项目地址: https://gitcode.com/GitHub_Trending/mi/mi-gpt 你是否曾经对着家里的智能音…

Set和Get访问器and构造函数(析构函数)

一、Set和Get访问器属性:public int Age{get;set},一般不存储数据&#xff0c;可以公开接口&#xff0c;可以在外部进行访问 字段:private int age 字段可以存储数据&#xff0c;一般定义成私有的&#xff0c;目的保证数据的安全性如果对类里面的字段进行限制、或者拦截处理 &…

婚礼誓词撰写:LobeChat见证幸福时刻

LobeChat&#xff1a;当开源AI遇见人生重要时刻 在某个安静的夜晚&#xff0c;一对即将步入婚姻殿堂的情侣坐在书桌前&#xff0c;反复修改着婚礼誓词。他们想把十年的感情浓缩成几句真挚的话语&#xff0c;却又担心写得不够动人、不够独特。这时&#xff0c;有人提议&#xff…

vueproject

1.我们可以在 Vue.js 的官网上直接下载 vue.min.js 并用

如何突破信息差诅咒

本文探讨了在信息爆炸时代如何突破信息差,提出了关注垂直细分领域、订阅专栏、关注牛人博客和积极分享等方法,强调跟对人和聪明学习的重要性。在上一篇我分享了自己使用 Antigravity 的体验,我意识到信息差在我们周…

Prompt Tuning

&#x1f34b;&#x1f34b;AI学习&#x1f34b;&#x1f34b;&#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 用力所能及&#xff0c;改变世界。 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4dd;支持一下博主…

【强烈推荐】LangChain教程:Java开发者大模型应用开发宝典

这篇文章介绍了LangChain框架及其Java实现LangChain4j&#xff0c;详细探讨了其核心组件包括模型I/O、记忆内存和检索功能&#xff0c;以及如何使用链和代理构建复杂应用。通过Java示例&#xff0c;展示了提示模板、聊天模型、输出解析器等技术&#xff0c;帮助开发者快速构建大…

ncmdumpGUI:网易云音乐ncm格式转换的终极解决方案

ncmdumpGUI&#xff1a;网易云音乐ncm格式转换的终极解决方案 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换&#xff0c;Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI 你是否曾经遇到过下载的网易云音乐ncm文件在其他…

Docker本地部署AutoGPT详细教程

Docker本地部署AutoGPT详细教程 你有没有想过&#xff0c;AI 不只是被动地回答问题&#xff1f;当你说“帮我写一份关于2025年AI趋势的PPT提纲”&#xff0c;现在的 ChatGPT 会立刻动笔——但它不会主动查资料、不会判断信息是否全面、更不会回头反思&#xff1a;“我是不是漏…

OBS Studio直播画质调优实战:从新手到专业的视觉进阶指南

在当今数字内容创作浪潮中&#xff0c;直播画质已成为创作者的核心竞争力。想要在众多直播中脱颖而出&#xff0c;掌握OBS Studio的画质调优技巧至关重要。本文将带你从基础设置到高级优化&#xff0c;打造媲美专业电视台的直播视觉效果。 【免费下载链接】obs-studio 项目地…

大数据生态核心组件语法与原理入门

大数据生态核心组件语法与原理入门 在人工智能内容生成&#xff08;AIGC&#xff09;迅速普及的今天&#xff0c;视频生成技术正从实验室走向大众应用。以往需要数百亿参数、依赖高端算力集群的文本到视频模型&#xff0c;如今已逐步演化出轻量级版本&#xff0c;能够在消费级 …

SMUDebugTool深度解析:Ryzen系统性能调优完全指南

SMUDebugTool深度解析&#xff1a;Ryzen系统性能调优完全指南 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https://gitcod…

雷科电力-REKE直流高压发生器

一、产品概述&#xff1a;雷科电力-REKE直流高压发生器是根据新的中国电力行业标准DL/T848.1-2004《直流高压发生器通用技术条件》设计制造的新一代便携式直流高压试验器。主要适用于电力部门、工矿、冶金、钢铁等企业动力部门对氧化锌避雷器等高压电气设备进行直流耐压试验。雷…

基于 GEE 使用 Sentinel-2 遥感影像数据反演水体叶绿素 a 质量浓度

目录 一、前言 二、初始化设置 三、影像预处理 四、影像集合加载与预处理 五、波段比计算与叶绿素浓度反演 六、统计分析与结果输出 七、结果可视化 八、核心逻辑与应用场景 九、注意事项 十、运行结果 若觉得代码对您的研究 / 项目有帮助&#xff0c;欢迎点击打赏支…

Beyond Compare 5快速授权终极指南:完整解决方案

Beyond Compare 5快速授权终极指南&#xff1a;完整解决方案 【免费下载链接】BCompare_Keygen Keygen for BCompare 5 项目地址: https://gitcode.com/gh_mirrors/bc/BCompare_Keygen 还在为Beyond Compare 5的授权限制而烦恼吗&#xff1f;面对功能强大的文件对比工具…

绝区零一条龙:新手快速入门完整指南

绝区零一条龙&#xff1a;新手快速入门完整指南 【免费下载链接】ZenlessZoneZero-OneDragon 绝区零 一条龙 | 全自动 | 自动闪避 | 自动每日 | 自动空洞 | 支持手柄 项目地址: https://gitcode.com/gh_mirrors/ze/ZenlessZoneZero-OneDragon 绝区零一条龙是一款专为《绝…

4、图形编辑:画笔、图案与选区的深度应用

图形编辑:画笔、图案与选区的深度应用 1. 画笔的深入使用 1.1 画笔设置 在图形编辑中,画笔是常用工具。通过“File - Dialogs - Brushes”可打开画笔选择窗口。这里有各种预设画笔,大小和形状各异,从微小圆形到纹理画笔,甚至有由图像制成的画笔。选择画笔时,右侧会显示…

抖音视频批量下载终极指南:新手也能3分钟搞定

抖音视频批量下载终极指南&#xff1a;新手也能3分钟搞定 【免费下载链接】douyin-downloader 项目地址: https://gitcode.com/GitHub_Trending/do/douyin-downloader 还在为手动保存抖音视频而烦恼&#xff1f;想要快速批量下载无水印视频&#xff1f;GitHub_Trending…

5、图像编辑与色彩处理全攻略

图像编辑与色彩处理全攻略 1. 图像变换工具 在图像编辑中,变换工具是实现各种效果的关键。以下是几种常见的变换工具及其使用方法: - 移动工具 : - 移动整个图像:激活移动工具后,它就像一个小抓手,按住鼠标左键拖动图像,即可将其移动到新位置。 - 移动图像中的选…