康威生命游戏
康威生命游戏
康威生命游戏(Conway’s Game of Life)是康威发明的细胞自动机。
生命游戏有几个简单的规则:
细胞有两种状态,存活或死亡,每个细胞以自身为中心与周围的八格细胞互动。
对于存活的细胞:
- 当周围的细胞过少(<2)或过多(>3)时,细胞死亡。
- 周围细胞数量适中(2或3)时,细胞保持存活。
对于死亡的细胞(空白区域):
- 周围有3个细胞时,该区域生成细胞。(模拟繁殖)
参考:中文维基百科-康威生命游戏
康威生命游戏通过上述几条简单的规则,加上不同的初始状态,就可以演化出各种复杂的模式:
Python实现
由于生命游戏的规则非常简单,我们可以很容易的用Python实现。
可以用二维数组表示细胞状态,并根据生命游戏的规则计算下一次的细胞状态进行更新。
(当规模变大时,更新细胞会变得困难。可以考虑并行)
下面是一个简单的实现,使用pygame
显示动画,借助numpy
操作数组。
效果如下:
代码参考:https://www.youtube.com/watch?v=cRWg2SWuXtM
完整代码:
import pygame
import numpy as np
import time# 定义颜色和细胞大小
COLOR_BG = (10, 10, 10) # 背景,黑色
COLOR_GRID = (40, 40, 40) # 网格,黑灰色
COLOR_DIE_NEXT = (170, 170, 170) # 下一代死亡细胞,灰色
COLOR_ALIVE_NEXT = (255, 255, 255) # 下一代存活细胞,白色
SIZE = 10# 更新细胞状态
def update(screen, cells, size, with_progress=False):'''更新细胞状态screen: pygame.Surface 对象cells: 细胞状态矩阵size: 细胞大小with_progress: 是否显示下一代细胞状态。有时候我们只想(通过鼠标点击)修改当前细胞状态,而不想立即显示下一代细胞状态'''updated_cells = np.zeros_like(cells)# 遍历每一个细胞for row, col in np.ndindex(cells.shape):# 统计周围细胞的存活数量alive = np.sum(cells[row-1:row+2, col-1:col+2]) - cells[row, col]# 设置格子颜色,如果当前细胞处于死亡状态,颜色为背景色;否则为存活细胞颜色color = COLOR_BG if not cells[row, col] else COLOR_ALIVE_NEXT# 如果当前细胞处于存活状态if cells[row, col]:if alive < 2 or alive > 3:if with_progress:color = COLOR_DIE_NEXTelif 2 <= alive <= 3:updated_cells[row, col] = 1if with_progress:color = COLOR_ALIVE_NEXT# 如果当前细胞处于死亡状态else:if alive == 3:updated_cells[row, col] = 1if with_progress:color = COLOR_ALIVE_NEXT# 在屏幕的(row, col)位置绘制细胞。size-1是为了留出边界pygame.draw.rect(screen, color, (col*size, row*size, size-1, size-1))return updated_cellsdef main():pygame.init()screen = pygame.display.set_mode((800, 600))cells = np.zeros((60, 80))screen.fill(COLOR_GRID)update(screen, cells, SIZE)pygame.display.update()ruuning = Falsewhile True:for event in pygame.event.get():if event.type == pygame.QUIT:pygame.quit()returnif event.type == pygame.KEYDOWN:# 空格键控制游戏暂停/继续if event.key == pygame.K_SPACE: ruuning = not ruuningupdate(screen, cells, SIZE)pygame.display.update()# 鼠标左键点击,添加活细胞if pygame.mouse.get_pressed()[0]:x, y = pygame.mouse.get_pos()cells[y//SIZE, x//SIZE] = 1update(screen, cells, SIZE)pygame.display.update()screen.fill(COLOR_GRID)if ruuning:cells = update(screen, cells, SIZE, with_progress=True)pygame.display.update() time.sleep(0.1)if __name__ == '__main__':main()
相关文章:
康威生命游戏
康威生命游戏 康威生命游戏(Conway’s Game of Life)是康威发明的细胞自动机。 生命游戏有几个简单的规则: 细胞有两种状态,存活或死亡,每个细胞以自身为中心与周围的八格细胞互动。 对于存活的细胞: 当周围的细胞过少(<2)或…...
vscode与vue环境配置
一、下载并安装VScode 安装VScode 官网下载 二、配置node.js环境 安装node.js 官网下载 会自动配置环境变量和安装npm包(npm的作用就是对Node.js依赖的包进行管理),此时可以执行 node -v 和 npm -v 分别查看node和npm的版本号: 配置系统变量 因为在执…...
Linux的ACL权限以及特殊位和隐藏属性
前言: ACL是什么? ACL(Access Control List)是一种权限控制机制,用于在Linux系统中对文件和目录进行细粒度的访问控制。传统的Linux权限控制机制基于所有者、所属组和其他用户的三个权限类别(读、写、执行…...
使用openai-whisper实现语音转文字
使用openai-whisper实现语音转文字 1 安装依赖 1.1 Windows下安装ffmpeg FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。 # ffmpeg官网 https://ffm…...
C++模板为什么不能声明和定义分离
首先我们要直到C程序运行需要进行的四个阶段。 预处理->编译->汇编->链接 编译:对语法语义分析,分析无误生成汇编,头文件不参加编译,多个源文件是分开单独编译的。 链接:将多个obj文件链接合成一个&#x…...
啊丢的刷题记录手册
1.洛谷题P1923 求第k小的数 题目描述 输入 n(1≤n<5000000 且 n 为奇数)个数字ai(1≤ai<109),输出这些数字的第 k 小的数。最小的数是第 0 小。 请尽量不要使用 nth_element 来写本题,因为本题…...
用nginx正向代理https网站
目录 1. 缘起2. 部署nginx3. 测试3.1 http测试3.2 https测试4 给centos设置代理访问外网 1. 缘起 最近碰到了一个麻烦事情,就是公司的centos测试服务器放在内网环境,而且不能直接上外网,导致无法通过yum安装软件,非常捉急。 幸…...
面向对象设计模式
一、单例 一个类只能创建唯一一个对象 利用限制构造、static完成 二、工厂模式 优势:规范接口(纯虚函数);实现多态(虚函数表);继承 1、简单工厂 一个工厂创建所有产品。 返回基类指针可…...
人工智能_CPU微调ChatGLM大模型_使用P-Tuning v2进行大模型微调_007_微调_002---人工智能工作笔记0102
这里我们先试着训练一下,我们用官方提供的训练数据进行训练. 也没有说使用CPU可以进行微调,但是我们先执行一下试试: https://www.heywhale.com/mw/project/6436d82948f7da1fee2be59e 可以看到说INT4量化级别最低需要7GB显存可以启动微调,但是 并没有说CPU可以进行微调.我们…...
Android自编译Pixel3内核加入KernelSU
背景 让Pixel3 AOSP Android10 4.9内核用上Kernel SU 环境: Ubuntu 18.04 vm aosp10r2 移植参考官方,和github项目 Commits OnlyTomInSecond/android_kernel_xiaomi_sdm845 (github.com) 这个项目是 LineageOS/android_kernel_xiaomi_sdm845 编译的前提 已经有完整…...
Go 数据库编程精粹:database/sql 实用技巧解析
Go 数据库编程精粹:database/sql 实用技巧解析 简介database/sql 库的基础知识核心概念连接池驱动事务 环境配置 建立数据库连接连接到数据库示例:连接 MySQL 数据库连接池管理 执行查询和处理结果基本查询执行多行查询执行单行查询 结果处理处理多行结果…...
AI-Gateway:一款整合了OpenAI、Anthropic、LLama2等大语言模型的统一API接口
关于AI-Gateway AI-Gateway是一款针对大语言模型的统一API接口,该接口可以用在应用程序和托管的大语言模型(LLM)之间,该工具可以允许我们通过一个统一的API接口将API请求转发给OpenAI、Anthropic、Mistral、LLama2、Anyscale、Go…...
Android 广播的基本概念
一.广播简介 Broadcast是安卓四大组件之一。安卓为了方便进行系统级别的消息通知,引入了一套广播消息机制。打个比方,记得原来在上课的时候,每个班级的教室里都会装有一个喇叭,这些喇叭都是接入到学校的广播室的,一旦…...
【Docker实操】部署php项目
概述 最终达成的容器部署结构和原理如下图: 一、获取nginx、php官方镜像 docker pull nginx //拉取nginx官方镜像 docker pull php:7.4-fpm //拉取php官方镜像需要获取其他可用的php版本,可以上【docker hub】搜索【php】,所有的【xxx-fp…...
多线程-初阶
1. 认识线程( Thread ) 1.1 概念 1) 线程是什么 一个线程就是一个 " 执行流 ". 每个线程之间都可以按照顺讯执行自己的代码 . 多个线程之间 " 同时 " 执行 着多份代码 . 还是回到我们之前的银行的例子中。之前我们主要描…...
Object和Function是函数,函数都有一个prototype属性
Object 和 Function 都是 JavaScript 自带的函数对象 在 JavaScript 中,万物皆对象,你要一个吗?new Object() 啊! 当然,就好比同样为人,也区分普通人和天才。 对象也是有分类的,分为 普通对象…...
stm32利用CubeMX按键控制数码管加减数
首先画电路图: 接下来配置CubeMX: 设置好后生成MDK工程文件: 用keil打开工程: 添加部分代码: /* USER CODE BEGIN Includes */ uint16_t duan[]{0xC0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90}; uint1…...
前端页面生成条形码,借助layui打印标签
借助JsBarcode生成条形码 官网:https://lindell.me/JsBarcode/ github: https://github.com/lindell/JsBarcode <div class"table-div" style"display: block;width: 300px; height: 241px; margin: auto;"><table border"1&quo…...
第1~8章 综合复习
1. 重置root密码 1. 重启服务器(虚拟机)2. 快速选择第二项,然后按 e 键3. 在linux这一行的最后加上一个空格,然后输入 rd.break,然后按 ctrl x 来重启服务4. 在提示符所在位置输入 mount -o remount,rw /sysroot5. 在…...
转运机器人,AGV底盘小车:打造高效、精准的汽车电子生产线
为了满足日益增长的市场需求,保持行业领先地位,某汽车行业电子产品企业引入富唯智能AMR智能搬运机器人及其智能物流解决方案,采用自动化运输措施优化生产节拍和搬运效率,企业生产效率得到显著提升。 项目背景: 1、工厂…...
Spring Boot 的参数校验方案
1、前言 在平时的开发工作中,我们通常需要对接口进行参数格式验证。当参数个数较少(个数小于3)时,可以使用if ... else ...手动进行参数验证。当参数个数大于3个时,使用if ... else ...进行参数验证就会让代码显得臃肿,这个时候推荐使用注解来进行参数验证。 2、常用注…...
第N3周:Pytorch文本分类入门
>- **🍨 本文为[🔗365天深度学习训练营](https://mp.weixin.qq.com/s/rbOOmire8OocQ90QM78DRA) 中的学习记录博客** >- **🍖 原作者:[K同学啊 | 接辅导、项目定制](https://mtyjkh.blog.csdn.net/)** import torch import…...
宝塔面板安装了mysql5.7和phpMyadmin,但是访问phpMyadmin时提示502 Bad Gateway
操作流程截图如下: 原因是没有选择php版本 选择php版本 下一页找到phpMyAdmin,选择设置 目前只有纯净态,说明没有php环境,前去安装php环境 点击安装,选择版本,这里选择的是7.4版本,编译安…...
K8S—Pod详解
目录 一 Pod基础概念 1.1 Pod是什么 1.2 为什么要使用Pod?Pod在K8S集群中的使用方式? 1.3 基础容器pause 二 Pod的分类 2.1 自主式Pod和控制器管理的Pod 2.2 容器的分类 2.2.1 基础容器(infrastructure container) 2.2.2…...
深度学习中数据的转换
原始(文本、音频、图像、视频、传感器等)数据被转化成结构化且适合机器学习算法或深度学习模型使用的格式。 原始数据转化为结构化且适合机器学习和深度学习模型使用的格式,通常需要经历以下类型的预处理和转换: 文本数据…...
如何系统地自学 Python?
目录 Python 数据类型 控制结构 函数和模块 文件操作 异常处理 类和对象 列表推导式和生成器 匿名函数和高阶函数 面向对象编程 总结 Python Python是一种面向对象、解释型计算机程序设计语言,由Guido van Rossum于1989年发明,第一个公开发行…...
【软考】传输层协议之UDP
目录 一、说明二、特点 一、说明 1.用户数据报协议(User Datagram Protocol)是一种不可靠的、无连接的协议,可以保证应用程序进程间的通信 2.与TCP相比,UDP是一种无连接的协议,它的错误检测功能要弱很多 3.TCP有助于提…...
微服务-微服务链路追踪组件Skywalking实战
自动化监控系统Prometheus&Grafana实战: https://vip.tulingxueyuan.cn/detail/v_60f96e69e4b0e6c3a312c726/3?fromp_6006cac4e4b00ff4ed156218&type8&parent_pro_idp_6006d8c8e4b00ff4ed1569b2 APM-性能监控项目班: https://vip.tuling…...
Stream、Collections、Collectors用法
当涉及Java编程中的集合处理时,Stream、Collections和Collectors是三个常用的工具。以下是它们各自的主要功能和使用的一些方法的概要: Stream: 概要:Stream 是 Java 8 引入的一个强大工具,用于处理集合数据的流式操作…...
Jetson Xavier NX 与笔记本网线连接 ,网络共享,ssh连接到vscode
Jetson Xavier NX 与笔记本网线连接 ,网络共享,ssh连接到vscode Jetson Xavier NX桌面版需要连接显示屏、鼠标和键盘,操作起来并不方便,因此常常需要ssh远程连接到本地笔记本电脑,这里介绍一种连接方式,通过…...
南宁网站开发企业/宜兴百度推广公司
编者按:本文作者为Alexander Haislip,他是云服务器管理公司ScaleXtreme的市场经理。其代表作有 Essentials of Venture Capital(《风险投资概要》)。 云的出现确实为科技生活带来了很多便利,但随着使用时间越来越多&a…...
潜江 网站建设/2345网止导航
spring是一个很有名的java开源框架,作为一名javaer还是有必要了解spring的设计原理和机制,beans、core、context作为spring的三个核心组件。而三个组件中最重要的就是beans组件了。 从一个简单实例来查看spring加载配置文件中的bean。 public class Stud…...
效果图哪个网站好/app关键词排名优化
以下是Linux基本命令df和linux中du命令参数介绍,希望对您的学习有所帮助。 一、linux中df命令参数: linux中df命令参数用于查看Linux文件系统的状态信息,显示各个分区的容量、已使用量、未使用量及挂载点等信息。 如: …...
公司注册网上申请流程/seo云优化平台
在github项目下的子文件夹通常没有download的标志,如图所示 image ###GitZip插件 chrome浏览器添加GitZip插件,参考自GitZip for github 管理扩展程序,直接添加gitzip插件即可。 在项目下载网页,点击git zip插件,会弹出…...
哪些网站是用h5做的/成人教育培训机构排名
一、分布式系统 数据密集型应用——分布式数据复制 Paxos协议学习——译《The Part-Time Parliament》 可靠分布式系统-paxos的直观解释 分布式组件 ZooKeeper分布式过程协同技术详解-简介 二、docker Docker系列:Docker子命令分类 Docker Registry 安装和运行…...
沧州做网站/百度seo关键词排名优化
http://blog.csdn.net/p96114/archive/2004/09/10/100617.aspx /** Created on 2004-9-10** 单链表中的结点类型声明.*/package org.arliang;/*** author 李梁** 单链表中的结点.*/public class node{private int data; //存放数据private node link; //链接的下一个接点.publi…...