Java编写猜单词游戏

1.题目分析:

1.1 进入程序后,勇士自定义自己的生命值(提示生命值需要在1-10之中),如果超过最大10、小于最小值1 ,抛出自定义LimiteException异常,输出“错误生命值1314,终止勇敢者游戏!”,程序终止。
1.2 正确输入自己的生命值之后,开始进行闯关(系统已设立20个单词,此时随机选取6个出来)。
1.3 从选取的6个单词中,随机取出一个单词,显示出其的单词首和尾,中间补充间隔字符(例如:window——>你的第X个单词为w****w)。
1.4 输入单个字母进行猜测。
1.5 输入错误的话(例如window中,我输了k)。则生命值减1,输出“输入错误,你现在的生命值为X”。
1.6 并随机选择已准备好的鼓励语句组“我和你只差一个脚步的距离了,赶快解救我吧;我和你相隔千山万水,再好好努力;等你一万年,勇士加油吧;”中一条鼓励游戏者。在随机选择中,出现数组溢出异常,输出“勇士,天降空难,再减掉一个生命值,还剩生命值 xx次 ”。 (例如:我语句组总共有6句,生成随机值的范围为1-10,就是说有40%的几率会给再次扣血。)
1.7 输入正确,继续输入。
1.8. 如果符合给出的答案,则显示成功信息,程序结束输出“游戏成功,恭喜晋级第X轮,勇士”。
1.9 生命值为0时结束游戏,输出“游戏OVER,等待勇士再次冲锋”,程序结束。大于0则继续,直到通过完X轮。若完成X轮,输出“通过成功,恭喜勇士”,程序结束。

2.代码部分

import java.util.Random;
import java.util.Scanner;

public class braverGame {

    public static Random r;             //随机选择单词组中的一个单词序号或随机选取的鼓励语句的位置
    public static String[] ss;          //存放一组的单词
    public static String s;             //随机选择的单词
    public static String[] word;        //当前猜测的单词
    public static String[] status;      //存放选取的猜测单词
    public static int healthPoint;      //生命值
    public static int flag;             //生命值是否正确输入的标记
    public static int flag1;            //生命值为0的标志
    public static int flag2;            //记录输入单词的位置
    public static int round=5;          //多少关
    public static String[] encouragements = {"我和你只差一个脚步的距离了,赶快解救我吧",
                                            "我和你相隔千山万水,再好好努力",
                                            "等你一万年,勇士加油吧"};//存放鼓励的语句
    public static String[] words = {"write", "that", "operation", "loving", "program",
            "exit", "watermelon", "insert", "cafeteria", "company",
            "python", "refactor", "java", "window", "computer",
            "history", "problem", "attribute", "invent", "codify"}; //存放猜测的单词


    public static void main(String[] args) throws LimiteException {
        //1.判断输入的生命值是否要求
        flag = inithealthPoint();
        if (flag != 0) {
            flag1 = 1;  //此时生命值不为0,勇士是否gameover的标志
            //2.随机选取round个单词,进行至多round轮的挑战
            initWordGroud(round);
            //作弊查看单词
            for (String q:ss){
                System.out.println(q);
            }
            //3.进行单词猜测
            if (guess(round)==0){
                System.out.println("你的生命值到底了,游戏OVER,等待勇士再次冲锋");
            }
            else {
                System.out.println("通过成功,恭喜勇士");
            }
        }

    }

    //用户进行单词猜测
    public static int guess(int round){
        for (int i = 0;i<round;i++){
            System.out.println("勇士开启第"+(i+1)+"轮冒险");
            flag2 = 1;                          //每次初试位置都在第二个上,例如python中p****n,起始在第二个*的位置
            int lenth1 = ss[i].length();        //获取此单词的长度
            word = ss[i].split("");       //将字符串转为换数组

            status=new String[lenth1];          //根据单词的长度,分配数组的大小
            init(lenth1);
            System.out.println("");
            while (true){
                print(lenth1);
                Scanner sc=new Scanner(System.in);  //用户输入字符进行猜测
                String c=sc.nextLine();
                iscontain(c);                       //判断是否符合
                if (flag2==lenth1-1){               //当标志移到数组的最后,可得知已经完成了此轮的猜测
                    if (i!=round-1){
                        System.out.println("晋级下轮");
                    }
                    break;
                }
                else if (flag1==0){
                    return 0;
                }
            }
        }
        return 1;
    }

