实验二 结对编程实验(内容补充)
一、实验目标:
1)体验敏捷开发中的两人合作。
2)进一步提高个人编程技巧与实践。
二 、实验内容:
1)根据以下问题描述,练习结对编程(pair programming)实践;
2)要求学生两人一组,自由组合。每组使用一台计算机,二人共同编码,完成实验要求。
3)要求在结对编程工作期间,两人的角色至少切换 4 次;
4)编程语言不限,版本不限。建议使用 Python 或 JAVA 进行编程。
三、实验记录过程
1.问题描述
课题名称:生命游戏
课题描述:游戏开始时, 每个细胞可以随机地(或给定地)被设定为“生”或“死”之一的某个状态, 然后,再根据如下生存定律计算下一代每个细胞的状态: 每个细胞的状态由该细胞及周围 8 个细胞上一次的状态所决定; 如果一个细胞周围有 3 个细胞为生,则该细胞为生,即该细胞若原先为死则转为生,若原先为生则保持不变; 如果一个细胞周围有 2 个细胞为生,则该细胞的生死状态保持不变; 在其它情况下,该细胞为死,即该细胞若原先为生则转为死,若原先为死则保持不变。
2.编码规范
●函数名与变量名采用帕斯卡命名规范,即大驼峰式。
●宏定义名均为大写
●变量以及数组的定义靠前,注释详略得当,缩进简单明了
3.程序整体设计
4.程序的实现
采用主函数调动子函数,主函数main以及两个子函数RawDate()进行游戏的初始化,自动播种种子,进行显示;RunLifeGame()模块推进游戏的进行在地图中显示一代细胞通过算法规则繁衍下一代,由此依次进行。代码实现:
#include "stdio.h"
#include "string.h"
#include "windows.h"
#include <iostream>
#include <time.h>
#define HIGH 20 //游戏尺寸
#define WIDTH 40
int CellsMap[HIGH][WIDTH]; //初始状态细胞地图
int NewCellsMap[HIGH][WIDTH]; //下一代细胞地图
void RawDate() //游戏数据初始化
{
srand((unsigned)time(NULL)); //srand()就是给rand()提供种子seed
int i,j;
for(i=0;i<HIGH+1;i++)
for(j=0;j<WIDTH+1;j++)
CellsMap[i][j]=rand()%2; //细胞初始状态随机
}
void RunLifeGame() //进行游戏
{
int i,j,s=0;
while(1)
{ system("cls");
for(i=1;i<HIGH;i++) //打印初始状态细胞地图
{
for(j=1;j<WIDTH;j++)
if(CellsMap[i][j]==1)
printf("■");
else if(CellsMap[i][j]==0)
printf("□");
printf(" ");
}
for(i=1;i<HIGH;i++)
for(j=1;j<WIDTH;j++)
{ /*计算一个细胞周围8个格子内的活细胞总量*/
s=CellsMap[i-1][j-1]+CellsMap[i-1][j]+CellsMap[i-1][j+1]+CellsMap[i][j-1]+CellsMap[i][j+1]+CellsMap[i+1][j-1]+CellsMap[i+1][j]+CellsMap[i+1][j+1];
if(CellsMap[i][j]==1) //如果细胞为生
{
if(s==3) //周围有3个活细胞时,该细胞下一代转为生细胞
NewCellsMap[i][j]=1;
else if(s==2) //周围有2个活细胞时,该细胞下一代状态不变
NewCellsMap[i][j]=CellsMap[i][j];
else
NewCellsMap[i][j]=0; //其它情况时,该细胞下一代转为死细胞
}
}
for(i=1;i<HIGH;i++) //打印新一轮细胞地图
for(j=1;j<WIDTH;j++)
CellsMap[i][j]=NewCellsMap[i][j];
Sleep(1000);
}
}
int main()
{
system("color f0");
RawDate();
RunLifeGame();
}
5.运行结果
6.项目Github地址
https://github.com/liang-xue/Life-Game
实验小结
第一次结对编程相比较于之前的独自编程,既是一个新鲜事物,同时也是一次相互交流学习的过程。结对编程既是对基本功的考验,也是对你合作能力的检验。在以后的工作中,合作完成一个项目是经常见到的事情,所以我们可以从现在开始进行尝试。在合作中学习到更多我们所不知道的事情。这次实验队友给了我很多的帮助,非常耐心的帮我解答问题!在这次实验也暴露出了许多问题,基本功不是很扎实,但通过这次实验很大的提升了我的兴趣。在以后的学习中会重点弥补之前的不足。