Java 猜数字游戏:从逻辑构建到代码实现的完整指南

在编程学习的道路上,小游戏开发往往是理解核心逻辑的最佳实践。猜数字游戏作为经典的编程入门案例,不仅能帮助初学者掌握变量、循环、条件判断等基础语法,更能培养逻辑思维和用户交互设计能力。本文将带您从零开始,构建一个功能完备的 Java 猜数字游戏,并深入解析其中的设计思路与实现细节。

游戏核心逻辑设计

猜数字游戏的本质是通过程序随机生成一个目标数字,玩家通过输入猜测值,程序根据输入值与目标值的大小关系给予提示,直到玩家猜中为止。这个看似简单的过程,包含了三个核心要素:

  1. 随机数生成机制:需要确保每次游戏的目标数字具有随机性
  2. 数值比较逻辑:准确判断猜测值与目标值的大小关系
  3. 交互流程控制:合理设计游戏的开始、进行和结束环节

基于这些要素,我们可以规划出游戏的基本流程:程序启动后展示欢迎信息,设定随机数范围并生成目标数字,然后进入循环等待玩家输入,每次输入后给出比较提示,当玩家猜中数字时显示祝贺信息并统计尝试次数,最后询问是否开始新一局游戏。

完整代码实现

下面是整合了所有功能的完整代码,采用单类设计确保结构简洁,同时添加了必要的注释提高可读性:

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

public class NumberGuessingGame {
    // 游戏配置参数
    private static final int MIN_NUMBER = 1;
    private static final int MAX_NUMBER = 100;
    private static final String WELCOME_MESSAGE = "欢迎来到Java猜数字游戏!";
    private static final String GAME_RULES = "游戏规则:系统将生成一个" + MIN_NUMBER + "-" + MAX_NUMBER + "之间的随机数,\n"
            + "请您尝试猜测这个数字,系统会根据您的输入给出'太大'或'太小'的提示,\n"
            + "直到您猜中为止。加油!";

    public static void main(String[] args) {
        // 初始化输入输出工具
        Scanner scanner = new Scanner(System.in);
        Random random = new Random();
        boolean continuePlaying = true;

        // 打印欢迎信息和游戏规则
        printWelcomeInfo();

        // 游戏主循环,支持多轮游戏
        while (continuePlaying) {
            // 生成目标数字
            int targetNumber = generateTargetNumber(random);
            int guessCount = 0;
            boolean hasGuessedCorrectly = false;

            System.out.println("\n新游戏开始!我已经想好了一个数字,开始你的猜测吧~");

            // 单轮游戏循环
            while (!hasGuessedCorrectly) {
                // 获取并验证玩家输入
                int userGuess = getUserInput(scanner);
                guessCount++;

                // 判断猜测结果并给出提示
                String result = checkGuess(userGuess, targetNumber);
                System.out.println(result);

                // 检查是否猜中
                if (userGuess == targetNumber) {
                    hasGuessedCorrectly = true;
                    printSuccessMessage(guessCount);
                }
            }

            // 询问是否继续游戏
            continuePlaying = askToContinue(scanner);
        }

        // 结束游戏
        System.out.println("\n感谢您的参与,再见!");
        scanner.close();
    }

    /**
     * 打印欢迎信息和游戏规则
     */
    private static void printWelcomeInfo() {
        System.out.println("=====================================");
        System.out.println(WELCOME_MESSAGE);
        System.out.println("=====================================");
        System.out.println(GAME_RULES);
    }

    /**
     * 生成指定范围内的随机目标数字
     * @param random 随机数生成器实例
     * @return 生成的目标数字
     */
    private static int generateTargetNumber(Random random) {
        return random.nextInt(MAX_NUMBER - MIN_NUMBER + 1) + MIN_NUMBER;
    }

    /**
     * 获取并验证玩家输入的猜测值
     * @param scanner 输入扫描器
     * @return 有效的猜测数字
     */
    private static int getUserInput(Scanner scanner) {
        int input = 0;
        boolean isValidInput = false;

        while (!isValidInput) {
            System.out.print("请输入你的猜测(" + MIN_NUMBER + "-" + MAX_NUMBER + "):");
            try {
                input = Integer.parseInt(scanner.nextLine().trim());
                // 验证输入范围
                if (input >= MIN_NUMBER && input <= MAX_NUMBER) {
                    isValidInput = true;
                } else {
                    System.out.println("输入错误!请输入" + MIN_NUMBER + "-" + MAX_NUMBER + "之间的整数。");
                }
            } catch (NumberFormatException e) {
                System.out.println("输入错误!请输入有效的整数。");
            }
        }
        return input;
    }

    /**
     * 检查猜测结果并返回提示信息
     * @param guess 玩家猜测的数字
     * @param target 目标数字
     * @return 提示信息
     */
    private static String checkGuess(int guess, int target) {
        if (guess > target) {
            return "很遗憾,你猜的数字太大了!";
        } else if (guess < target) {
            return "很遗憾,你猜的数字太小了!";
        } else {
            return "恭喜你,猜对了!";
        }
    }

    /**
     * 打印猜中后的成功信息
     * @param count 猜测次数
     */
    private static void printSuccessMessage(int count) {
        System.out.println("你一共尝试了 " + count + " 次。");
        if (count <= 5) {
            System.out.println("太厉害了!你拥有超强的数字敏感度!");
        } else if (count <= 10) {
            System.out.println("很不错!你的推理能力相当出色!");
        } else {
            System.out.println("继续加油,下次一定能更快猜中!");
        }
    }

    /**
     * 询问玩家是否继续游戏
     * @param scanner 输入扫描器
     * @return 是否继续游戏
     */
    private static boolean askToContinue(Scanner scanner) {
        while (true) {
            System.out.print("是否想再玩一局?(y/n):");
            String response = scanner.nextLine().trim().toLowerCase();
            if (response.equals("y") || response.equals("yes")) {
                return true;
            } else if (response.equals("n") || response.equals("no")) {
                return false;
            } else {
                System.out.println("输入无效,请输入 'y' 或 'n'。");
            }
        }
    }
}

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