使用java方法完成猜字符游戏
要求:
-
随机生产五个不重复的字母,用户输入猜测的字母内容
-
用户输入猜测字母
-
程序判断,告知用户猜对的字符个数
-
同时还要告知猜对的字符中位置排列正确的有几个
-
猜测最后再加一个得分统计
-
5个字符一共500分,猜错一次扣10分
-
若不是500分,则重复猜测,知道全部猜对为止
思路:
1、生成五个随机的字母
对于随机生产五个不重复的字母,我们可以先定义一个字符数组,然后再利用随机数的生成去随机出字符数组的下标(0到25),来达到随机字母的效果,为了防止出现相同的字母,我们需要去重,可以为每个字母设置一个开关,即设置一个bool数组,默认都为false,如果被使用,该字母对应的bool元素则变为true。这样如果后面的随机数重复时,只需判断bool开关是否为true,若为true则再重新随机一个数。直到生成五个不同的字母。
2、对于用户的输入,连续输入五个为字符串类型,我们需要将其转变为字符数组,再进行猜测是否正确的判断。
package day0613;
import java.util.Scanner;
public class 游戏 {
public static void main(String[] args) {
char[] chs=*generate*(5);
System.*out*.println("五个随机的字母为:");
System.*out*.println(chs);
while(true) {
char[] input = *getInput*(5);
System.*out*.println("用户输入的字母为:");
System.*out*.println(input);
int[] num = *getNum*(chs, input);
int num1 = num[0];
int num2 = num[1];
int sum = num2 * 100 - (5 - num2) * 10;
System.*out*.println("猜对字符个数为:" + num1);
System.*out*.println("猜对字符中位置排列正确的个数为:" + num2);
System.*out*.println("用户最后得分为:" + sum);
if(sum==500){
break;
}
}
}
//随机生成字母
public static char[] generate(int num) {
char[] chs = new char[num];
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];
int index;
for (int i = 0; i < chs.length; i++) {
do {
index = (int) (Math.*random*() * 26);
} while (flags[index] == true);
chs[i] = letters[index];
flags[index] = true;
}
return chs;
}
//用户输入字母
public static char[] getInput(int num){
Scanner sc = new Scanner(System.*in*);//导入扫描器
System.*out*.println("请输入五个猜测的字符:");
String str = sc.next();//调用扫描器方法
//toUppercase() 把字符串中的小写字符转换为大写
//toCharArray() 把字符串拆分为字符数组
char[] input = str.toUpperCase().toCharArray();
return input;
}
//判断猜对个数
public static int[] getNum(char[] ch,char[] input){
int[] num=new int[2];
for (int i = 0; i < input.length; i++) {
for (int j = 0; j < ch.length; j++) {
if (input[i] == ch[j]) {
num[0]++;
if(i==j){
num[1]++;
}
}
}
}
return num;
}
}