1.(游戏:猜字游戏)
编写一个猜字游戏。随机产生一个单词,提示用户一次猜测一个字母,如运行示例所示。单词中的每个字母显示为一个星号。当用户猜测正确后,正确的字母显示出来。当用户猜出一个单词,显示猜错的次数,并且询问用户是否继续对另外一个单词进行游戏。声明一个数组来存储单词,如下所示:
问题分析:首先我们先创建一个题库,然后随机抽取一个单词,然后加密,*号的长度为抽取单词的长度。
玩家开始游戏时输入字符,我们创建一个方法来判断是否猜对,如果猜对则在该位置打印该字母,猜错的话加密程度不变,猜错次数+1。如果全部猜对,打印该单词及猜错次数,并且询问玩家是否继续。
代码实现:
import java.util.*;
class Demo{
//1.创建一个词库
private static String words[]={"one","two","three"};
//2.抽取一个词
private static String word=null;
//3.该单词被猜出来的程度
private static boolean[] state=null;
//4.你猜错的次数
private static int missed =0;
public static void main(String[] args) {
Random random=new Random();
Scanner scanner=new Scanner(System.in);
word=words[random.nextInt(words.length)];
state=new boolean[word.length()];
//5.开始猜单词
while(true){
String pwd=getPwd();
System.out.print("Enter a letter in word "+pwd+":");
String letter =scanner.next();
changeWordState(letter);
if(isEnd()){
//一轮游戏结束,是否继续
System.out.println("The word is "+word+".You missed "+missed+(missed>1?" times":" time"));
System.out.print("Do you want to guess another word?Enter yes or other:");
if(scanner.next().equals("yes")){
word=words[random.nextInt(words.length)];
state=new boolean[word.length()];
missed=0;
}else{
break;
}
}
}
}
private static boolean isEnd(){
for(int i=0;i<state.length;i++){
if(state[i]==false){
return false;
}
}
return true;
}
private static void changeWordState(String letter){
//进行猜词,猜对在对应位置打印,猜错不改变打印且猜错次数+1
boolean flag =false;
for(int i=0;i<word.length();i++){
if((word.charAt(i)+"").equals(letter)){
flag=true;
if(state[i]==false){
state[i]=true;
}else{
System.out.println("/t"+letter+" is already in the word");
return;
}
}
}
if(!flag){
missed++;
System.out.println("\t"+letter+" is not in the word");
}
}
private static String getPwd(){
//创建密文,取随机单词的长度,打印*
String pwd="";
for(int i=0;i<word.length();i++){
if(state[i]==true){
pwd+=word.charAt(i);
}else{
pwd+="*";
}
}
return pwd;
}
}