一、实验目标:
1)体验敏捷开发中的两人合作。
2)进一步提高个人编程技巧与实践。
二 、实验内容:
1)根据以下问题描述,练习结对编程(pair programming)实践;
2)要求学生两人一组,自由组合。每组使用一台计算机,二人共同编码,完成实验要求。
3)要求在结对编程工作期间,两人的角色至少切换 4 次;
4)编程语言不限,版本不限。建议使用 Python 或 JAVA 进行编程。
三、实验过程与记录
1、代码规范
1) 空行
空行起着分隔程序段落的作用。空行得体将使程序的布局更加清晰
2) 空格
规则一:关键字之后要留空格。
规则二:函数名之后不要留空格,应紧跟左括号(
,以与关键字区别。
规则三:(
向后紧跟;)
、,
、;
这三个向前紧跟;紧跟处不留空格。
规则四:,
之后要留空格。如果;
不是一行的结束符号,其后要留空格。
规则五:赋值运算符、关系运算符、算术运算符、逻辑运算符、位运算符,等双目运算符的前后应当加空格。
3) 成对书写
成对的符号一定要成对书写,如 ()、{}。不要写完左括号然后写内容最后再补右括号,这样很容易漏掉右括号,尤其是写嵌套程序的时候。
4) 缩进
缩进是通过键盘上的 Tab 键实现的,缩进可以使程序更有层次感。原则是:如果地位相等,则不需要缩进;如果属于某一个代码的内部代码就需要缩进。
5) 对齐
对齐主要是针对大括号{}
说的:
规则一:{
和}
分别都要独占一行。互为一对的{
和}
要位于同一列,并且与引用它们的语句左对齐。
规则二:{}
之内的代码要向内缩进一个 Tab,且同一地位的要左对齐,地位不同的继续缩进。
6) 代码行
规则一:一行代码只做一件事情,如只定义一个变量,或只写一条语句。这样的代码容易阅读,并且便于写注释。
规则二:if、else、for、while、do 等语句自占一行,执行语句不得紧跟其后。
7)注释
C语言中一行注释一般采用//…
,多行注释必须采用/*…*/
。注释通常用于重要的代码行或段落提示。
2、程序的总体设计(附图说明模块之间的关系)
3、程序结对编程过程(附图)及功能实现情况(附代码和图)
1)建立本地仓库以及代码文件夹
2)建立本地仓库与远程仓库的连接
3)我(李)第一次添加了头文件部分的代码(王负责审查,随时提醒错误)
1 #include2 #include 3 #include 4 #include 5 #include 6 #include 7 __int8 world[102][202] = {0}; 8 IMAGE imgLive, imgEmpty; // 定义活细胞和无细胞区域的图案 //创建两个图像对象。 9 10 MOUSEMSG m; //定义鼠标消息结构体的变量,并定义指向它的指针 11 MOUSEMSG *_m = &m; 12 13 char s1[20] = "速度:1", s2[20] = " "; //速度值字符串s1,s2 14 int Speed = 125; // 游戏速度(毫秒)
4)之后,交换,王 负责编写主函数,以及定义子函数(李 负责审查代码,提醒规范性问题,随时合并修改)
1 void start(); //世界初始化 2 void kongjian(int x1, int x2, char *s); //控件函数 3 void zuotu(MOUSEMSG *_m); //作图 4 void shengsi(); //生死判断 5 void shuru(); //输入函数 6 void shuchu(); //输出函数 7 void dy_world(); //打印世界 8 void shubiao(); //鼠标监控与操作 9 void RandWorld(); //随机设置世界 10 void huitushebei(); //建立绘图设备 11 void jianpanjiankong(); //键盘监控 12 13 int main() 14 { 15 16 17 initgraph(1800, 900); //创建一个尺寸为 1800x900 的绘图环境,原点坐标(0,0),位于左上角 18 start(); //世界初始化 19 huitushebei(); //建立绘图设备 20 while (true) 21 { 22 jianpanjiankong(); //键盘监控 23 shubiao(); //鼠标监控与操作 24 dy_world(); // 绘制世界 25 shengsi(); // 生死判断 26 Sleep(Speed); 27 } 28 return 0; 29 }
5)第二次交换,李 负责编写调试代码(start()函数和键盘操控函数的编写),王 负责审查。
1 void start()
2 void jianpanjiankong() //键盘监控
6)交换,王 负责编写代码,李 审查合并修改。
7)交换,李 负责完成 生死判断 部分的代码
1 void shengsi() //生死判断 2 { 3 __int8 tmp[102][202] = { 0 }; // 临时数组 4 int i, j; 5 int sum=0; 6 for (i = 1; i < 101;i++) 7 for (j = 1; j < 201; j++) 8 { 9 // 计算周围活着的生命数量 10 sum = world[i + 1][j] + world[i + 1][j - 1] + world[i][j - 1] + world[i- 1][j - 1] 11 + world[i - 1][j] + world[i - 1][j + 1] + world[i][j + 1] + world[i + 1][j + 1]; 12 13 // 计算当前位置的生命状态 14 switch (sum) 15 { 16 case 3: tmp[i][j] = 1; break; 17 case 2: tmp[i][j] = world[i][j]; break; 18 default: tmp[i][j] = 0; break; 19 } 20 } 21 memcpy(world, tmp, 102 * 202 * sizeof(bool)); //从tmp中复制102 * 102 * sizeof(__int8)长度的数据给world 22 23 24 }
8) 王 负责完成最后的输入输出函数,以及界面地图的打印,我负责审查,合并修改。
9)最后一起进行差错改错,规范代码,增添注释,完成了最终的任务。
10)运行截图
4、项目github地址(附图)
https://github.com/lili-li1/practice
5、实验总结
经过这次结对编程的实验经历,让我对结对编程有了更多的了解,接触和学习到了很对以前不知道的新知识。虽然在实验完成的过程中遇到了很多的困难,但是在和队友的相互鼓励之下,我们还是完成了本次实验任务。最大的收获还是熟练了gitup的相关操作,特别是pull resqust 和fork操作,因为在实验过程只能需要反复的用到这些操作。总的来说,这次实验让我收获了很多,也体会到了团队协作的力量,希望以后有更多的机会和小伙伴们合作学习,共同进步。