猜字符小游戏中的细节问题以及算法

游戏要求:

其游戏规则为:程序随机产生5个(7个或9个)不重复的字符(大写小写字母或数字)作为猜测的结果,
 * 由玩家来猜测此字符串。玩家可以猜测多次,每猜测一次,则由系统提示结果。
 * 如果猜测的完全正确,则游戏结束,计算玩家的游戏得分并输出;
 * 如果没有猜对,则提示猜测的结果,如猜对了几个字符,以及猜对了几个字符的位置等信息,并提示玩家游戏继续。

 * 按 exit  表示退出游戏

该程序如下:

import java.util.Scanner;
public class Demo1 {
	public static void main(String[] args) {
		System.out.println("欢迎尝试猜字母游戏:");
		Scanner scan=new Scanner(System.in);
		int level;
		do{
			System.out.println("请输入游戏级别:(5,7,9)");
			level=scan.nextInt();
			scan.nextLine();//滤去回车
		}while(level!=5&&level!=7&&level!=9);
		char[] arr=generate(level);//接收随机生成的字符数组
		System.out.println(arr);//此处作弊
		int count=0;
		for(;;){
			System.out.println("请输入你的猜测结果:");
			String str=scan.nextLine();//接收猜测的字符串
			if("EXIT".equals(str.toUpperCase())){
				System.out.println("退出程序!");
				break;
			}
			int[] result=check(str,arr);//接收猜测到的结果
			if(result[1]==level){
				System.out.println("恭喜你!猜对了");
				System.out.println("你的得分为:"+(level*100-count*10)+"分");
				break;
			}else{
				System.out.println("没有全部猜对,字符猜对了"+result[0]+"个,"+"位置猜对了"+result[1]+"个,请继续:");
				count++;
			}
		}
	}
//	系统自动生成相应的字母序列(不重复)
	public static char[] generate(int level){
		char[] array=new char[level];
		char[] letters=new char[]{'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','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','r',
								'0','1','2','3','4','5','6','7','8','9'};
		int index;
		boolean[] flag=new boolean[letters.length];//为每一个字母添加开关
		for(int i=0;i
   
   

在此基础上若可以生成重复的字符,则可修改部分代码,有以下两种修改方式:

方法一:此方法是在原来基础上删除功能,并去掉开关数组

for(int i=0;i<array.length;i++){		
    index=(int)(Math.random()*letters.length);
    array[i]=letters[index];	
}

方法二:利用随机数获取大写或者小写(0是大写  1是小写):

int temp=(int)(Math.random()*2);

再利用三目运算求得随机数,不过此时的随机数可能会出现重复的(在要求可重复条件且只有两种不同类型时可以使用该方法(例如随机生成大写或小写字母),这样使得程序简洁,不需要字母数组)

char  ch= temp>0? (char)(Math.random()*26+65) :(char)(Math.random()*26+97)
代码如下:要求生成10个大写或小写字母(可重复)

public static void main(String[] args) {
    char[] array=new char[10];
    for(int i=0;i<array.length;i++){
	int temp=(int)(Math.random()*2);//随机生成0或1 
	//若temp>0为true,则随机生成大写字母
	array[i]= temp>0? (char)(Math.random()*26+65):(char)(Math.random()*26+97);
    }
    System.out.println(array);
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

荒--

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值