结对编程:黄金点游戏
黄金点游戏是一个很简单的小游戏,在C语言环境下利用数组与for循环就可完成。但是在提供输入界面的前提要求下,我和我的搭档潘猛飞在简单讨论后大胆决定利用Java来实现。
由于我们以前没有针对Java进行学习,所以这次编程遇到了很多问题,虽然在图书馆借阅了Java方面的书,但是还是有着不小的难度,为保险起见我们先画了流程图来确保基础功能的实现。程序的主体我们采用了三个数组,二维数组numn[][]用来存储游戏中的数,当然这个数是手动输入。而数组goal[]中存放游戏中的数与G之间差的绝对值,即设每轮游戏中输入的数为:x1,x2,x3,......,xn,goal[i]=|xi-(x1+x2+x3+......+xn)/n*0.618|(1<=i<=n)。而通过对goal[]数组中的数比较大小得到最大goal[i]与最小goal[j]以后对计分数组gan[]中的gan[i]和gan[j]进行计分。采用for循环,并且添加输入输出之后,游戏每进行一轮,打印一次得分情况,即输出数组gan[]。
import java.awt.event.MouseEvent; import java.util.Scanner; public class shiyan4 { @SuppressWarnings("resource") public static void main(String args[]) { Scanner in=new Scanner(System.in); //使用Scanner类定义对象 double numn[][] = new double [100][100]; double goal[] = new double [100]; double gan[] = new double [100]; double max=0,min=100; double sum=0,G=0; System.out.println("请输入人数mump"); double nump=in.nextDouble(); //接收float型数据 System.out.println("请输入游戏次数mumg"); double numg=in.nextDouble(); //接收float型数 for(int h=0;h<nump;h++){ goal[h]=0; gan[h]=0; } for(int s=0;s<numg;s++) { System.out.println("游戏开始"); for(int k=0;k<nump;k++) { System.out.println("由玩家输入估计的数值num值为整形"); double num = in.nextDouble(); //接收float型数据 numn[s][k]=num; } for(int j=0;j<nump;j++) { sum+=numn[s][j]; } G=(sum/nump)*0.618;//求G值 double dif=0; for(int qq=0;qq<nump;qq++){//求分数 dif=Math.abs(numn[s][qq]-G); goal[qq]=dif; } for(int f=0;f<nump;f++) { if(max<goal[f]) max=goal[f]; if(min>goal[f]) min=goal[f]; } for(int th=0;th<nump;th++) { if(goal[th]==min) gan[th]=gan[th]+nump; if(goal[th]==max) gan[th]=gan[th]-2; } for(int tt=0;tt<nump;tt++) { System.out.println(gan[tt]); } } } }
以上代码实现了编程目标,但是由于我们都是初次接触Java,所以未能实现界面优化,所以确切说我们并没有实现题目要求,甚至编程也有漏洞,不规范。就Java来说,这是我们目前能做到的最大程度,我们还会继续努力的。
这次项目我的搭档是潘猛飞,他是一个很有挑战精神的人,用Java来做项目也是他提出来的,同时他喜欢动手操作然后针对问题寻找解决办法,学习能力很强。这次项目在学习过程中我发现了自己很多不足,也从我的搭档那里学到了很多。
程序代码已上传至coding:project-2