黄金点
1.项目要求
N个同学(N通常大于10),每人写一个0~100之间的有理数 (不包括0或100),交给裁判,裁判算出所有数字的平均值,然后乘以0.618(所谓黄金分割常数),得到G值。提交的数字最靠近G(取绝对值)的同学得到N分,离G最远的同学得到-2分,其他同学得0分。记录每一次游戏每名同学的数字和分数。
2.成员介绍
刘计16012024 庞啸天16012011
码云地址:https://gitee.com/pxtddd/codes/kgqtioe4ucybsf6w7501m70
庞啸天博客地址:https://www.cnblogs.com/838428689pxt/p/10102158.html
关于我的结队小伙伴:
认真分析项目的需求,做好总体设计之后开始编程
在编程过程中按照规范的格式进行编写,有缩进
对函数或变量进行合理的命名,容易理解
进行部分测试,在完成功能的前提下尽可能提高运行效率

3.解题思路及结果
1.包命名GoldPoint,再用import导包java.util.Scanner
2.用while(true)和switch...case...做一个循环使用的菜单
1 while (true) {
2 System.err.println("1、开始游戏\n2、查看当前游戏结果\n3、游戏设置\n4、退出");
3 Scanner scanner=new Scanner(System.in);
4 int choice=scanner.nextInt();
5 switch (choice) {
6 case 1:
7 welcome();
8 break;
9 case 2:
10 showMessage();
11 break;
12 case 3:
13 gameSetting();
14 break;
15 case 4:
16 System.out.println("欢迎下次使用!程序即将退出!");
17 Thread.currentThread().sleep(2000);
18 System.exit(0);
19 break;
20 default:
21 break;
22 }
23 }
3.实现case1进行编程
1)设置玩家人数,赋值调用creatplayer方法以创建玩家
1 private static void welcome() {
2 System.out.println("游戏默认初试玩家的分数为100");
3 System.out.print("请输入游戏人数: ");
4 Scanner scanner = new Scanner(System.in);
5 n = scanner.nextInt();
6 creatPlayer(n);
7 }
2)初始化玩家信息
1 private static void creatPlayer(int n) {
2 persons = new Person[n];
3 for (int i = 0; i < persons.length; i++) {
4 persons[i] = new Person();
5 }
6 for (int i = 0; i < n; i++) {
7 Scanner scanner = new Scanner(System.in);
8 int temp = 0;
9 temp = i + 1;
10 System.out.print("请输入第" + temp + "个玩家的姓名:");
11 persons[i].setName(scanner.next());
12 persons[i].setScore(SCORE_START);
13 }
14 System.out.println("****输入完成****");
15 try {
16 playGame();
17 } catch (InterruptedException e) {
18 e.printStackTrace();
19 }
20 }
3)控制游戏运行
1 private static void playGame() throws InterruptedException {
2 System.out.println("****游戏开始****");
3 for (int i = 0; i < persons.length; i++) {
4 Scanner scanner = new Scanner(System.in);
5 System.out.print("请" + persons[i].getName() + "输入数值(大于0小于100的有理数):");
6 persons[i].setNum(scanner.nextInt());
7 }
8 int numG = getG();
9 int recordMax = 0;
10 int max = Math.abs(persons[0].getNum() - numG);
11 for (int i = 0; i < persons.length; i++) {
12 if (max < (Math.abs(persons[i].getNum() - numG))) {
13 max = Math.abs(persons[i].getNum() - numG);
14 recordMax = i;
15 }
16 }
17 int min = Math.abs(persons[0].getNum() - numG);
18 int recordMin = 0;
19 for (int i = 0; i < persons.length; i++) {
20 if (min > Math.abs(persons[i].getNum() - numG)) {
21 min = Math.abs(persons[i].getNum() - numG);
22 recordMin = i;
23 }
24 }
25 System.out.println("******************************");
26 System.out.println("相信信息如下:");
27 persons[recordMin].setScore(persons[recordMin].getScore()+n);
28 persons[recordMax].setScore(persons[recordMax].getScore()-2);
29 showMessage();
30 System.out.println("G值为:" + numG);
31 System.out.println("大吉大利,今晚吃鸡!" + persons[recordMin].getName());
32 System.out.println("玩家:" + persons[recordMax].getName() + "输了");
33 System.out.println("******************************");
34 }
35 private static int getG() {
36 int sum = 0;
37 for (int i = 0; i < persons.length; i++) {
38 sum += persons[i].getNum();
39 }
40 return (int) ((sum / persons.length) * 0.618);
41 }
case2用来查看历史游戏结果
case3更改游戏设置
case4退出
4.在初始化玩家信息时,创建一个Person类,方便调用玩家信息
1 class Person {
2 private String name;
3 private int num;
4 private int score;
5 public Person() {
6 super();
7 }
8 public Person(String tname,int tnum,int tscore) {
9 super();
10 name=tname;
11 num=tnum;
12 score=tscore;
13 }
14 public String getName() {
15 return name;
16 }
17 public void setName(String name) {
18 this.name = name;
19 }
20 public int getNum() {
21 return num;
22 }
23 public void setNum(int num) {
24 this.num = num;
25 }
26 public int getScore() {
27 return score;
28 }
29 public void setScore(int score) {
30 this.score = score;
31 }
32 }
运行结果:

4.小结
通过这一次的结对作业,我明显感觉到了团队的力量,结对编程省时高效,而且可以从别人身上发现自己的不足和缺点从而改正,
发现对方的优点进而学习,互相帮助,相互促进共同进步,再一次感谢庞同学的帮助。


浙公网安备 33010602011771号