结对编程:黄金点游戏
在进行了为期两周的结对编程项目中完成了黄金点游戏的编程,该程序采用C语言进行编程。可能由于C语言本身程序的原因,导致的界面并不是像其他的编程语言所写出来的那么方便,在完成了所有的功能的实现之后,我们尽力使其能够方便的进行输入输出。使其能够方便的看到。本次编程采用的是利用VS软件进行的。
在这两周的时间里,通过与队友的一起努力,使我认识到了合作的重要性,其实有伙伴的情况下,有时候的确能够激励我们进行编程。虽然有时候思想上会有些不一致,但正因为这些不一致让我们对程序的优化有了更大的提升,是程序能够进一步的完善起来。虽然这个程序算是一个小程序,但是经过反复的讨论,与交流,是我们知道虽然这是一个小程序,但是我们使它更加的贴近真实的游戏程序。
下面具体说说详细的程序的内容吧。程序主要结构分成两部分,第一部分是进行游戏部分,第二部分是查询结果的部分。进行游戏的部分,采用了较多的for循环结构,以及数组。具体说明一下,程序中的数据的存储采用的是数组的形式。程序中含有一个全局数组,用来实现所有的数据的存储。程序的主要功能上都有详细的注释。
第一部分是进行游戏的部分,首先我们是先对一轮游戏的人数进行选择,接着用一个for循环使我们能够接受来自玩家的游戏数据,这里已经说明了数字的取值范围。具体程序如下:
int i, a, j;
int num[1000], sum = 0, l, m, G, num2[1000], num3[100], num4[100], t;
printf("请输入本轮参加游戏的人数\n");
scanf("%d", &a);//玩家人数
for (i = 0; i < a; i++)//输入各个玩家的数据
{
printf("请第%d成员输入数据",i+1);
scanf("%d", &num[i]);
if (num[i]<0)
{
exit(0);
}
else
{
if (num[i]>100)
{
exit(0);
}
}
}
接下来是进行的G值的求解,将所有的数据重新加起来之后,然后按照公式将G值求解出来。代码如下:
for (i = 0; i < a; i++)
{
l = num[i];
sum = sum + l;
}
G = (int)(sum / a*0.618);//G值
G值求完之后,根据离G值的范围给定相应玩家的成绩。首先先求距离,将每个玩家的数字减去G值后,再利用绝对值求出距离,然后放在两个数组里。一个是按原来顺序排的数组,另一个数组将其按照距离使用冒泡排序法进行大小排序,之后距离最小的从原先顺序的数组里找到对应项给定相应成绩;同理,找到最远距离的那个项给定相应的分数。代码如下:
for (i = 0; i < a; i++)
{
l = abs(num[i]-G);
num2[i] = l;
num3[i] = l;
}
for (i = 1; i < a; i++)//冒泡排序
{
for (j = 0; j < a - 1; j++)
{
if (num3[j] > num3[j + 1])
{
t = num3[j];
num3[j] = num3[j + 1];
num3[j + 1] = t;
}
}
}
for (i = 0; i < a; i++)//num4=0
{
num4[i] = 0;
}
for (i = 0; i < a; i++)
{
l = num3[0], m = num3[a - 1];
if (num2[i] == l)
{
num4[i] = a;
}
if (num2[i] == m)
{
num4[i] = -2;
}
}
for (i = 0; i < a; i++)//输出各个玩家的信息
{
printf("第%d个成员的成绩为%d\n",i+1, num4[i]);
}
将成绩给完之后需要将数据存入一个全局数组中,以供以后查询数据用。采用二维数组,第一维表示的是轮数。还有另外的一个全局数组,表示每轮的人数。代码如下:
for (i = 0; i < a; i++)
{
result[count][i] = num4[i];
}
num1[count][0] = a;
count++;
接下来是第二大部分,将以前玩的数据供玩家查询。利用全局数组中的数据还原出以前的成绩。即result[][]数组和num1[]数组。根据num1数组中的数值确定当时玩家的个数,然后利用这个作为控制条件将result里的数据调用出来。代码如下:
while (flag1 == 0)//查看各轮结果的比赛成绩
{
printf("请输入想查看的第几轮成绩");
scanf("%d", &n);
for (i = 0; i<num1[n - 1][0]; i++)
{
printf("第%d个成员的成绩为%d\n",i+1, result[n - 1][i]);
}
printf("是否还要继续观看,是请输入0,否按任意键退出\n");
scanf("%d", &flag1);
}
system("pause");
}
代码已经传至coding上,下面提供一组测试数据供大家参阅。
结对编程伙伴:崔志雄(2013040101007)