1、游戏规则&背景知识:
生命游戏其实是一个零玩家游戏,它包括一个二维矩形世界,这个世界中的每个方格居住着一个活着的或死了的细胞。一个细胞在下一个时刻生死取决于相邻八个方格中活着的或死了的细胞的数量。如果相邻方格活着的细胞数量过多,这个细胞会因为资源匮乏而在下一个时刻死去;相反,如果周围活细胞过少,这个细胞会因太孤单而死去。实际中,你可以设定周围活细胞的数目怎样时才适宜该细胞的生存。如果这个数目设定过低,世界中的大部分细胞会因为找不到太多的活的邻居而死去,直到整个世界都没有生命;如果这个数目设定过高,世界中又会被生命充满而没有什么变化。
实际中,这个数目一般选取2或者3;这样整个生命世界才不至于太过荒凉或拥挤,而是一种动态的平衡。这样的话,游戏的规则就是:当一个方格周围有2或3个活细胞时,方格中的活细胞在下一个时刻继续存活;即使这个时刻方格中没有活细胞,在下一个时刻也会“诞生”活细胞。在这个游戏中,还可以设定一些更加复杂的规则,例如当前方格的状况不仅由父一代决定,而且还考虑祖父一代的情况。你还可以作为这个世界的上帝,随意设定某个方格细胞的死活,以观察对世界的影响。

function lifecontrol
clear% 通过移动标记来放置点或者删除点
% 空格键放置、delete键删除
%通过↑↓←→来控制标记的移动
% 按下S开始生命周期
% 按下P暂停迭代
% 按下C键清除屏幕
% 按下R键随机放置点n=80;%培养皿的规模axis equal %坐标纵宽比axis(0.5+[0,n,0,n])%设置坐标区域大小set(gca,'xtick',[],'ytick',[],'xcolor','w','ycolor','w')set(gca,'color','w')hold on %%保留绘图痕迹A=zeros(n,n);%初始化设置[a,b]=find(A(:,:)==1);B=[b,length(sum(A,2))-a];postion=[floor(n/2),floor(n/2)];//居中control=1;plotl=scatter(gca,B(:,1),B(:,2),1200/n,'ks','filled');plotpostion=scatter(gca,postion(1,1),postion(1,2),150,'rx');set(gcf, 'KeyPressFcn', @key)                                                     fps = 20;                                    game = timer('ExecutionMode', 'FixedRate', 'Period',2/fps, 'TimerFcn', @lifeGame);%设置更新帧率等start(game)
%开始设置.............................................................................
set(gcf,'tag','co','CloseRequestFcn',@clo);function clo(~,~)stop(game)delete(findobj('tag','co'))clfcloseendfunction lifeGame(~,~)chang=length(sum(A,2));postion(postion>chang)=postion(postion>chang)-chang;postion(postion<1)=postion(postion<1)+chang;if control==2     %%%启动B1=[A;zeros(1,chang)];B1(1,:)=[];B2=[zeros(1,chang);A];B2(end,:)=[];B3=[zeros(chang,1),A];B3(:,end)=[];B4=[A,zeros(chang,1)];B4(:,1)=[];C1=[zeros(chang,1),B1];C1(:,end)=[];C2=[B1,zeros(chang,1)];C2(:,1)=[];C3=[zeros(chang,1),B2];C3(:,end)=[];C4=[B2,zeros(chang,1)];C4(:,1)=[];NewA=B1+B2+B3+B4+C1+C2+C3+C4;progressA=zeros(chang,chang);progressA(NewA==3)=1;t3=find(NewA==2);t2=find(A==1);[lalala,~,~]=intersect(t3,t2);progressA(lalala)=1;A=progressA;[a,b]=find(A(:,:)==1);B=[b,length(sum(A,2))-a];endif control==1    % %暂停[a,b]=find(A(:,:)==1);B=[b,length(sum(A,2))-a]; endset(plotl,'XData',B(:,1),'YData',B(:,2))set(plotpostion,'XData',postion(1,1),'YData',postion(1,2))endfunction key(~,event)%按键控制switch event.Keycase 'uparrow'%%%%控制前后左右postion=postion+[0,1];case 'downarrow'postion=postion+[0,-1];case 'leftarrow'postion=postion+[-1,0];case 'rightarrow'postion=postion+[1,0];case 'space'%加点A(length(sum(A,2))-postion(1,2),postion(1,1))=1;case 'backspace' %删点A(length(sum(A,2))-postion(1,2),postion(1,1))=0;case 's'%启动control=2;case 'p'%暂停control=1;case 'c'  % %清除A=zeros(n,n);control=1;case 'r'A=randi(9,[n,n]);%随机产生点A(A<7)=0;A(A>7)=1;endend
end

