猜数字游戏是编程入门的经典案例,它不仅能帮助初学者掌握基本语法,还能让我们理解程序逻辑和用户交互的设计思路。今天,我们将一起用 Java 实现一个界面精美、功能完善的猜数字游戏。

游戏设计思路

我们的猜数字游戏将包含以下核心功能:

  • 系统随机生成 1-100 之间的随机数
  • 允许玩家输入猜测的数字
  • 给出猜大了 / 猜小了的提示
  • 记录猜测次数
  • 猜对后显示祝贺信息和猜测次数
  • 支持多轮游戏,玩家可以选择继续或退出
  • 美观的控制台输出格式

完整代码实现

java

运行

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

public class GuessingGame {
    // 游戏相关常量
    private static final int MIN_NUMBER = 1;
    private static final int MAX_NUMBER = 100;
    private static final String LINE_SEPARATOR = "======================================";
    
    private Random random;
    private Scanner scanner;
    
    public GuessingGame() {
        random = new Random();
        scanner = new Scanner(System.in);
    }
    
    public void start() {
        printWelcomeMessage();
        
        boolean playAgain;
        do {
            playRound();
            System.out.print("\n想再玩一次吗?(y/n): ");
            String response = scanner.next().trim().toLowerCase();
            playAgain = response.startsWith("y");
        } while (playAgain);
        
        printGoodbyeMessage();
        scanner.close();
    }
    
    private void playRound() {
        int targetNumber = generateTargetNumber();
        int attempts = 0;
        boolean hasGuessedCorrectly = false;
        
        System.out.println("\n新游戏开始!我已经想好了一个" + MIN_NUMBER + "到" + MAX_NUMBER + "之间的数字。");
        System.out.println("看看你需要多少次才能猜到它!");
        
        while (!hasGuessedCorrectly) {
            int guess = getUserGuess();
            attempts++;
            
            if (guess < targetNumber) {
                System.out.println("猜小了!再试试更大的数字。");
            } else if (guess > targetNumber) {
                System.out.println("猜大了!再试试更小的数字。");
            } else {
                hasGuessedCorrectly = true;
                printSuccessMessage(attempts);
            }
        }
    }
    
    private int generateTargetNumber() {
        return random.nextInt(MAX_NUMBER - MIN_NUMBER + 1) + MIN_NUMBER;
    }
    
    private int getUserGuess() {
        int guess = 0;
        boolean validInput = false;
        
        while (!validInput) {
            System.out.print("\n请输入你的猜测 (" + MIN_NUMBER + "-" + MAX_NUMBER + "): ");
            
            if (scanner.hasNextInt()) {
                guess = scanner.nextInt();
                
                if (guess >= MIN_NUMBER && guess <= MAX_NUMBER) {
                    validInput = true;
                } else {
                    System.out.println("请输入" + MIN_NUMBER + "到" + MAX_NUMBER + "之间的数字!");
                }
            } else {
                System.out.println("输入无效!请输入一个整数。");
                scanner.next(); // 清除无效输入
            }
        }
        
        return guess;
    }
    
    private void printWelcomeMessage() {
        System.out.println(LINE_SEPARATOR);
        System.out.println("          欢迎来到猜数字游戏          ");
        System.out.println(LINE_SEPARATOR);
        System.out.println("游戏规则:");
        System.out.println("1. 系统会随机生成一个" + MIN_NUMBER + "到" + MAX_NUMBER + "之间的整数");
        System.out.println("2. 你需要猜测这个数字是多少");
        System.out.println("3. 系统会提示你猜大了还是猜小了");
        System.out.println("4. 直到你猜对为止,看看你需要多少次");
        System.out.println(LINE_SEPARATOR);
    }
    
    private void printSuccessMessage(int attempts) {
        System.out.println("\n" + LINE_SEPARATOR);
        System.out.println("恭喜你猜对了!");
        System.out.println("你一共猜了 " + attempts + " 次。");
        
        // 根据猜测次数给出评价
        if (attempts <= 5) {
            System.out.println("太厉害了!简直是猜数字大师!");
        } else if (attempts <= 10) {
            System.out.println("很不错!继续加油!");
        } else {
            System.out.println("还可以更好哦!下次试试减少猜测次数吧!");
        }
        System.out.println(LINE_SEPARATOR);
    }
    
    private void printGoodbyeMessage() {
        System.out.println("\n" + LINE_SEPARATOR);
        System.out.println("        感谢游玩猜数字游戏!");
        System.out.println("             下次再见!");
        System.out.println(LINE_SEPARATOR);
    }
    
    public static void main(String[] args) {
        GuessingGame game = new GuessingGame();
        game.start();
    }
}

代码解析

这个猜数字游戏采用了面向对象的设计思想,将不同的功能封装在不同的方法中,使代码结构清晰、易于维护。

  1. 类结构:我们创建了 GuessingGame 类,包含了游戏所需的所有功能。

  2. 核心组件:

    • Random 类:用于生成随机目标数字
    • Scanner 类:用于接收用户输入
  3. 主要方法:

    • start():游戏入口,控制游戏的整体流程
    • playRound():执行一轮游戏的逻辑
    • generateTargetNumber():生成目标数字
    • getUserGuess():获取并验证用户输入
    • 各类 printXXXMessage() 方法:负责输出格式化的信息
  4. 用户体验优化:

    • 输入验证:确保用户输入的是有效范围内的整数
    • 清晰的提示信息:告诉用户猜大了还是猜小了
    • 结果评价:根据猜测次数给予不同的评价
    • 友好的欢迎和告别界面

游戏扩展思路

这个基础版本的猜数字游戏还可以进行很多扩展:

  1. 难度级别:增加不同难度,如简单 (1-50)、中等 (1-100)、困难 (1-200)
  2. 计时功能:记录每轮游戏的用时
  3. 历史记录:保存玩家的最佳成绩(最少猜测次数)
  4. 多人模式:允许多个玩家轮流猜测,比拼谁用的次数少
  5. 图形界面:使用 Swing 或 JavaFX 制作图形界面版本

总结

通过实现这个猜数字游戏,我们学习了 Java 的基本语法、控制流、用户输入输出以及面向对象的编程思想。这个游戏虽然简单,但包含了一个完整程序的基本结构:初始化、接收输入、处理逻辑、输出结果。

Logo

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

更多推荐