一、实验目标:
1)体验敏捷开发中的两人合作。
2)进一步提高个人编程技巧与实践。
二 、实验内容:
1)根据以下问题描述,练习结对编程(pair programming)实践;
2)要求学生两人一组,自由组合。每组使用一台计算机,二人共同编码,完成实验要求。
3)要求在结对编程工作期间,两人的角色至少切换 4 次;
4)编程语言不限,版本不限。建议使用 Python 或 JAVA 进行编程。
三、问题描述(二选一)
1)生命游戏
生命游戏是英国数学家约翰·何顿·康威在 1970 年发明的细胞自动机,它包括一个二维矩形世界,这个世界中的每个方格居住着一个活着的或死亡的细胞。一个细胞在下一个时刻生死取决于相邻八个方格中活着的或死了的细胞的数量。如果相邻方格活着的细胞数量过多,这个细胞会因为资源匮乏而在下一个时刻死去;相反,如果周围活细胞过少,这个细胞会因太孤单而死去。
游戏在一个类似于围棋棋盘一样的,可以无限延伸的二维方格网中进行。例如,设想每个方格中都可放置一个生命细胞,生命细胞只有两种状态:“生”或“死”。图中,用黑色的方格表示该细胞为“死”, 其它颜色表示该细胞为“生” 。
游戏开始时, 每个细胞可以随机地(或给定地)被设定为“生”或“死”之一的某个状态, 然后,再根据如下生存定律计算下一代每个细胞的状态:
每个细胞的状态由该细胞及周围 8 个细胞上一次的状态所决定;
如果一个细胞周围有 3 个细胞为生,则该细胞为生,即该细胞若原先为死则转为生,若原先为生则保持不变;
如果一个细胞周围有 2 个细胞为生,则该细胞的生死状态保持不变;
在其它情况下,该细胞为死,即该细胞若原先为生则转为死,若原先为死则保持不变。
结对编程 第一周记录
选题 | 生命游戏 |
开发工具 | Eclipse |
组员学号 | 3170701128、31707011 |
Github地址 | https://github.com/wbr1224/LifeGame |
博客园地址 |
一、代码规范准备
此次结对编程我们选用的语言是Java,相应的代代码规可参考这一篇博文https://www.cnblogs.com/xiaocai0923/p/10698824.html。
二、敏捷开发、结对编程理解
我是第一次尝试结对编程,我觉得在协作的时候最大的问题是编程思路。由于我们缺乏代码练习、编程经验不足,我写的方法和我的partner写的方法不能很好兼容。当然还有些小的逻辑错误,在一起编程的时候也没发现,还需多加练习,这样两个人可以很好的互补。关于对结对编程的理解,可以参考这一篇博文https://www.cnblogs.com/lcw/p/3601257.html。
三、对于生命游戏的分析
生命游戏的规则不在赘述了,这篇博客里介绍了很多种玩法https://www.cnblogs.com/lfri/p/9733883.html,还有一个模拟软件Golly(https://pan.baidu.com/s/1dUrbioy7Ai9Q2_4Tb5vWwQ 提取码:bl5n )可以随意设定初始条件,蛮有趣的。
(1)数据结构
我们采用二维数组来构建游戏,即Cell二维矩阵,Cell是一个类,将会在下面介绍。
(2)类方法描述
经过讨论后,我们决定写三个类,分别是Cell、Map、showGame。
Cell:
作用:Cell类包含了当前细胞的状态,周围活细胞数
主要方法:含参数status的构造方法public Cell(int stau) ,设定下一轮状态的方法public void setNextStatus();
Map:
作用:Map类用于构造地图,继承了Jpanel,使用drawrect()、fillrect()方法画矩形
主要方法:更新地图上所有细胞的下一轮状态(death or live)public void updateStatus(),一个重写方法用于绘制矩形public void paintComponent(Graphics g)
showGame:
作用:这是一个总调用的类,基础了JFrame
主要方法:含有一个构造方法public showGame()
类名 | 包含字段 | 包含方法 |
Cell | int Status
int LivingNum |
public Cell(int stau) ; public void setNextStatus(); |
Map |
int Height |
public void updateStatus(); public void paintComponent; |
showGame | final Map m; | public showGame() |
(3)基本流程
初步设计的基本流程如下:
四、初步成果
经过了前几天的讨论,查阅资料、我们已经写完基本的部分。总的来说代码量不是很大,很快就能写完,只是在GUI的部分发生了一些小错误,百度百度也就会了(Java的GUI不太好用)
附gif:
多试几次会有比较有趣的图案
当然还有一些不完善的,时间有限下周再继续讨论修改。
来源:https://www.cnblogs.com/cswbr/p/12499628.html