猜字符游戏

猜字符游戏
有猜字符游戏,其规则为:程序随机产生5个按照一定顺序的不重复字符作为猜测的结果,
由玩家来猜测此字符串,玩家可以猜测多次,每猜测一次,则有系统提示结果,如果猜测的
完全正确,则游戏结束,计算出玩家的游戏得分并输出;如果没有猜对,则提示猜测的结果,
如猜对了几个字符,以及猜对了几个字符的位置等信息,并提示玩家游戏继续,游戏的得分
规则为:字符的个数乘以10为总分,即此游戏的总分为50分,玩家如果一次就猜对了,则得
满分(50分);每多猜一次,则扣1分,例如玩家猜了5次才猜对,则得分为45分;若玩家输
入ESC则表示退出游戏

public class T4 {
	public static void main(String[] args) {
		//创建对象
		T4 t = new T4();
		//调用随机生成字符的方法
		char[] chars = t.showCode(5);
		for(char c:chars){
			System.out.print(c);
		}
		System.out.println();
		//创建一个Scanner对象
		Scanner scan = new Scanner(System.in);
		System.out.println("**************欢迎来到猜字符小游戏*************");
		System.out.println("**************如果你认怂就输入ESC(不区分大小写)结束游戏*************");
		//声明一个计数器变量
		int i = 0;
		while(true){
			System.out.println("***********输入你所猜的字符(5个字符不能重复)**********");
			//接收用户的输入
			String str = scan.next();
			//将用户输入的值全部转为大写
			String st = str.toUpperCase();
			//判断是否是ESC
			if("ESC".equals(st)){
				//结束游戏
				System.out.println("骚年,你已放弃治疗,下次再来");
				return;
			}
			//将用户输入的字符串转为字符数组
			char[] input = st.toCharArray();
			//比较
			int[] result = t.check(chars, input);
			//判断结果
			if(result[1] == chars.length){//全对
				System.out.println("你狠厉害,全部猜对");
				System.out.println("猜了"+(i+1)+"次,得分为:" + (chars.length*10-i));
				return;//结束
			}else{//没有全对
				//0分结束
				if((chars.length*10)-i <= 0){
					System.out.println("很遗憾,得分为0了,下次再来吧");
					return;//结束
				}
				System.out.println("很遗憾,字符对的个数为:" + result[0] + "个");
				System.out.println("位置对的个数为:" + result[1] + "个");
				i++;//计数
			}
			
		}
	}
	
	//生成随机字符的方法
	public char[] showCode(int i){
		//定义一个字符数组用来装随机生成的字符的
		char[] chars = new char[i];
		//定义一个用来随机的字符仓库
		char[] arr = {'A','B','C','D','E','F','G','H',
				'I','J','K','L','M','N','O','P','Q','R',
				'S','T','U','V','W','X','Y','Z'};
		//定义一个标签数组
		boolean[] boo = new boolean[arr.length];//默认为false
		//创建一个随机数对象
		Random ran = new Random();
		//随机生成字符并装入数组 中
		for(int j=0;j<chars.length;j++){
			int index;
			do{
				//获取随机下标
				index = ran.nextInt(arr.length);				
			}while(boo[index]);
			//从仓库中去取值装到chars数组中
			chars[j] = arr[index];
			//将标签切换
			boo[index] = true;	
		}
		
		//将装有生成好的字符的数组返回
		return chars;
	}
	
	//定义一个比较用户猜的字符与生成的字符的方法
	/**
	 * @param chars 系统生成的字符数组
	 * @param input	用户猜的字符数组
	 * @return 第一个元素是字符对的个数,第二个元素是位置对的个数
	 */
	public int[] check(char[] chars,char[] input){
		//定义一个比较的结果的数组
		int[] result = new int[2];
		for(int i=0;i<input.length;i++){
			for(int j=0;j<chars.length;j++){
				//比较字符相等
				if(input[i] == chars[j]){
					//字符对的个数计数
					result[0]++;
					//比较位置是否也对
					if(i == j){
						//位置对,位置对的个数计数
						result[1]++;
					}
				}
				
			}
		}
		return result;
	}
	
	
	
	
	
	
	

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值