三个人猜数字游戏

简单的java练习题目:猜数字游戏

题目说明

每次随机产生一个数字,有三人人去猜测这个数字,每次答对者总成绩加一分,答错者维持原成绩,在一定次数后结束并统计总成绩,分数最高者胜出。如有相同分数者,最高成绩并列显示。

说明

这是复习java基础的时候做的一些基础练习题,有很多不足,仅供自,己参考。

代码说明

首先是主进程RunClass代码

package guessNumber;

public class RunClass {
	public static void main(String[] args) {
		//猜字谜游戏
		int i=100;//游戏回合
		while(i > 0) {//主循环
			i--;
			int num =  ProduceNumber.produceNumber();//产生数字
			System.out.println("这次产生的数字是:"+num);
			/*
			 * 产生三个对象猜测数字
			 * */
			GuessMember mgA = new GuessMember("A");
			int numA = mgA.guessNumber();
			if(Util.compareNumber(num, numA)) {
				Integral.setIntegal(0);
			}
			
			GuessMember mgB = new GuessMember("B");
			int numB = mgB.guessNumber();
			if(Util.compareNumber(num, numB)) {
				Integral.setIntegal(1);
			}
			
			GuessMember mgC = new GuessMember("C");
			int numC = mgC.guessNumber();
			if(Util.compareNumber(num, numC)) {
				Integral.setIntegal(2);
			}			
			Integral.showIntegal();		
		}
		Integral.showResult();
	}
	//功能完成可改进位置在于分数统计的位置
}

ProduceNumber类中维护一个产生随机数的静态函数

package guessNumber;

public class ProduceNumber {
	
	public static int produceNumber() {//产生随机数
		int res = (int)(1+Math.random()*5);
		return res;
	}
}

GuessMember 类中维护了猜数字对象的名称属性,同时拥有一个猜测数字的方法

package guessNumber;

public class GuessMember {
	private String name = "";
	public GuessMember(String name) {
		this.name = name;
	}
	public int guessNumber() {//返回猜测的数字
		int res = ProduceNumber.produceNumber();
		System.out.println(name+"猜测的数字是:"+res);
		return res;
	}
}

Util类中维护了一个判断猜测的数字是否正确的方法

package guessNumber;

public class Util {

	/*
	 *判断数字是否被猜出
	 *a为随机产生的数字
	 *b为猜测的数字
	 * */	
	public static boolean compareNumber(int a,int b) {
		boolean res = false;
		if(a == b) {
			res = true;
		}
		return res;
	}
	
}

Integral类中维护了一个三个长度的记录总成绩的数组与一些操作此数组的方法

package guessNumber;

public class Integral {
	/*
	 * integral类维护了一个三个长度的数字以此来记录三个对象每次猜测的成绩
	 * 0位置为A分数,1为B,2为C
	 * 每次猜测完成更新维护的数据
	 * */
	
	private static int[] integral = {0,0,0};
	//在指定位置添加分数,每局游戏完成后跟新数组的数据
	public static void setIntegal(int i) {
		integral[i] = integral[i] + 1;
	}
	//展示三个对象的总分数
	public static void showIntegal() {
		int numA = integral[0];
		int numB = integral[1];
		int numC = integral[2];
		System.out.println("A的分数是:"+numA+";"+"B的分数是:"+numB+";"+"C的分数是:"+numC+";");		
	}
	//判断是谁胜出
	public static void showResult() {
		int winner = 0;//记录胜出者的位置
		int tempJ = integral[winner];//记录分数的临时变量
		int sameNum = 0;//出现相同分数的情况此变量加一
		int sameLocation = 0;//相同分数的位置
		for(int i=0;i<integral.length-1;i++) {
			if(tempJ < integral[i+1]) {
				winner = i+1;
				tempJ = integral[i+1];
			}else if(tempJ == integral[i+1]) {
				sameNum  += 1;
				sameLocation = i+1;
			}
		}
		if(sameNum == 0) {
			System.out.println("胜出者为:"+location(winner)+" "+tempJ+"分");
		}else if(sameNum == 1) {
			if(integral[sameLocation] < tempJ ) {
				System.out.println("胜出者为:"+location(winner)+" "+tempJ+"分");
			}else {
				System.out.println("胜出者为:"+location(winner)+"与"+location(sameLocation)+" "+tempJ+"分");
			}
		}else if(sameNum == 2) {
			System.out.println("三人分数皆为"+tempJ+"分");
		}	
	}
	
	public static String location(int i) {//返回指定位置对象
		String res = "";
		if(i == 0) {
			res = "A";
		}else if(i == 1) {
			res = "B";
		}else if(i == 2) {
			res = "C";
		}else {
			res ="指定位置对象不存在";
		}
		return res;
	}
}

以下为测试结果,总共进行一百次,前九十八次省略。

这次产生的数字是:1
A猜测的数字是:1
B猜测的数字是:1
C猜测的数字是:1
A的分数是:17;B的分数是:16;C的分数是:14;
这次产生的数字是:3
A猜测的数字是:4
B猜测的数字是:4
C猜测的数字是:1
A的分数是:17;B的分数是:16;C的分数是:14;
胜出者为:A 17分

ps:下面是一些小心得
基于我个人水平这个示例编写的不是很精妙,对象与方法的分离上还待考究,分数存储中应使用集合类实现,同时也应留下供后续拓展的空间,注释方面也不尽详细,最后判断胜出者的方法中应该有更好的方式去判断。在后续的拓展上本程序的设计也待考究,个人的想法上是包括增加人数,回合增加,三个对象使用不同的猜测算法,数字产生的算法改变这些改动,如何在现有的程序基础上更新的适应这些变化还待考究,有兴趣的可以瞅瞅,提一点你们的想法。

你可能感兴趣的:(基础练习)