您的位置:首页 > 其它

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

2016-11-04 13:57 513 查看
游戏要求:

其游戏规则为:程序随机产生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);
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