生命游戏(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) 单元测试代码,要求测试用例设计完整,测试代码正确。
上一篇: Java小程序:同时开启多个线程并让其打印各自内容
下一篇: 选择排序