结对编程 第二阶段

一、实验目标 

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

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

二 、实验内容  

1)根据以下问题描述,练习结对编程(pair programming)实践;

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

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

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

三、实验过程

1)代码规范

    变量的命名需要有望文生义的效果,方便团队内的其他成员使用。

    标识符的长度应该符合“min-length&max-information”原则。如果标识符采用的英文单词或拼音长度太长,应该采取通用合理的缩写。

    缩进正确,要求代码简洁规范,有可读性。

    注释合理规范,要让程序员可以充分了解到函数的作用。

2)程序的总体设计 

 3)结对编程过程

      在结对编程过程中,我们两个人通过QQ进行互动,商量模块的划分和算法原理。在远程仓库的操作方面,我们使用了我的私人仓库,对方使用fork命令克隆到其本地机器上,我再在仓库中接受Pull Request。

      第一次交互我负责完成程序的大体框架,对方负责细分;

      第二次交互我们两个一起对第一次交互的成果进行优化改良,提出自己的观点甚至喜好;

      第三次交互我负责对整体的结果进行总结测试,对方最后进行评估。

 4)功能实现情况

 1.初始化矩阵

      这个模块我们使用srand和sand函数,在0和1的之间内随机选择数字,设定细胞的初始状态。

void Date()
{
    int i,j;
    srand((unsigned)time(NULL));
    for(i=0;i<N;i++){
        for(j=0;j<N;j++)
            map[i][j]=rand()%2;
    }
}

  2.游戏规则

      这个模块我们设定细胞的存活条件,来判断下一迭代细胞的存活情况。

void cells_state(int i,int j)
{
    int living_cellsnumber=0;
    living_cellsnumber=count_cellsNumber(i,j);
    if(chess[i][j]==1){
        if(living_cellsnumber<2)
            chess0[i][j]=0;//如果一个生命周围的生命少于2个,它在回合结束后死亡。
        else if(living_cellsnumber>3)
            chess0[i][j]=0;//如果一个生命周围的生命超过3个,它在回合结束后死亡。
        else if(living_cellsnumber==2||living_cellsnumber==3)
            chess0[i][j]=1;//如果一个生命周围有2或3个生命,它在回合结束时保持原样。
    }
    else if(chess[i][j]==0){
        if(living_cellsnumber==3)
            chess0[i][j]=1;//如果一个死格周围有3个生命,它在回合结束时获得生命。
    }
}

 

3.更新并打印地图

      count_cellsNumber()函数统计当前细胞周围8个细胞的存活情况,把统计的数据交给cells_state()来判断下一迭代细胞的存活情况,并交给run_game()函数来打印输出。

int count_cellsNumber(int xline,int yline)
{
    int living_cellsnumber=0,i,j;
    for(i=-1;i<=1;i++){
        for(j=-1;j<=1;j++){
            if(!(i==0&&j==0)&&chess[xline+i][yline+j]==1)
                living_cellsnumber++;
        }
    }return living_cellsnumber;
}
void run_game()
{
    int i,j,flag=0;
    while(1){
        system("cls");
        for(j=1;j<N+1;j++){
            for(i=1;i<N+1;i++){
                if(chess[i][j]==1)
                    printf("█");
                else
                    printf("  ");
            }
printf("\n"); }
for(j=1;j<N+1;j++){ for(i=1;i<N+1;i++){ cells_state(i,j); } } Sleep(10);
if(flag==0){
  getchar();
  flag=1;
} } }

 这是结果预览图:

5)github地址

      https://github.com/dss-nnh/my-travel-plans

 6)实验小结

      在第一阶段时,我认为初始化细胞矩阵时应该自己设定每个细胞的存活状态,但后来证明这样非常耗费时间精力,所以采取随机生成状态的方案。

      在合并branch时,我们遇到了问题,导致合并始终不成功,最终通过网上询问查找相关资料后才找到问题所在。

posted @ 2020-04-06 00:36  ←→不分  阅读(197)  评论(0编辑  收藏  举报