    //判断用户是否猜对
    public static void iscontain(String c) {
        if (word[flag2].equals(c)){
            status[flag2]=c;
            flag2++;                        //猜对,标志移一位
            System.out.println("输入成功");
        }
        else {
            healthPoint --;
            System.out.println("输入错误,你现在的生命值为:"+healthPoint);
            if (healthPoint==0){
                flag1=0;
                return;
            }
            try {
                int q = r.nextInt(5);             //随机生成个0-4的值
                System.out.println(encouragements[q]);   //抽取一句鼓励的话,没越界的话,正常鼓励,越界的话(大于2),减生命值
        }
            catch (Exception e){
                healthPoint --;
                System.out.println("勇士,天降空难,再减掉一个生命值,还剩生命值:"+healthPoint);
                if (healthPoint==0) {
                    flag1 = 0;
                }
            }
        }
    }

    //打印出此单词的猜测过程
    public static void print(int lenth) {
        System.out.print("(Guess) Enter a letter in word ");
        for(int i=0;i<lenth;i++) {
            System.out.print(status[i]);
        }
        System.out.print(" > ");
    }

    //对用户输入的生命值进入判断,是否有字符错误或者越界
    public static int inithealthPoint() {
        Scanner sc = new Scanner(System.in);
        System.out.print("勇士,请输入您的生命值(1-10):");
        try {
            healthPoint = Integer.parseInt(sc.nextLine());
        } catch (Exception e) {
            System.out.println(e);
            System.out.println("您没有正确输入数字");
            return 0;
        }
        if (healthPoint > 10 || healthPoint < 1) {
            try {
                throw new LimiteException("错误生命值1314,终止勇敢者游戏!");
            } catch (LimiteException e) {
                e.printStackTrace();
                return 0; //结束方法
            }
        }
        return 1;
    }

    //从单词组中取出一定量的单词,用以后面的猜测
    public static void initWordGroud(int num) { //num代表要取出单词组的个数
        ss = new String[num];
        r = new Random();
        int num1 = 0;                       //标记下移
        while (true) {
            s = words[r.nextInt(words.length)];
            if(num1==0){
                ss[num1] = s;
                num1 += 1;
            }
            else {

                if(isCound(s,ss,num1)==1){
                    ss[num1]=s;
                    num1 += 1;
                }
            }
            if (num == num1) {              //取够了,就退出循环
                break;
            }
        }
    }

    //判断从单词组取出的单词,是否有重复
    public static int isCound(String s1,String []s2, int num){
        for (int i=0;i<num;++i){
            if (s2[i].equals(s1)){
                return 0;
            }
        }
        return 1;
    }

    //初试化猜测单词的形式,例如window ————> w****w
    public static void init(int length) {
        status[0]=word[0];
        status[length-1]=word[length-1];
        for(int i=1;i<length-1;i++) {
            status[i]="*";
        }
    }

    // 异常类
    static class LimiteException extends Exception {
        //添加一个空参数的构造方法
        public LimiteException(){
            super();
        }

        /*
            添加一个带异常信息的构造方法
            查看源码发现,所有的异常类都会有一个带异常信息的构造方法,方法内部会调用父类带异常信息的构造方法,让父类来处理这个异常信息
         */
        public LimiteException(String message){
            super(message);
        }
    }

}

3 运行结果:

3.1 正常运行

在这里插入图片描述

3.2 输入的生命值越界

在这里插入图片描述

3.3 挑战失败

在这里插入图片描述

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值