游戏要求:玩家输入5、7、9三个等级的难度,系统分别提供5、7、9个互不相同的随机字母,提示玩家输入字符串猜测。
提示内容为:猜测对的字母个数和猜测对的字母位置个数。
只有当输入EXIT或者全部位置猜对时,游戏才算结束。游戏开始时给玩家500分初始计分,每猜错一次扣10分。
package case_analysis;
import java.util.Random;
import java.util.Scanner;
public class GuessLetters {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int[] results = new int[2]; //设置一个数组存储字母对和位置对的数组
System.out.println("欢迎进入猜字母游戏!");
System.out.println("请选择游戏难度:(5,7,9)");
int difficult = scanner.nextInt();
char[] letters = new char[difficult]; //设置一个数组,存储随机生成的字母串
while(difficult != 5 && difficult != 7 && difficult != 9){ //当游戏难度选择不正确时重新输入
System.out.println("没有这个游戏难度,请重新输入:");
difficult = scanner.nextInt();
}
letters = GetLetters(difficult); //获取随机数组
printLetters(scanner, results, letters); //打印猜测结果
scanner.close();
}
/**随机生成n个互不相同的字符*/
public static char[] GetLetters(int n){
Random random = new Random();
char[] letters = new char[n]; //随机字符的存储数组
char[] getLetters = 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'};
//声明一个开关数组对应26个大写字母,以判断字母是否重复
boolean[] flag = new boolean[getLetters.length];
for (int i = 0; i < n; i++) {
int index; //数组下标。[0,26)
do{
index = random.nextInt(26); //随机生成一个下标
}while(flag[index]); //开关为真时,这个字母已被使用重新生成
letters[i] = getLetters[index]; //将生成的字母赋值给随机数组
flag[index] = true; //改变开关状态
System.out.print(letters[i]);
}
System.out.println();
return letters; //返回随机数组
}
/**比较随机字符串和输入字符串的个数和位置是否对应*/
public static int[] check(char[] letters,char[] inputs) {
int[] result = new int[2]; //存储比较结果
boolean[] flag = new boolean[letters.length]; //设置开关数组,避免玩家重复输入一个字母而造成的误判
for (int i = 0; i < letters.length; i++) {
for (int j = 0; j < inputs.length; j++) {
if(letters[i] == inputs[j]){ //字母相同
if (flag[i] == false) { //判断这个字母之前是否出现过
result[0]++; //存储字母相同的个数
flag[i] = true; //改变开关状态
}
if(i == j){
result[1]++; //存储位置相同的个数
break;
}
}
}
}
return result;
}
/**打印猜测字母的游戏结果*/
public static void printLetters(Scanner scanner,int[] results,char[] letters) {
int score = 500; //初始分有500
int count = 0; //设置一个计数器,记录猜错次数
do {
System.out.println("请输入你猜测的字符串:");
String string = scanner.next().toUpperCase(); //将小写字母变为大写
char[] inputs = string.toCharArray(); //将字符串转为字符数组
results = check(letters,inputs); //将返回的才正确结果存在results数组中
if("EXIT".equals(string)){ //当输入exit时,退出游戏
System.out.println("真遗憾,下次再来玩吧!");
break;
}
count++;
System.out.println("你猜对了"+results[0]+"个字母,猜对了"+results[1]+"个位置");
} while (results[1]!=letters.length);
if(results[1]==letters.length){ //当位置数全部猜对时,过关
score = score-count*10;
System.out.println("恭喜你猜对了,你的得分为"+score);
}
}
}