实验二 结对编程(第二阶段)

一、实验目标:

1)体验迅捷开发中的两人合作。

2)进一步提高个人编程技巧与实践。

二、实验内容:

1)根据以下问题描述,联系结对编程实践;

2)要求学生两人一组,自由组合。每组使用一台计算机,两人共同编码,完成实验要求。

3)要求在结对编程工作期间,两人的角色至少切换4次;

4)编程语言不限,版本不限。建议使用Python或JAVA进行编程。

三、问题描述:

生命游戏

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

    游戏在一个类似于围棋棋盘一样的,可以无限延伸的二维方格网中进行。例如,设想每个方格中都可放置一个生命细胞,生命细胞只有两种状态:“生”或“死”。图中,用黑色的方格表示该细胞为“死”, 其它颜色表示该细胞为“生” 。

    游戏开始时, 每个细胞可以随机地(或给定地)被设定为“生”或“死”之一的某个状态, 然后,再根据如下生存定律计算下一代每个细胞的状态:

  • 每个细胞的状态由该细胞及周围 8 个细胞上一次的状态所决定;

  • 如果一个细胞周围有 3 个细胞为生,则该细胞为生,即该细胞若原先为死则转为生,若原先为生则保持不变;

  • 如果一个细胞周围有 2 个细胞为生,则该细胞的生死状态保持不变;

  • 在其它情况下,该细胞为死,即该细胞若原先为生则转为死,若原先为死则保持不变。输入: 
    [
      [0,1,0],
      [0,0,1],
      [1,1,1],
      [0,0,0]
    ]
    输出: 
    [
      [0,0,0],
      [1,0,1],
      [0,1,1],
      [0,1,0]
    ]

四、其他要求:

1)在博客园https://www.cnblogs.com/注册个人账号,记录二个人的编程实现过程,遇到的问题及解决方法。

2)在github上托管二个人项目的代码,采用git对项目代码进行管理

    结对编程(英语:Pair programming)是一种敏捷软件开发的方法,两个程序员在一个计算机上共同工作。一个人输入代码,而另一个人审查他输入的每一行代码。输入代码的人称作驾驶员,审查代码的人称作观察员(或导航员)。两个程序员经常互换角色。

    在结对编程中,观察员同时考虑工作的战略性方向,提出改进的意见,或将来可能出现的问题以便处理。这样使得驾驶者可以集中全部注意力在完成当前任务的“战术”方面。观察员当作安全网和指南。结对编程对开发程序有很多好处。比如增加纪律性,写出更好的代码等。

 远程结对编程,也称作虚拟结对编程或分布式结对编程,是指两个程序员不在同一地点,通过协同编辑器,共享桌面,或远程结对编程的IDE插件进行的结对编程。有些团队尝试使用VNC和RealVNC、TeamView,每个程序员使用他们自己的计算机。其他人使用基于文本的GNU Screen的多显示模式。苹果公司的Mac OS X包含内建的屏幕共享应用。

  在进行远程工作时,使用结对编程方式能够有效地增进开发者之间的互动,并促进团队的良好关系。它不仅能够促进信息的流动,还能够防止开发者注意力分散的现象。你可以多尝试一下各种工具,以找到一种能够适合你进行远程结对的方式

1、采用QQ、TeamView等远程协作工具实现桌面分享,采用github远程仓库托管代码

2、 采用协同在线编程平台https://coding.net/

3、Floobits:屏幕共享和终端 /IDE 协作

    https://floobits.com

    可以认为 Floobits 可当成是代码版的 Google Docs,因为编辑的内容可以实时在页面上看到。Floobits 支持 Sublime Text 、 Atom 、 Neovim 、 Emacs 和 IntelliJ IDEA 等多种开发工具,全都和 Google Hangouts 整合起来了。

五、实验过程:

1)队伍名称、成员博客地址以及仓库地址:

  队伍名称:写的都队

  王尹凡:https://www.cnblogs.com/grandrat/

  乔克祥:https://www.cnblogs.com/jsjqkx/

  仓库地址:https://github.com/programmingsky/Coop_Program

2)项目讨论:

  开始结对编程之前,我们首先做的就是在网上查阅关于生命游戏编程的资料,JAVA语言也进行了适当的复习。之后我们通过讨论确定了要使用的IDE为eclipse,因为这个软件我们上个学期一直在使用,对它的操作较为了解,不会出现不会使用编辑器的情况,而且还可以远程协作,因为疫情,我们只能通过线上讨论的方式来完成结对编程,为了使沟通更加方便,我们决定使用QQ的语言对话功能,实时的对代码进行操控与有效的沟通,方便角色的互换。

3)设计思路:

  通过数组来确定细胞的位置以及其旁边细胞的死活,编写count函数来计算细胞周围其他细胞的数量,进而确定该细胞的下一状态。

4)第一次编写代码:

  首先由王尹凡担任驾驶员,乔克祥为领航员,中途角色共计切换3次。中途遇到的问题主要是如何确定细胞周围其他细胞的数量,解决的思想是通过数学上的坐标法来确定,分别计算细胞上下左右的细胞数量,之后求和得到。下图是第一次编写的程序代码以及提交GitHub的截图。下一阶段解决窗口的问题。

 

 

 

 

  

 

 

 

 5)第二次编写,修改程序:

  通过对之前编写的程序的分析,我们决定还需要再添加一个辅助数组,来确定当前细胞的下一状态,并且将棋盘大小改为全局变量N,方便更改。添加了windows.h头文件,还添加了初始条件,确定初始时细胞的状态。下图为部分代码和提交记录。

 

 

 

 

 六、实验结果:

  1)起始状态:

 

   2)运行后:

 

   3)最终结果:

 

 

 

七、实验小结:

  通过本次的结对编程实验,复习巩固了代码知识,认识到了结对编程在现实生活中的作用与好处,提高了代码编写的乐趣,同时也提高了代码编写的效率。

  加深了对命令的记忆,更加熟练的使用GitHub协助开发程序。

 

posted @ 2020-03-21 12:41  计算机学习  阅读(307)  评论(0编辑  收藏  举报