黄金点游戏,共10名玩家,每位玩家输入一个0-100之间的有理数,不包括0和100,系统会算出这 10个点的平均值然后乘上0.168以此作为黄金点,提交的数字最接近黄金点的玩家得到1分,离黄金点最远的玩家-2分,其他玩家得0分。10轮游戏后分数最高的玩家获胜。课上老师带领我们进行了实践,我们发现,随着游戏的进行,黄金子点的值逐渐变小,且变化范围越来越小,通过编程,我们要实现这一功能。
结对项目:
1、组员:胡骏、张军洪(博客地址http://www.cnblogs.com/reverseAC/p/7643493.html)
1、根据两人的擅长,进行分工,我负责搜索原文代码并且进行纠错,张军洪负责对代码进行代码的完善与功能的加强。
package GoldPoint; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Scanner; public class GoldPoint { public static void main(String[] args){ GoldPoint gd=new GoldPoint(); gd.goldPoint(); } public void goldPoint(){ HashMap<String,Double> inputMap=new HashMap<String,Double>();//存入输入分数 HashMap<String,Double> scoreMap=new HashMap<String,Double>();//存入分数 String name=""; Double inputScore; int peopleNum;//参加的人数 int time;//进行轮数 Double sum=0.0; Double aver=0.0; Scanner scan=new Scanner(System.in); //参数对象是系统进来的流 System.out.println("输入参加的人数:"); peopleNum=scan.nextInt(); System.out.println("输入需要进行几轮:"); time=scan.nextInt(); for(int i=0;i<peopleNum;i++){ System.out.println("请输入第"+(i+1)+"个参加者的姓名:"); name=scan.next(); System.out.println("请输入第一轮的分数:"); inputScore=scan.nextDouble(); inputMap.put(name, inputScore); scoreMap.put(name,(double) 0);//初始化scoreMap sum+=inputScore; } aver=sum/peopleNum*0.618; System.out.println("aver="+aver); this.findWinner(inputMap, scoreMap, aver); this.show(scoreMap); System.out.println("第一轮结束"); for(int i=0;i<time-1;i++){ sum=0.0; System.out.println("请输入第"+(i+2)+"轮的分数:"); Iterator iter = inputMap.entrySet().iterator(); while (iter.hasNext()) { Map.Entry entry0 = (Map.Entry) iter.next(); String key = (String) entry0.getKey(); System.out.println(key+"输入第"+(i+2)+"轮分数:"); Double score =scan.nextDouble(); inputMap.put(key, score);//替换掉以前的分数 sum+=score; } aver=sum/peopleNum*0.618; System.out.println("aver="+aver); this.findWinner(inputMap, scoreMap, aver); this.show(scoreMap); System.out.println("第"+(i+2)+"轮结束"); } System.out.println("游戏结束"); } //找出每次分数最接近黄金点的 和最远的 最接近的加一分 最远的减一分 其余加零分(可能有相同的) public void findWinner(HashMap<String,Double> inputMap,HashMap<String,Double> scoreMap,Double aver){ Double temp; Double temp0; List<String> latest=new ArrayList<String>(); List<String> farthest=new ArrayList<String>(); Iterator iter = inputMap.entrySet().iterator(); Map.Entry entry = (Map.Entry) iter.next(); Double input = (Double) entry.getValue(); String key0 = (String) entry.getKey(); latest.add(key0); farthest.add(key0); //iter.hasNext(); temp0=temp=Math.abs(aver-input); //遍历map while (iter.hasNext()) { entry = (Map.Entry) iter.next(); String key = (String) entry.getKey(); input = (Double) entry.getValue(); Double temp1=Math.abs(aver-input); if(temp>temp1){//寻找最近 temp=temp1; latest.clear(); latest.add(key); }else if(temp==temp1){ latest.add(key); } if(temp0<temp1){//寻找最远 temp0=temp1; farthest.clear(); farthest.add(key);} else if(temp0==temp1){ farthest.add(key); } } //实现加分 iter = scoreMap.entrySet().iterator(); while (iter.hasNext()) { Map.Entry entry0 = (Map.Entry) iter.next(); String key = (String) entry0.getKey(); Double score =(Double) entry0.getValue(); if(this.containList(key, latest)){ score=score+1; scoreMap.put(key, score); } if(this.containList(key, farthest)){ score=score-1; scoreMap.put(key, score); } } } public boolean containList(String str,List<String> list){ for(int i=0;i<list.size();i++){ if(str.equals(list.get(i))){ return true; } } return false; } public void show(HashMap<String,Double> scoreMap){ System.out.println("得分情况:"); Iterator iter = scoreMap.entrySet().iterator(); while (iter.hasNext()) { Map.Entry entry0 = (Map.Entry) iter.next(); String key = (String) entry0.getKey(); Double score =(Double) entry0.getValue(); System.out.println(key+":"+score); } } }
2、寻找源代码,在别人代码的基础上进行修改。原文博主:black_old_jack(同班) 原文链接:http://www.cnblogs.com/liupeixuan/p/7586444.html
3、读代码,决定修改内容,制定计划。因我们在原文代码上无法做出更优的修改,我们决定在原代码的基础上添加前端页面,使游戏能够在网页上运行。
原文代码