/MOOC_LifeGame

LifeGame homework of Software Engineering MOOC (http://www.xuetangx.com/courses/TsinghuaX/34100325X/2015_T1/about)

Primary LanguagePython

MOOC_LifeGame

LifeGame homework of Software Engineering MOOC

Homework 1

请用Python语言编程实现生命游戏,该游戏具体描述如下:

生命游戏是英国数学家约翰·何顿·康威在1970年发明的细胞自动机,它包括一个二维矩形世界,这个世界中的每个方格居住着一个活着的或死亡的细胞。一个细胞在下一个时刻生死取决于相邻八个方格中活着的或死了的细胞的数量。如果相邻方格活着的细胞数量过多,这个细胞会因为资源匮乏而在下一个时刻死去;相反,如果周围活细胞过少,这个细胞会因太孤单而死去。

游戏在一个类似于围棋棋盘一样的,可以无限延伸的二维方格网中进行。例如,设想每个方格中都可放置一个生命细胞,生命细胞只有两种状态:“生”或“死”。图中,用黑色的方格表示该细胞为“死”, 其它颜色表示该细胞为“生” 。游戏开始时, 每个细胞可以随机地(或给定地)被设定为“生”或“死”之一的某个状态, 然后,再根据如下生存定律计算下一代每个细胞的状态:

  1. 每个细胞的状态由该细胞及周围8个细胞上一次的状态所决定;
  2. 如果一个细胞周围有3个细胞为生,则该细胞为生,即该细胞若原先为死则转为生,若原先为生则保持不变;
  3. 如果一个细胞周围有2个细胞为生,则该细胞的生死状态保持不变;
  4. 在其它情况下,该细胞为死,即该细胞若原先为生则转为死,若原先为死则保持不变。

作业要求

请切换至homework1分支。

我们提供四个.py文件,这四个文件分别是main.py、life_game.py、game_timer.py、game_map.py,其中前三个文件已经完成,game_map.py文件已经定义了其他程序调用的接口。请你将game_map.py补充完整,使它可以正确地实现生命游戏的功能。

你可以按照以下方式依次完成本次作业:

  • 将game_map.py的作者修改为你;
  • 理解程序运行基本逻辑,搞清楚GameMap在这里充当什么角色;
  • 实现GameMap类未完成的方法(接口函数);
  • 测试整个游戏程序。

作业提交

请学生通过mooc平台提交作业文件game_map.py,如果提交作业后出现转圈现象属于正常情况,只要提示文件上传成功了就没有问题。

Homework 2

小图所在的某校信息学院有一位程老师,他对生命游戏特别感兴趣,正巧他看到小图最近在研究生命游戏。程老师想了一些生命游戏的新规则,他想检验一下那些规则是否有效,于是拍了拍小图的肩膀,语重心长地说:“生命游戏能不能成为游戏界的主流,能不能在游戏史上留下浓墨重彩的一笔,就靠你们年轻人了!”然后程老师就把实现那些规则的任务交给小图了。什么?程老师为什么不自己实现?程老师这么多年的编程经验,什么样的程序没见过!这是给小图一个掌握编程经验的机会!

小图想到自己Homework1的bug都还没修完,直接就慌了。幸好,小图有个从小穿一条裤子长大的好朋友。相信屏幕前那闪耀着智慧光芒的你已经猜到了,这位好朋友就是你!快来帮小图这个忙吧!小图想请你帮忙帮他完成其中两条规则的修改。

温馨提示:小图完成的Homework1是有不少bug的,千万不要把他的代码直接提交到你的Homework1去哟:P

作业要求

在本仓库的homework1_xiaotu分支有一份由糊涂学生小图完成的Homework1。请先切换至该分支,然后修改他的game_map.py,使之满足以下新规则。

变更生命游戏细胞生死规则

从Moore Neighborhood改为Extended von Neumann Neighborhood。

Moore Neighborhood和Extended von Neumann Neighborhood均为元胞自动机的常见细胞生存规则。前者的某个细胞生死取决于其周围八连通区域细胞生存情况,而后者规则中某细胞生死则取决于其扩展四联通区域(共计八个细胞)的生存情况。具体详见Wikipedia中对两种规则的介绍。

新规则保留原有规则的中心细胞生死与决定区域内存活细胞数量的对应关系。即:

  1. 如果一个细胞周围有3个细胞为生,则该细胞为生,即该细胞若原先为死则转为生,若原先为生则保持不变;
  2. 如果一个细胞周围有2个细胞为生,则该细胞的生死状态保持不变;
  3. 在其它情况下,该细胞为死,即该细胞若原先为生则转为死,若原先为死则保持不变。

增加“墙壁”

在上述修改的基础上,增加地图元素“墙壁”。它本身与细胞一样占据地图上的一个方格,但在该方格上永远不会有细胞生成。当然,在计算周围细胞存活时,该方格按死细胞计算。墙壁对应地图格子的数字为-1,相应的,死细胞为0,活细胞为1。

作业提交

  1. 请用你的Github账号以仓库 https://github.com/ThssSE/MOOC_LifeGame 为基础Fork一个你的新仓库,将新仓库clone到本机,并以homework1_xiaotu分支为基础创建新分支homework2。
  2. 在homework2分支改动game_map.py文件,使之不出现bug。
  3. 修改game_map.py中GameMap类的reset方法,使之可以随机产生“墙壁”,然后继续修改使之满足上述所有变化后的规则。
  4. 将改动后的game_map.py提交到版本库并push至远端版本库。
  5. 在学堂在线提交你的Github用户名和版本库名,比如ThssSE和MOOC_LifeGame。