生命游戏(Game of Life)描述
一、生命游戏(Game of Life)描述
生命游戏是英国数学家约翰·何顿·康威在1970年发明的细胞自动机,它包括一个二维矩形世界,这个世界中的每个方格居住着一个活着的或死亡的细胞。一个细胞在下一个时刻生死取决于相邻八个方格中活着的或死了的细胞的数量。如果相邻方格活着的细胞数量过多,这个细胞会因为资源匮乏而在下一个时刻死去;相反,如果周围活细胞过少,这个细胞会因太孤单而死去。
游戏在一个类似于围棋棋盘一样的,可以无限延伸的二维方格网中进行。(实际实现中,我们采取令左右边界相接、上下边界相接的方法模拟无限棋盘的情况)例如,设想每个方格中都可放置一个生命细胞,生命细胞只有两种状态:“生”或“死”。图中,用黑色的方格表示该细胞为“死”, 其它颜色表示该细胞为“生” 。游戏开始时, 每个细胞可以随机地(或给定地)被设定为“生”或“死”之一的某个状态, 然后,再根据如下生存定律计算下一代每个细胞的状态:
每个细胞的状态由该细胞及周围8个细胞上一次的状态所决定;
如果一个细胞周围有3个细胞为生,则该细胞为生,即该细胞若原先为死则转为生,若原先为生则保持不变;
如果一个细胞周围有2个细胞为生,则该细胞的生死状态保持不变;
在其它情况下,该细胞为死,即该细胞若原先为生则转为死,若原先为死则保持不变。
二、代码重构与测试
请阅读给定的程序代码(见附件),该游戏包括三部分:
· 界面(见下图):画布、按钮等。
Screen_Shot_2016-01-16_at_15.02.31_1.png
· 定时器(Timer):定时触发时钟事件,推动演化。
· 游戏逻辑:给定当前状态,下一步的演化结果是什么。
这三部分的关系如下:
· 界面控制定时器(开始)。
· 定时器每隔一段时间触发,推动演化。
· 演化计算完毕后,在界面上更新显示。
请对上述程序代码进行重构,具体要求:
· 本游戏的代码用Python3.x实现,至少使用观察者模式进行重构。(提示:这里存在两对观察者与被观察者,分别是Model类观察RepeatableTimer和GUI观察Model)
· 用户界面、游戏演化逻辑尽可能独立。
· 考虑如何对本游戏进行单元测试,并完成单元测试(使用unittest库编写测试代码)。
· 不能引用第三方库。
三、代码分享说明
本部分是选做内容,不计入课程成绩。希望同学们在下面讨论区中分享重构后的源代码和单元测试源代码,请列出代码地址链接并说明自己的设计思路。
(1) 重构后的源程序,要求代码规范并正确使用设计模式。
(2) 单元测试代码,要求测试用例设计完整,测试代码正确。
生命游戏(Game of Life)描述相关推荐
- [Leetcode] 第289题 生命游戏
一.题目描述 根据百度百科,生命游戏,简称为生命,是英国数学家约翰·何顿·康威在1970年发明的细胞自动机. 给定一个包含 m × n 个格子的面板,每一个格子都可以看成是一个细胞.每个细胞具有一个初 ...
- [Leedcode][JAVA][第289题][生命游戏]
[问题描述] 根据 百度百科 ,生命游戏,简称为生命,是英国数学家约翰·何顿·康威在 1970 年发明的细胞自动机.给定一个包含 m × n 个格子的面板,每一个格子都可以看成是一个细胞.每个细胞都具 ...
- 复杂性思维中文第二版 六、生命游戏
六.生命游戏 原文:Chapter 6 Game of Life 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 在本章中,我们考虑二维细胞自动机,特别是 John Conway ...
- java swing 代码_java swing编写gui生命游戏代码,新手上路
项目描述 生命游戏其实是一个零玩家游戏,它包括一个二维矩形世界,这个世界中的每个方格居住着一个活着的或死了的细胞.一个细胞在下一个时刻生死取决于相邻八个方格中活着的或死了的细胞的数量.如果相邻方格活着 ...
- 「 生活太重要了,不能太过严肃 」:生命游戏之父、最神奇的数学家John Conway...
点击上方"AI遇见机器学习",选择"星标"公众号 重磅干货,第一时间送达 来自:机器之心 在 82 年的人生中,John Conway 始终保持着狡黠淘气的幽默 ...
- 元胞自动机CA+生命游戏代码
1.元胞自动机 元胞自动机(Cellular Automaton,复数为Cellular Automata,简称CA,也有人译为细胞自动机.点格自动机.分子自动机或单元自动机).是一时间和空间都离散的 ...
- 生命游戏(Java)
在研究元胞自动机理论过程中,Conway发明生命游戏(Game of Life.GoL),在1970s风靡一时. 这是0人游戏,即按照初始的设置,游戏自动演化.在类似围棋的棋盘中,每一个格子可以是空格 ...
- 【元胞自动机】元胞自动机生命游戏【含Matlab源码 655期】
⛄一.元胞自动机简介 1 元胞自动机发展历程 最初的元胞自动机是由冯 · 诺依曼在 1950 年代为模拟生物 细胞的自我复制而提出的. 但是并未受到学术界重视. 1970 年, 剑桥大学的约翰 · 何 ...
- turtle实例6 生命游戏
生命游戏 百科 细胞自动机(又称元胞自动机),名字虽然很深奥,但是它的行为却是非常美妙的.所有这些怎样实现的呢?我们可以把计算机中的宇宙想象成是一堆方格子构成的封闭空间,尺寸为N的空间就有NN个格子. ...
最新文章
- Python翻转字典,以及解决IndentationError: expected an indented block报错!
- python中setup函数的用法_Vue 3 setup 函数
- 【Android】SDDL刷机
- byte数组转file不写入磁盘_Linux 环境写文件如何稳定跑满磁盘 I/O 带宽?
- Node.js 框架设计及企业 Node.js 基础建设相关讨论
- 接口测试工具——postman
- 《设计模式之禅》--单例扩展:多例模式
- django路由层 虚拟环境 视图层
- 图片控件 imageView listView Spinner
- SAP动态下载数据库表数据至EXCEL
- MATLAB R2016a 简单介绍
- Tensor for argument #2 ‘mat1‘ is on CPU, but expected it to be on GPU (while checking arguments for
- 黑客们很喜欢骇客交锋,虽然本片不被影评人认可
- 一个屌丝程序猿的人生(八十六)
- Wildcard Matching 1
- Kubernetes详解
- 深度学习之残差网络原理深度刨析
- gan 的要点 (弱点与改进、推土距离)
- 华硕路由器信息发现服务器,研究人员发现华硕路由器收集用户访问记录等隐私数据...
- 传统目标跟踪方法简介