14. 猜数字游戏(进阶版)

14.1 游戏概述

在基础的猜数字游戏之上,进阶版猜数字游戏会增加更多的功能和趣味性。这个游戏会让玩家在一定的次数限制内猜出一个随机生成的数字,同时还会提供更多的提示信息,并且记录玩家的游戏成绩,例如猜测次数、是否猜对等。

14.2 功能分析

  • 随机数字生成:程序需要在一个指定的范围内随机生成一个数字,作为玩家需要猜测的目标数字。
  • 次数限制:设定玩家猜测的最大次数,若在规定次数内未猜出正确数字,则游戏失败。
  • 提示信息:每次玩家猜测后,程序应给出相应的提示,如猜大了、猜小了等。
  • 成绩记录:记录玩家的猜测次数和是否猜对,方便后续查看。

14.3 代码实现

#include <iostream>
#include <cstdlib>
#include <ctime>

// 定义游戏类
class GuessNumberGame {
private:
    int secretNumber;  // 随机生成的秘密数字
    int maxGuesses;    // 最大猜测次数
    int currentGuesses; // 当前猜测次数
    bool isGuessed;    // 是否猜对

public:
    // 构造函数,初始化游戏参数
    GuessNumberGame(int min, int max, int guesses) {
        // 设置随机数种子
        std::srand(std::time(0));
        // 生成指定范围内的随机数
        secretNumber = std::rand() % (max - min + 1) + min;
        maxGuesses = guesses;
        currentGuesses = 0;
        isGuessed = false;
    }

    // 开始游戏的方法
    void startGame() {
        std::cout << "欢迎来到猜数字游戏!你有 " << maxGuesses << " 次机会猜出 1 - 100 之间的数字。" << std::endl;

        while (currentGuesses < maxGuesses) {
            int guess;
            std::cout << "请输入你的猜测: ";
            std::cin >> guess;
            currentGuesses++;

            if (guess == secretNumber) {
                isGuessed = true;
                std::cout << "恭喜你,猜对了!你用了 " << currentGuesses << " 次猜测。" << std::endl;
                break;
            } else if (guess < secretNumber) {
                std::cout << "猜小了,你还有 " << maxGuesses - currentGuesses << " 次机会。" << std::endl;
            } else {
                std::cout << "猜大了,你还有 " << maxGuesses - currentGuesses << " 次机会。" << std::endl;
            }
        }

        if (!isGuessed) {
            std::cout << "很遗憾,你用完了所有机会。正确的数字是 " << secretNumber << "。" << std::endl;
        }
    }

    // 获取是否猜对的结果
    bool getIsGuessed() const {
        return isGuessed;
    }

    // 获取猜测次数
    int getGuesses() const {
        return currentGuesses;
    }
};

int main() {
    // 创建游戏对象,范围 1 - 100,最大猜测次数 10 次
    GuessNumberGame game(1, 100, 10);
    // 开始游戏
    game.startGame();

    // 输出游戏结果
    if (game.getIsGuessed()) {
        std::cout << "游戏胜利!你用了 " << game.getGuesses() << " 次猜测。" << std::endl;
    } else {
        std::cout << "游戏失败!再接再厉。" << std::endl;
    }

    return 0;
}

14.4 代码解释

  1. 类的定义GuessNumberGame 类封装了游戏的主要逻辑,包括随机数字的生成、猜测次数的记录、是否猜对的判断等。
  2. 构造函数:在构造函数中,使用 std::srandstd::rand 函数生成一个指定范围内的随机数作为秘密数字,并初始化最大猜测次数、当前猜测次数和是否猜对的标志。
  3. startGame 方法:该方法实现了游戏的主要流程,通过循环让玩家进行猜测,并根据玩家的猜测给出相应的提示,直到玩家猜对或用完所有机会。
  4. getIsGuessedgetGuesses 方法:用于获取游戏的结果和猜测次数,方便在 main 函数中输出游戏成绩。

14.5 课后小练习

  1. 增加一个功能,让玩家可以选择游戏的难度级别(如简单、中等、困难),不同难度级别对应不同的数字范围和猜测次数。
  2. 实现一个排行榜功能,记录玩家的游戏成绩(猜测次数),并按猜测次数从小到大排序输出。

通过这个进阶版的猜数字游戏,你可以进一步巩固面向对象编程的知识,学会如何封装功能、管理数据和实现复杂的游戏逻辑。

类似文章

发表回复