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

一、实验目标

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

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

二 、实验内容

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

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

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

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

三、实验过程

在上一阶段中,我们小组最初选定的是使用python语言实现生命游戏,但在后来的实践中,我们遇到了很多问题,或者是熟悉度的问题之类,最终我们商定放弃pyhon写法,采用c语言进行实验的完成。

1.代码规范

1-1:程序块要采用缩进风格编写,缩进的空格数为4个。

1-2:相对独立的程序块之间、变量说明之后必须加空行。

1-3:较长的语句(>80字符)要分成多行书写,长表达式要在低优先级操作符处划分新行,操作符放在新行之首,划分出的新行要进行适当的缩进,使排版整齐,语句可读。

1-4:不允许把多个短语句写在一行中,即一行只写一条语句。

2.命名规范

2.1.变量名的开头必须是字母或下划线,不能是数字。实际编程中最常用的是以字母开头,而以下划线开头的变量名是系统专用的。

2.2. 变量名中的字母是区分大小写的。比如 a 和 A 是不同的变量名,num 和 Num 也是不同的变量名

2.3.变量名绝对不可以是C语言关键字

在确认好代码相关的规范之后,我们开始进行我们的实验。

3.编写尝试

3.1.首先,我们组所想的是 这个生命游戏有一个初始态,我们将整个游戏用个二维数组进行实现和展示,所以最开始我们可以将所有值赋真或者假表示生存或者死亡(这里我们用0和1)代替。

当然,通过random函数对数组进行随机的赋0或者1的值也是可行的,只不过为了简化,我们偷懒的对所有值赋1;

3.2接着我们需要一个打印函数,用于输出这个数组,也就是这个游戏的状态,在代码中就是show() 这个函数,通过两个for遍历,输出所有的状态,这里我们用“■”“□”来表示生存和死亡。

3.3然后,就是最重要的实现函数。很显然,二维数组中的每一个元素都有一个下标,那么他们的周围的元素是不是很容易用下标的形式表现出来?由于我们已经对每个元素的值赋了1,他周围

有多少生存的元素就很容易计算(只需要相加即可),接着我们将计算的数值进行判断,在按照生命游戏的规则进行更新。整个生命游戏就已经完成了。这里的更新用的是updateWithoutInput()。

这样整个游戏就被分成了初始化,更新状态,打印 三个状态。我们按照各自的功能进行代码的编写即可。

4.过程

4.1 本次实验代码部分刚开始是由我进行编写,后由吴雨亭同学负责完善和调试的。

git上commit的操作忘记截图了。。

4.2.代码部分

初始化函数 starup()

void startup() // 数据初始化
{
	int i,j;
	for (i=0;i<High;i++) // 初始化
		for (j=0;j<Width;j++)
		{
			cells[i][j] = 1;
		}
}

更新函数updateWithoutInput()

    void updateWithoutInput()  // 与用户输入无关的更新
{	
	int NewCells[High][Width]; // 下一帧的细胞情况
	int NeibourNumber; //统计邻居的个数
	int i,j;
	for (i=1;i<=High-1;i++)
	{
		for (j=1;j<=Width-1;j++)
		{
			NeibourNumber = cells[i-1][j-1] + cells[i-1][j] + cells[i-1][j+1]
				+ cells[i][j-1] + cells[i][j+1] + cells[i+1][j-1] + cells[i+1][j] + cells[i+1][j+1];
			if (NeibourNumber==3)
				NewCells[i][j] = 1;  
			else if (NeibourNumber==2)
				NewCells[i][j] = cells[i][j];
			else
				NewCells[i][j] = 0; 
		}
	}
	
	for (i=1;i<=High-1;i++)
		for (j=1;j<=Width-1;j++)
			cells[i][j] = NewCells[i][j];
		
}

打印函数show()

        void show()  // 显示画面
{
	clean(0,0);  // 清屏
	for (i=1;i<=High-1;i++)
	{
		for (j=1;j<=Width-1;j++)
		{
			if (cells[i][j]==1)
				printf("□");  //   输出活的细胞
			else
				printf("■");  //   输出空格			
		}
		printf("\n");
	}
	Sleep(50);
}	

调用sleep函数来控制一下刷新速度

main函数

    void main()
{
	startup();  // 数据初始化	
//  游戏循环执行
	while(1){
			show();  // 显示画面
			updateWithoutInput();  // 与用户输入无关的更新
	//	updateWithInput();  // 与用户输入有关的更新
	}
}

4.3 运行截图

4.4.项目地址
(https://github.com/Liovee/life-game-)

四.实验总结

当初pull的时候出现了错误,提示了```
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

究其原因,是当初本宝宝在创建远程仓库的时候勾选了initialize this repository README.MD选项

只需要 git pull --rebase origin master

git push -u origin master

还有就是,忘得差不多了,这次实验恰逢其时,在复习的时候更加深刻地掌握相关知识。

###总结:

这次实验既帮我和我的队友加深了git的熟练度

结对编程过程中,明显感觉效率不高,但是能深刻体会到别人的编程思想,有利于子自己以后的变成开发实践。

其次,即使两个人完成的依旧欠缺很多功能,并不完善,希望接下来能继续完善相关功能。

猜你喜欢

转载自www.cnblogs.com/Liovee/p/12612491.html