猜字符游戏

来源:互联网 发布:初请失业金数据公布网 编辑:程序博客网 时间:2024/05/21 10:51

猜字符游戏
   有猜字符游戏,其规则为:程序随机产生5个按照一定顺序的字符作为猜测的结果,由玩家来猜测此字符串,玩家可以猜测多次,每猜测一次,则有系统提示结果,如果猜测的完全正确,则游戏结束,计算出玩家的游戏得分并输出;如果没有猜对,则提示猜测的结果,如猜对了几个字符,以及猜对了几个字符的位置等信息,并提示玩家游戏继续,游戏的得分规则为:字符的个数乘以10为总分,即此游戏的总分为50分,玩家如果一次就猜对了,则得满分(50分);每多猜一次,则扣1分,例如玩家猜了5次才猜对,则得分为45分;若玩家输入ESC则表示退出游戏
注:获取控制台输入的字符串(String str = scan.next())
    将获取到的字符串转为字符数组(char[] input = str.toCharArray())
    将字符转为大写(字符.toUpperCase())
    字符串之间比较是否相等(字符串.equals(""))



public class GuessingGame {

//程序的主方法(程序的入口)
public static void main(String[] args){
int[] result;//用来存放比较结果的数组
int score = 0;//分数
int count = 0;//猜的次数
System.out.println("*******欢迎来到猜字符游戏*******");
GuessingGame guess = new GuessingGame();
char[] chs = guess.generate();//随机产生的字符数组
System.out.println(Arrays.toString(chs));
Scanner scan = new Scanner(System.in);
while(true){
System.out.println("请输入你猜的字符:");
String str = scan.next();//接收用户输入的字符串
String str1 = str.toUpperCase();//将用户输入的字符串全部转为大写
if("ESC".equals(str1)){//判断用户输入的是否是ESC
System.out.println("游戏结束欢迎下次再来!");
return;//结束游戏
}
char[] input = str1.toCharArray();//将用户输入的字符串转为字符数组
result = guess.check(chs,input);//比较
if(result[0] == chs.length){//全部猜对
score = 10*chs.length - count;//得分
System.out.println("恭喜你,猜对了,得分为:" + score + 
",共猜了" + ++count + "次");
return;//结束
}else{//还没有完全猜对
count++;//猜的次数加一次
System.out.println("你猜对了" + result[1] + "个字符,其中位置正确的个数为:"
+ result[0]);
}

}



}

//比较玩家输入的字符数组和系统随机产生的字符是否相同
//chs 系统生成的    input   用户输入的
public int[] check(char[] chs,char[] input){
/*
* 比较结果的数组,第一个元素存完全猜对的个数(字符和位置全对的个数)
* 第二个元素存猜对字符的个数
*/
int[] result = new int[2];
for(int i = 0;i < input.length;i++){
for(int j = 0;j < chs.length;j++){
if(input[i] == chs[j]){//字符相等
result[1]++;//字符相等的个数
if(i == j){//位置相等
result[0]++;//完全猜对的个数
}
break;
}
}

}
return result;
}

//随机产生5个字符的方法
public char[] generate(){
char[] chs = new char[5];//用来存放随机产生的字符的数组
char[] letters = {'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[] flags = new boolean[26];//用来标记字符有没有被取出(默认为false)
for(int i = 0;i<chs.length;i++){//循环取出字符
int index;//下标
do{
//随机下标(0-25)
index = (int)(Math.random()*(letters.length));
}while(flags[index]);//当flags[index]为false时终止循环
chs[i] = letters[index];//取到字符给到chs数组的相应位置上
flags[index] = true;//取到的字符应该下次不能再取
}

return chs;

}

}

原创粉丝点击