【简单好玩】细胞自动机小游戏
细胞自动机
备注:文末有自己用Javascript简单实现的网页版细胞自动机(还挺好玩)
什么是细胞自动机
细胞自动机(英语:Cellular automaton),又称格状自动机、元胞自动机,它是由无限个有规律、坚硬的方格组成,每格均处于一种有限状态。每格于t时的态由t-1时的一集有限格(这集叫那格的邻域)的态决定。每一格的“邻居”都是已被固定的。每次演进时,每格均遵从同一规矩一齐演进。
当然这个细胞自动机有一个游戏实现 ------康威生命游戏(英语:Conway's Game of Life)
康威生命游戏规则
生命游戏中,对于任意细胞,规则如下:
每个细胞有两种状态-存活或死亡,每个细胞与以自身为中心的周围八格细胞产生互动。(如图,黑色为存活,白色为死亡)
当前细胞为存活状态时,当周围低于2个(不包含2个)存活细胞时, 该细胞变成死亡状态。(模拟生命数量稀少)
当前细胞为存活状态时,当周围有2个或3个存活细胞时, 该细胞保持原样。
当前细胞为存活状态时,当周围有3个以上的存活细胞时,该细胞变成死亡状态。(模拟生命数量过多)
当前细胞为死亡状态时,当周围有3个存活细胞时,该细胞变成存活状态。 (模拟繁殖)
可以把最初的细胞结构定义为种子,当所有在种子中的细胞同时被以上规则处理后, 可以得到第一代细胞图。按规则继续处理当前的细胞图,可以得到下一代的细胞图,周而复始。
康威生命游戏的自由
有了核心的算法(游戏规则),康威生命就是一个具有生命的自由游戏。你可以在游戏中创造出自己的细胞世界。周而复始。
自己实现的一个生命游戏
生命游戏其实并不是很复杂,自己实现一个还是挺好玩的。所以自己就用Vue实现了一个小小的生命游戏
核心思想
下一步要做什么,生命游戏最重要就是下一步,不管游戏规则是如何,下一步状态是这个游戏发展的动力。
function nextStep(map) { let newMap;//@TODO对newMap进行核心算法的编写 return newMap; }
此函数就是游戏的生命,将游戏规则编写进这个函数,Vue只负责渲染这个newMap
就好了。
所以我们有以下函数
function nextStep(map) {let new_map = Array(52).fill(Array(52).fill(0)).map((i) => i.map((j) => 0));let countAlive = 0;for (let i = 1; i < 51; i++) {for (let j = 1; j < 51; j++) {countAlive = map[i + 1][j] + map[i - 1][j] + map[i][j + 1] + map[i][j - 1] + map[i + 1][j + 1] + map[i + 1][j - 1] + map[i - 1][j + 1] + map[i - 1][j - 1];if (map[i][j] === 0 && countAlive < 3) {new_map[i][j] = 0;}if (map[i][j] === 1 && 2 <= countAlive && countAlive <= 3) {new_map[i][j] = 1;}if (map[i][j] === 1 && (countAlive > 3 || countAlive < 2)) {new_map[i][j] = 0;}if (map[i][j] == 0 && countAlive === 3) {new_map[i][j] = 1;}countAlive = 0;}}return new_map;}
地图扩展,我们的Map默认定了一个50*50的二位数组,可是考虑到边界对细胞算法影响,我们扩展地图,将地图作为52*52的二位数组。这样然这个50*50的二位数组最外面包多一层,看控制边界对细胞算法影响。细胞只在内层50*50数组内繁衍。
let new_map = Array(52).fill(Array(52).fill(0)).map((i) => i.map((j) => 0));
文件导出导入 当然加了扩展功能,保存自己喜欢的细胞自动机成文件。
速度的调整 扩展功能,调整下一步的速度。
实现的效果
Gayhub源代码,喜欢就给个Star
戳=>>>>>>>>>>细胞自动机
这是一个分割线!
最新版本的细胞自动机用了koa2进行了重构噢!
【简单好玩】细胞自动机小游戏相关推荐
- matlab实现一个简单的细胞自动机小游戏
1.游戏规则&背景知识: 生命游戏其实是一个零玩家游戏,它包括一个二维矩形世界,这个世界中的每个方格居住着一个活着的或死了的细胞.一个细胞在下一个时刻生死取决于相邻八个方格中活着的或死了的细胞 ...
- VB6实现简单的扫雷小游戏
#VB实现简单的扫雷小游戏 扫雷这个小游戏可谓是简单又好玩,百万不腻,不知道有没有小伙伴跟博主一样脑热的曾经扫过一整个屏幕的雷... 源码可以在作者的资源页下载 https://download.cs ...
- python简单小游戏代码_一个简单的python小游戏---七彩同心圆
本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理 用pygame做一个简单的python小游戏-七彩同心圆 玩法:每次点击鼠标时,会以鼠标为圆心,不断 ...
- 基于C语言Ncurse库和链表的简单贪吃蛇小游戏
参考:基于C语言Ncurse库和链表的简单贪吃蛇小游戏 作者:三速何时sub20 发布时间:2020-09-29 10:23:51 网址:https://blog.csdn.net/weixin_44 ...
- 地图标识符号大全_【好玩微信小游戏大全】虫虫逃亡:烧脑游戏佳作!强烈推荐!...
沐沐带你发现好游戏! 只有你想不到, 没有我找不到的好游戏! 「良心好游戏推荐」 搜罗了好玩的微信小游戏大全, 模拟经营游戏.恐怖游戏.消除游戏.休闲游戏.益智游戏.解密游戏.烧脑游戏.解谜游戏大全. ...
- 用Python制作好玩的小游戏
炎炎夏日,独坐家中,闲来无事,便用Python写了2个简单的解闷小游戏,分享给你们,也希望大家通过这两个小游戏可以学习Python的编程知识. 1.用Python破解九宫格 九宫格最早叫「洛书」,现在 ...
- 用pygame做一个简单的python小游戏---贪吃蛇
用pygame做一个简单的python小游戏-贪吃蛇 贪吃蛇游戏博客链接:(方法一样,语言不一样) c++贪吃蛇:https://blog.csdn.net/weixin_46791942/artic ...
- 用pygame做一个简单的python小游戏---七彩同心圆
用pygame做一个简单的python小游戏-七彩同心圆 这个小游戏原是我同学python课的课后作业,并不是很难,就简单实现了一下,顺便加强一下pygame库的学习. 玩法:每次点击鼠标时,会以鼠标 ...
- 用pygame做一个简单的python小游戏---生命游戏
用pygame做一个简单的python小游戏-生命游戏 生命游戏(Game of Life) 生命游戏(Game of Life)是剑桥大学约翰·何顿·康威(John Horton Conway)教授 ...
- 微信小程序:智力考验看成语猜古诗句好玩解闷小游戏下载
这是一款猜诗句的一款小程序,特别考脑力 里面拥有低,中,高三种难度 用户通过猜所提供的成语,然后猜出是哪句古诗 当然啦下方也是会有小小提示的,比如古诗作者名字 或者古诗的名字,或者第一个字是什么等等 ...
最新文章
- 使用Caffe基于cifar10进行物体识别
- python编程 从入门到实践豆瓣-三周刷完《Python编程从入门到实践》的感受
- 优秀软件开发者必须具备的能力
- python——多态
- STM32F103:一.(1)MDK的配置
- java eventbus 原理_本文为 Android 开源项目实现原理解析 EventBus 部分,从源码分析 EventBus 的实现原理...
- ArcGIS AddIN之工具不可用
- 【读】这一次,让我们再深入一点 - TCP协议
- c语言程序设计教程pdf下载,C语言程序设计教程PDF合集-中国科技大学.pdf
- 修改centos系统时间
- 凤凰android root x86,凤凰OS 3.0.5版 root教程
- 计算两条线或多边形的交点(LineString | MultiLineString | Polygon )
- CuteHttpFileServer: 一键搭建文件共享服务器
- Linux驱动regulator
- 生成固定的句子,句子中含有给定的多个关键词,python代码实现
- Python:datetime时间UTC时间转东八区
- html5波浪效果,html5 canvas粒子波浪动画特效
- 怎样解决spoolsv.exe应用程序错误
- “fatal error C1859: “Release\XXXX.pch”意外的预编译头错误,只需重新运行编译器就可能修复此问题”的一个解决办法
- python数据挖掘课程 十.Pandas、Matplotlib、PCA绘图实用代码补充