小项目分享 —— Java 实现猜 1 到 10 以内的整数控制台小游戏

详细的解释都在注释里面了 

​
// import 这些是引用包和类制药下面的代码有用到相关包,IDEA 编译器会自动生成,所以在 IDEA 中可以不用敲
import java.awt.*;
import java.awt.event.KeyEvent;
import java.util.*;
import java.util.regex.Pattern;

class arithmetic {

    static Scanner scanner = new Scanner(System.in);  // 定义输入类属性
    static int inputNum = 0;  // 定义输入数据属性,并将它初始化为 0
    static int randomNum = 0;  // 定义随机数属性,并将它初始化为 0
    static int guessCount = 0;  // 定义猜的次数属性,并将它初始化为 0
    static int guessMaxCount = 11;  // 定义猜的最少次数属性,并将它初始化为 11,因为只有 10 个数据可进行猜测,最多可猜 10 次,这里将它初始化为 11 次

    public static void clearConsole() throws AWTException {  // 清屏功能函数

        Robot robot = new Robot();  // 实例化一个 Robot 类
        robot.keyPress(KeyEvent.VK_CONTROL);  // 按下 ctrl 键
        robot.keyPress(KeyEvent.VK_ALT);  // 按下 alt 键
        robot.keyPress(KeyEvent.VK_BACK_SPACE);  // 按下 backspace 键
        robot.keyRelease(KeyEvent.VK_BACK_SPACE);  // 松开 backspace 键
        robot.keyRelease(KeyEvent.VK_ALT);  // 松开 alt 键
        robot.keyRelease(KeyEvent.VK_CONTROL);  // 松开 ctrl 键
        robot.delay(100);  // 时延为 100 毫秒

    }

    public static void mainPage() throws AWTException {  // 主界面

        clearConsole();  // 先清屏

        System.out.println("    猜数字小游戏");  // 打印游戏名称

        // 开始打印游戏功能键
        for( int i = 0; i < 20; i++ ) {

            System.out.print("*");

        }
        System.out.print("\n\t1.游戏规则");
        System.out.print("\n\t2.开始游戏");
        System.out.print("\n\t3.查看本次最高成绩");
        System.out.println("\n\t4.退出游戏");
        for( int i = 0; i < 20; i++ ) {

            System.out.print("*");

        }
        System.out.println("\n请选择功能:");
        // 结束打印游戏功能键

        choiceFunction();  // 调用功能键选择函数

    }

    public static void returnMainPage() throws AWTException {  // 功能跳转函数:从此界面调转到其他界面

        inputNum = scanner.nextInt();  // 接收输入的数据

        if ( inputNum == 4 ) {  // 输入 4 的话

            clearConsole();  // 先清屏
            mainPage();  // 再跳转到主界面

        }
        else if ( inputNum == 2 ) {  // 输入 2 的话

            clearConsole();  // 先清屏
            gameBegin();  // 再跳转到游戏界面

        }
        else if ( inputNum == 3 ) {  // 输入 3 的话

            clearConsole();  // 先清屏
            showMaxPoint();  // 再跳转到打印最佳成绩界面

        }
        else {  // 输入其他键,提示错误

            System.out.println("输入错误");
            returnMainPage();  // 运用简单的递归算法

        }

    }

    public static void choiceFunction() throws AWTException {  // 功能函数:在主界面中判断输入的功能键

        while ( true ) {  // 用死循环才能一直进行游戏,但记得一定要设定至少一个终止死循环的条件,不然程序会一直运行下去

            boolean boolFunction;  // 用于接收正则表达式的布尔结果
            String strFunction = scanner.next();  // 用于接收输入的功能键字符串
            boolFunction = Pattern.matches("[1-4]",strFunction);  // 运用正则表达式,判断所输入的功能是否在 1 到 4 之间

            if ( boolFunction ) {  // boolFunction 为 true 的话,或者说输入的功能键没问题的话

                int numFunction = Integer.parseInt( strFunction );  // 将输入的功能键数据从字符串转化为整数

                switch ( numFunction ) {

                    case 1:  // 功能键是 1 的话
                        clearConsole();  // 先清屏
                        gameRules();  // 跳转到游戏规则界面
                        break;  // 记得要终止

                    case 2:  // 功能键是 2 的话
                        clearConsole();  // 先清屏
                        gameBegin();  // 跳转到游戏界面
                        break;  // 记得要终止

                    case 3:  //  功能键是 3 的话
                        clearConsole();  // 先清屏
                        showMaxPoint();  // 跳转到最佳成绩界面
                        break;  // 记得要终止

                    case 4:  // 功能键是 4 的话
                        System.exit(1);  // 结束程序
                        break;  // 记得要终止

                    default:  // 与上面的功能键都不一致的话,保险起见
                        break;  // 直接终止程序

                }


            }
            else {  // 输入的不是功能键的话,打印输入错误

                System.err.println("输入有误");
                System.out.println("请重新选择:");

            }

        }

    }

    public static void gameRules() throws AWTException {  // 游戏郭泽界面

        System.out.println("规则:");
        System.out.println("\t1.程序会自动生成一个 1 - 10 之间的整数,用户输入一个整数进行竞猜");  // \t 是制表符
        System.out.println("\t2.如果未猜对,程序会给出相应提示");
        System.out.println("\t3.每次游戏的输入数字的次数会被记录下来,退出游戏则重置为 0 ");
        System.out.println("\t4.除了主界面,每个界面可以按 2 开始游戏,按 3 可查看本次游戏的最好成绩,按 4 返回主界面");

        returnMainPage();  // 调用功能跳转函数

    }

    public static void gameBegin() throws AWTException {  // 游戏界面

        guessCount = 0;  // 本次猜测的次数记得要初始化,因为每次开始游戏的话,次数都会归 0

        Random random = new Random();  // 实例化随机数类
        randomNum = random.nextInt(10);  // 产生一个 0 到 9 之间的整数,包括 0 和 9
        randomNum = randomNum + 1;  // 因为是要在 0 到 10 之间猜测,所以要加个 1

        System.out.println("游戏开始");

        while ( true ) {  // 用死循环才能一直进行游戏,但记得一定要设定至少一个终止死循环的条件,不然程序会一直运行下去

            inputNum = scanner.nextInt();  // 接收输入的数据

            if ( inputNum == randomNum ) {  // 猜测的数是产生的随机数的话

                System.out.println("恭喜你,猜对了!!!");
                guessCount += 1;  // 猜测的次数加 1
                break;  // 猜对就可以让死循环结束了

            }
            else if ( inputNum > randomNum ) {  // 猜测的数大于随机数的话

                System.out.println("大了");  
                guessCount += 1;  // 猜测次数加 1

            }
            else {  // 猜测的数小于随机数的话

                System.out.println("小了");
                guessCount += 1;  // 猜测次数加 1

            }

        }

        if ( guessMaxCount > guessCount) {  // 如果本次猜测的次数比之前的成绩好的话

            guessMaxCount = guessCount;  // 将最佳成绩替换为本次的成绩

        }

        returnMainPage();  // 调用功能跳转函数

    }

    public static void showMaxPoint() throws AWTException {  // 最佳成绩界面

        if ( guessMaxCount == 11 ) {  // 没有进行游戏的话

            System.out.println("还未开始游戏");

        }
        else {  // 进行了游戏

            System.out.println("本次游戏最高成绩:" + guessMaxCount);

        }

        returnMainPage();  // 调用功能跳转函数

    }

    public static void main( String[] args ) throws AWTException {  // 主函数

        mainPage();  // 只调用主页面函数就行

    }

}

​

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值