结对编程之黄金点游戏

项目要求:

      黄金点游戏是一个数字小游戏,其游戏规则是:

      N个同学(N通常大于10),每人写一个0~100之间的有理数 (不包括0或100),交给裁判,裁判算出所有数字的平均值,然后乘以0.618(所谓黄金分割常数),得到G值。提交的数字最靠近G(取绝对值)的同学得到N分,离G最远的同学得到-2分,其他同学得0分。玩了几天以后,大家发现了一些很有意思的现象,比如黄金点在逐渐地往下移动。

      现在请大家根据这个游戏规则,编一个可以多人一起玩的小游戏程序,要求如下:

      1、本作业属于结对编程项目,必须由二人共同完成,并分别将本次作业过程发到博客,同时将本次作业源代码提交到codeing系统;

      2、如果可能的话尽量以C/S或B/S方式实现,即利用服务器接收和处理所有玩家提交的数字,并将结果反馈给各玩家,玩家可以通过客户端提交的数字;

      3、如果采用单机方式实现的话,需要为用户提供便利的输入界面;

      4、该游戏每次至少可以运行10轮以上,并能够保留各轮比赛结果。

结对成员:张艺鑫  李伟亮

李伟亮的coding地址:https://coding.net/u/lwl123456

李伟亮的博客http://www.cnblogs.com/lwl123/

我的coding地址:https://coding.net/u/zhangyixin

需求分析:

这个项目要求的是从N个用户处获取数据,经过G点运算获取其差值,找出差值最大者和差值最小者对其进行分数赋予,在预设轮数后结束游戏并输出结果。思路清晰明了,大致分为以下几个步骤:

1.从N个用户处获取数据

2.获取G值,G值是此程序用于运算的关键数据,算法为所有用户提供数字的平均值与0.618的乘机。

3.获取用户数据中距离G点最近的值和最远的值,即获取赢家数据保存下标和输家数据保存下标,先调用之前的获取G点方法得到G的值,再把所有数据分别与之相减取绝对值得到差值数组,最后把差值数组内的每一个值分别与G值比较,保存下差距最大和差距最小者的下标。

4.数据重复处理,获取赢家成绩和输家成绩后,我们发现如果赢家不止一位,输家也不止一位,两个位置都有多个人占据,那么上面的代码就不能满足需求,所以要进行数据重复处理,获取完最大值和最小之后,反回去对原始距离数据进行对比,得出最大值和最小值的数据下标。

5.排序,游戏运行完毕,用户的成绩各不相同,所以需要将其排序输出来使结果。

结对编程感受:

    本次结对编程感触良多。先从程序角度讲,对我而言,我并不太会编程,甚至说不太喜欢编程。但是本次结对编程一定程度上给了我信心。有不会的问题我们会互相帮助,但是仍然有许多地方没有解决。比如说程序的功能方面。一开始我们设计这个程序的出发点,是想让每个人的得分都能够被记录,并且完成累加操作,但是我们实际运行之后,有许多问题都没能够在规定时间内解决。所以由于时间所限,我们只好删繁就简,将程序改为得分不累加,但是这样改的话,这个程序的功能就不完整了,但是我相信,继续编下去的话,我们一定会解决这个问题。

    还有几个遇到的问题就是,字符格式的问题。在一开始运行的时候,该程序的for循环,很多都没能运行。无论怎样改,for语句中的printf都无法进行,这耽误了我们很长的时间。但是最终我们解决了这个问题,就因为格式不匹配,无法进行比较。比如if(amin==fabs(a[i]-G))这句,我设置的amin是int类型,而fabs(a[i]-G)我设置的是double型的,这就导致两边的类型不一致,无法比较,也就导致这个if他永远不成立,所以里头不会运行。这是我们经过讨论很久才解决,耽误了不少时间。诸如此类问题还有很多,就不一一列举了。

    虽然这些问题耽误了我们很长的时间,但我们在编程方面也有了长足的进步,正所谓吃一堑长一智。即使程序最终仍然功能不全,不完美,但是我们付出了辛勤的汗水,并且体会到了编程的快乐,增长了编程的信心。所以在接下来的团队编程里面,我已经有足够的信心来面对了,也感谢这次结对编程。

 

原文地址:https://www.cnblogs.com/zhangyixin/p/5372329.html