结对编程 第二阶段

一、实验目标: 

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、程序的总体设计(附图说明模块之间的关系)

结对编程 第二阶段_第1张图片

  

3、程序结对编程过程(附图)及功能实现情况(附代码和图)

1)建立本地仓库以及代码文件夹

 

结对编程 第二阶段_第2张图片

 2)建立本地仓库与远程仓库的连接

 结对编程 第二阶段_第3张图片

 

 

3)我(李)第一次添加了头文件部分的代码(王负责审查,随时提醒错误)

 

 

 1 #include
 2 #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)之后,交换,王 负责编写主函数,以及定义子函数(李 负责审查代码,提醒规范性问题,随时合并修改)

结对编程 第二阶段_第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()   //键盘监控

结对编程 第二阶段_第5张图片

 

 

6)交换,王 负责编写代码,李 审查合并修改。

结对编程 第二阶段_第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)最后一起进行差错改错,规范代码,增添注释,完成了最终的任务。

 

结对编程 第二阶段_第7张图片

 

 

10)运行截图

 

 

 结对编程 第二阶段_第8张图片

 

 

4、项目github地址(附图)

https://github.com/lili-li1/practice

结对编程 第二阶段_第9张图片

 

5、实验总结

经过这次结对编程的实验经历,让我对结对编程有了更多的了解,接触和学习到了很对以前不知道的新知识。虽然在实验完成的过程中遇到了很多的困难,但是在和队友的相互鼓励之下,我们还是完成了本次实验任务。最大的收获还是熟练了gitup的相关操作,特别是pull resqust 和fork操作,因为在实验过程只能需要反复的用到这些操作。总的来说,这次实验让我收获了很多,也体会到了团队协作的力量,希望以后有更多的机会和小伙伴们合作学习,共同进步。

你可能感兴趣的:(结对编程 第二阶段)