java打字母游戏代码 打字游戏java程序设计_sed

解题思路:

这个题需要的数据有单词的数组,输入的字符以及密文。

步骤:

1、先生成一组单词,声明一个字符数组来储存单词(由编写者自由决定单词及单词个数)。
2、随机抽取一个单词(根据下标来随机抽取,作为一次猜字)
3、创建该单词的一个状态数组。
4、当前轮猜错的次数。
5、开始输入字符猜单词。
程序获得用户输入的字符串后,若该字母在随机抽取的单词中出现了,变*为该字母,若没有出现则输出该字母不在单词中,并且当前轮猜错的的次数加一。若输入该字母之前已经输入过了该字母,则输出该字母已经在单词中了。一直当该单词字母全部猜中,输出该单词,然后询问是否进行下一轮。如果不进行,则退出程序,否则继续开始下一轮游戏,继续随机抽取一个单词,并且将猜错的次数归零。将一些需要调用的变量写为全局变量,方便调用。

完整代码如下:
import java.util.*;
/*
数据1、单词的数组
    2、输入的字符
    3、密文
 */
class Class34{
    //1、先生成一组单词
    public static String[] words={"computer","public","static","void",};
    //2、随机抽取一个单词
    public static String word = null;//给空值
    //3、创建该单词的一个状态数组
    public static boolean[] state= null;
    //4、当前轮猜错的次数
    public static int missed = 0;//默认为零
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        Random random = new Random();
        word = words[random.nextInt(words.length)];//对全局变量word初始化,抽取角标来确定单词
        state = new boolean[word.length()];//根据word来改变(初始化)
        //5、开始输入字符猜单词
        while(true){
            String password = getPassWord();
            System.out.print("Enter a letter in word "+ password+":");
            String letter = sc.nextLine();//获取字符串
            changeWordState(letter);//改变单词的状态,拿letter和word进行比较,然后改变state
            if(isEnd()){//表示是否猜完
                System.out.println("The word is " + word+".You missed "+missed+" time");
                System.out.print("Do you want to guess another word? Enter y or n>");
                if(sc.nextLine().equals("y")){
                    word = words[random.nextInt(words.length)];
                    state = new boolean[word.length()];
                    missed = 0;
                }else{
                    break;
                }
            }
        }
    }
    public static boolean isEnd(){//不用传值,直接从全局变量拿
        for(int i = 0;i<state.length;i++){
            if(state[i]==false){//如果等于false,就代表没有猜完
                return false;
            }
        }
        return true;
    }
    public static void changeWordState(String letter){
    //结果可能改,也可能不改。也有可能存在且已经输入过。故不给返回值类型
        boolean isExist = false;//设置一个标记
        for(int i = 0;i<word.length();i++){
            if((word.charAt(i)+"").equals(letter)){//字符后面加空串变为字符串,字符串之间进行比较
                isExist=true;//相等则更改标记的状态
                if(state[i]==false){//相等,但是状态没改变,把状态改为true
                    state[i]=true;
                }else{
                    System.out.println("\t" +letter+" is already in the word");
                    return;
                }
            }
        }
        if(!isExist){
            missed++;
            System.out.println("\t"+letter+" is not in the word");
        }
    }
    public static String getPassWord(){//根据单词的本身和单词的状态,返回一个单词的密文
        String password="";//先创建一个空字符串
        for(int i = 0;i<word.length();i++){
            if(state[i]==true){//状态里面的第i个字母是true,把相对应的字符填进去
                password+=word.charAt(i);
            }else{
                password+="*";//里面是false,则是*
            }
        }
        return password;//返回密码
    }
}