猜字符游戏
有猜字符游戏,其规则为:程序随机产生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;
}
}