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 代码解释
- 类的定义:
GuessNumberGame
类封装了游戏的主要逻辑,包括随机数字的生成、猜测次数的记录、是否猜对的判断等。 - 构造函数:在构造函数中,使用
std::srand
和std::rand
函数生成一个指定范围内的随机数作为秘密数字,并初始化最大猜测次数、当前猜测次数和是否猜对的标志。 startGame
方法:该方法实现了游戏的主要流程,通过循环让玩家进行猜测,并根据玩家的猜测给出相应的提示,直到玩家猜对或用完所有机会。getIsGuessed
和getGuesses
方法:用于获取游戏的结果和猜测次数,方便在main
函数中输出游戏成绩。
14.5 课后小练习
- 增加一个功能,让玩家可以选择游戏的难度级别(如简单、中等、困难),不同难度级别对应不同的数字范围和猜测次数。
- 实现一个排行榜功能,记录玩家的游戏成绩(猜测次数),并按猜测次数从小到大排序输出。
通过这个进阶版的猜数字游戏,你可以进一步巩固面向对象编程的知识,学会如何封装功能、管理数据和实现复杂的游戏逻辑。