zoukankan      html  css  js  c++  java
  • 实验二 结对编程(阶段二)

    一、实验目标

    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("
    ");
    	}
    	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的熟练度
    
    结对编程过程中,明显感觉效率不高,但是能深刻体会到别人的编程思想,有利于子自己以后的变成开发实践。
    
    其次,即使两个人完成的依旧欠缺很多功能,并不完善,希望接下来能继续完善相关功能。
  • 相关阅读:
    oracle与DB2
    oracle ORA-01427: 单行子查询返回多个行
    mysql开发总结
    mysql show profile基本详解
    mysql批量插入数据
    mysql索引详解
    mysql性能调优
    MySQL优化
    mysql主从调优
    mysql主从复制
  • 原文地址:https://www.cnblogs.com/Liovee/p/12612491.html
Copyright © 2011-2022 走看看