matlab实现一个简单的细胞自动机小游戏相关推荐

  1. python简单小游戏代码_一个简单的python小游戏---七彩同心圆

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理 用pygame做一个简单的python小游戏-七彩同心圆 玩法:每次点击鼠标时,会以鼠标为圆心,不断 ...

  2. 用pygame做一个简单的python小游戏---贪吃蛇

    用pygame做一个简单的python小游戏-贪吃蛇 贪吃蛇游戏博客链接:(方法一样,语言不一样) c++贪吃蛇:https://blog.csdn.net/weixin_46791942/artic ...

  3. 用pygame做一个简单的python小游戏---七彩同心圆

    用pygame做一个简单的python小游戏-七彩同心圆 这个小游戏原是我同学python课的课后作业,并不是很难,就简单实现了一下,顺便加强一下pygame库的学习. 玩法:每次点击鼠标时,会以鼠标 ...

  4. 用pygame做一个简单的python小游戏---生命游戏

    用pygame做一个简单的python小游戏-生命游戏 生命游戏(Game of Life) 生命游戏(Game of Life)是剑桥大学约翰·何顿·康威(John Horton Conway)教授 ...

  5. python七彩同心圆_用pygame做一个简单的python小游戏---七彩同心圆

    用pygame做一个简单的python小游戏---七彩同心圆 用pygame做一个简单的python小游戏-七彩同心圆 这个小游戏原是我同学python课的课后作业,并不是很难,就简单实现了一下,顺便 ...

  6. 做一个简单的java小游戏--单机版五子棋

    做一个简单的java小游戏–单机版五子棋 学了java有一段时间了,今天就来搞一个简单的单机版五子棋游戏. 实现功能:那必须能进行基础的输赢判断.还有重新开始的功能,悔棋的功能,先手设置的功能和退出的 ...

  7. 一个简单的纸牌小游戏

    一个简单的纸牌小游戏 初始化页面布局 function initView(){var html = html2 = '';for(var i=1;i<=10;i++){html += '< ...

  8. Friends——一个简单的Processing小游戏

    Friends--一个简单的Processing小游戏 背景前言 人类永远是矛盾的个体,我们一边喜爱着无垠的夜空,一边又恐惧着深邃的孤独- 在无边无际的的黑夜中,每一个光点都是一个孤独的个体,他们本应 ...

  9. 制作一个简单的switch小游戏

    好的,那么,我们可以这样来制作一个简单的 switch 小游戏: 首先,我们需要先引入所需的库,如 stdio.h 和 stdlib.h. 接着,我们可以使用 printf 和 scanf 函数来输出 ...

最新文章

  1. 为什么很多SpringBoot开发者放弃了Tomcat,选择了Undertow?
  2. Java短连接生成工具-思路
  3. 布隆过滤器原理及在推荐业务的应用
  4. _Blank主页——个人浏览器主页定制
  5. 单片机课程设计数字心率计_光学心率传感器详细使用教程
  6. 如何修复 SAP UI5 aggregation with cardinality 0..1 相关的错误消息
  7. 钉钉一个人怎么多部门 钉钉一个人加入多个部门的技巧
  8. MySQL · BUG分析 · Rename table 死锁分析
  9. OSChina 周五乱弹 —— 姑娘在这个节日里表白你接受么?
  10. 概率论与数理统计学习笔记——第7讲——连续型随机变量(2.5.4指数分布及其与泊松分布的关系)
  11. 城头土命适合做计算机电脑职业,土命人适合的职业
  12. [附源码]Node.js计算机毕业设计大学生健康管理系统的设计与实现Express
  13. 洛谷P4170 [CQOI2007]涂色 题解
  14. 2022我们都用这3个3D建模软件,常用简单又易上手
  15. Discuz如何开发移动端访客功能
  16. LeetCode二维子矩阵的和
  17. Python 多位数字写入CSV文件,避免科学计数法显示,超长数字,超大数字,精度保留
  18. html 带弧度的三角形怎么写的,带圆角三角型的css实现
  19. OSChina 周日乱弹 —— 感觉他俩长相挺门当户对的
  20. 正定矩阵、负定矩阵、半正定矩阵、半负定矩阵

热门文章

  1. 找工作,攒人品(4)
  2. 对着网页进行右键操作------审查元素(快速查看标签代码)
  3. 机器学习基础笔记(自用)
  4. 类型转换及类型转换函数
  5. Hadoop  HA
  6. chatgpt赋能python:Python波浪号简介
  7. 宝塔Linux苹果cms安装,苹果CMS V10 全站伪静态教程 伪静态规则分享 宝塔Linux系统...
  8. (一)深入理解采样定理
  9. 软件测试实验1 — Junit 安装与 triangle problem 的测试
  10. win连接被远程计算机终止,windows系统远程连接后马上断开提示“远程计算机已结束连接”的解决方法...