新手练习项目 7:猜数字游戏

名人说:莫听穿林打叶声,何妨吟啸且徐行。—— 苏轼《定风波·莫听穿林打叶声》
Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder)

目录

        • 一、项目描述
        • 二、项目实现
        • 三、项目步骤
        • 四、项目扩展方向

更多项目内容,请关注我、订阅专栏《项目探索实验室》,内容持续更新中…

项目名称:猜数字游戏

一、项目描述

创建一个猜数字游戏,玩家需要在限定次数内猜出一个由计算机随机生成的数字

游戏规则如下:

  1. 计算机生成一个1到100之间的随机整数。
  2. 玩家有有限次数(如10次)来猜这个数字。
  3. 每次猜测后,计算机会告诉玩家猜的数字是太大了还是太小了。
  4. 如果玩家在限定次数内猜对,显示胜利信息。
  5. 如果玩家用完所有次数还未猜对,显示失败信息并告知正确数字。
二、项目实现

可以选择简单地用函数来实现这个游戏,也可以定义一个GuessingGame类来封装游戏逻辑。

三、项目步骤
#include <iostream>
#include <cstdlib> // for rand() and srand()
#include <ctime>   // for time()using namespace std;class GuessingGame {
private:int secretNumber;int maxAttempts;int attemptsLeft;void resetGame() {// Seed the random number generatorsrand(static_cast<unsigned int>(time(0)));// Generate a random number between 1 and 100secretNumber = rand() % 100 + 1;attemptsLeft = maxAttempts;}public:GuessingGame(int maxAttempts) : maxAttempts(maxAttempts), attemptsLeft(maxAttempts) {resetGame();}void play() {int guess;char playAgain;do {cout << "欢迎来到猜数字游戏!" << endl;cout << "我已经选择了一个1到100之间的数字。" << endl;cout << "你有 " << maxAttempts << " 次机会来猜它。" << endl;while (attemptsLeft > 0) {cout << "请输入你的猜测:";cin >> guess;if (guess == secretNumber) {cout << "恭喜你!你猜对了这个数字!" << endl;break;} else if (guess < secretNumber) {cout << "太小了!" << endl;} else {cout << "太大了!" << endl;}attemptsLeft--;cout << "剩余次数:" << attemptsLeft << endl;}if (attemptsLeft == 0) {cout << "很抱歉,你已经用完了所有机会。正确的数字是 " << secretNumber << "。" << endl;}cout << "你想再玩一次吗?(y/n):";cin >> playAgain;if (playAgain == 'y' || playAgain == 'Y') {resetGame();}} while (playAgain == 'y' || playAgain == 'Y');cout << "感谢你玩猜数字游戏!再见!" << endl;}
};int main() {int maxAttempts = 10; // 你可以更改尝试次数GuessingGame game(maxAttempts);game.play();return 0;
}
#include "Book.h"
#include <iostream>
#include <vector>
using namespace std;void displayMenu() {cout << "1. 添加图书" << endl;cout << "2. 更新图书信息" << endl;cout << "3. 删除图书" << endl;cout << "4. 查找图书" << endl;cout << "5. 显示所有图书信息" << endl;cout << "6. 退出" << endl;
}void addBook(vector<Book> &books) {string title, author, ISBN;cout << "输入书名: ";cin.ignore();getline(cin, title);cout << "输入作者: ";getline(cin, author);cout << "输入ISBN: ";getline(cin, ISBN);books.push_back(Book(title, author, ISBN));
}void updateBook(vector<Book> &books) {string ISBN, title, author, newISBN;cout << "输入要更新的图书的ISBN: ";cin.ignore();getline(cin, ISBN);for (Book &book : books) {if (book.getISBN() == ISBN) {cout << "输入新书名: ";getline(cin, title);cout << "输入新作者: ";getline(cin, author);cout << "输入新ISBN: ";getline(cin, newISBN);book.update(title, author, newISBN);return;}}cout << "未找到该ISBN的图书。" << endl;
}void deleteBook(vector<Book> &books) {string ISBN;cout << "输入要删除的图书的ISBN: ";cin.ignore();getline(cin, ISBN);for (auto it = books.begin(); it != books.end(); ++it) {if (it->getISBN() == ISBN) {books.erase(it);return;}}cout << "未找到该ISBN的图书。" << endl;
}void findBook(const vector<Book> &books) {string ISBN;cout << "输入要查找的图书的ISBN: ";cin.ignore();getline(cin, ISBN);for (const Book &book : books) {if (book.getISBN() == ISBN) {book.display();return;}}cout << "未找到该ISBN的图书。" << endl;
}void displayAllBooks(const vector<Book> &books) {for (const Book &book : books) {book.display();}
}int main() {vector<Book> books;int choice;while (true) {displayMenu();cin >> choice;switch (choice) {case 1:addBook(books);break;case 2:updateBook(books);break;case 3:deleteBook(books);break;case 4:findBook(books);break;case 5:displayAllBooks(books);break;case 6:return 0;default:cout << "无效选项,请重新选择。" << endl;}}return 0;
}

效果如图:

image-20240630164032219

四、项目扩展方向

可以根据需要扩展项目,例如:

  • 增加难度选择(如选择猜测范围或最大次数)。
  • 增加一个计分系统,根据猜测次数和成功与否来评分。

Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder)
点赞加关注,收藏不迷路!本篇文章对你有帮助的话,还请多多点赞支持!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/38150.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

打靶记录——靶机medium_socnet

靶机下载地址 https://www.vulnhub.com/entry/boredhackerblog-social-network,454/ 打靶过程 由于靶机和我的Kali都处于同一个网段&#xff0c;所以使用arpscan二次发现技术来识别目标主机的IP地址 arpscan -l除了192.168.174.133&#xff0c;其他IP都是我VMware虚拟机正…

【Spring Boot】认识 JPA 的接口

认识 JPA 的接口 1.JPA 接口 JpaRepository2.分页排序接口 PagingAndSortingRepository3.数据操作接口 CrudRepository4.分页接口 Pageable 和 Page5.排序类 Sort JPA 提供了操作数据库的接口。在开发过程中继承和使用这些接口&#xff0c;可简化现有的持久化开发工作。可以使 …

springboot学习,如何用redission实现分布式锁

目录 一、springboot框架介绍二、redission是什么三、什么是分布式锁四、如何用redission实现分布式锁 一、springboot框架介绍 Spring Boot是一个开源的Java框架&#xff0c;由Pivotal团队&#xff08;现为VMware的一部分&#xff09;于2013年推出。它旨在简化Spring应用程序…

大数据面试题之Spark(1)

目录 Spark的任务执行流程 Spark的运行流程 Spark的作业运行流程是怎么样的? Spark的特点 Spark源码中的任务调度 Spark作业调度 Spark的架构 Spark的使用场景 Spark on standalone模型、YARN架构模型(画架构图) Spark的yarn-cluster涉及的参数有哪些? Spark提交jo…

编码大模型系列:Meta创新的“代码编译优化”的LLM

鲁班号导读正式上线。移步“鲁班秘笈”&#xff0c;查阅更多内容。 大型语言模型 (LLM) 已在各种软件工程和编码任务中展现出卓越的能力。然而&#xff0c;它们在代码和编译器优化领域的应用仍未得到充分探索。训练LLM需要大量资源&#xff0c;需要大量的 GPU时间和大量的数据…

一个合理的前端应用文件结构

在大型应用中&#xff0c;最关键且最具挑战性的方面之一就是拥有一个良好且合理的文件结构。在考虑通过微前端将代码库拆分成多个应用之前&#xff0c;可以遵循一些步骤来改善项目级别的架构&#xff0c;并在您考虑这一路径时使过渡更容易。 我们的目标是应用某种模块化方法&am…

MSPM0G3507——定时器例程讲解4——timx_timer_mode_periodic

以下示例以周期模式配置TimerG并切换LED。周期从500ms开始&#xff0c;每次切换减少50ms&#xff0c;直到周期为100ms&#xff0c;然后重复。设备在等待中断时保持待机模式 #include "ti_msp_dl_config.h"/* ((32KHz / (321)) * 0.5s) 45 - 1 495 due to N1 ticks …

Qt中用QLabel创建状态灯

首先ui设计中分别创建了4个大灯和4个小灯。 编辑.h文件 #ifndef LED_H #define LED_H#include <QWidget> #include <QLabel>QT_BEGIN_NAMESPACE namespace Ui { class Led; } QT_END_NAMESPACEclass Led : public QWidget {Q_OBJECTpublic:Led(QWidget *parent n…

服务器硬件以及RAID配置

目录 一、RAID磁盘阵列原理&#xff08;嘎嘎重要&#xff09; 1、RAID的概述 2、常用的RAID 2.1、RAID 0 2.2、RAID 1 2.3、RAID 5 2.5、RAID 10 3、阵列卡介绍 二、建立软件RAID磁盘阵列 1、添加硬盘 2、使用fdisk分区&#xff0c;类型为fd 3、mdata命令使用参数 …

安全与加密常识(3)什么是数字签名和数字证书

文章目录 数字签名工作原理关键特点应用实例 数字证书数字证书和数字签名趣味实例 数字签名 数字签名是一种通过密码运算生成的数据&#xff0c;用于验证信息的完整性和来源&#xff0c;确保数据在传输过程中未被篡改&#xff0c;同时提供发送者的身份认证和防止抵赖的功能。它…

Qt: QPushButton 按钮实现 上图标下文字

效果如下&#xff1a; 实现有如下几种方式&#xff1a; 1. 使用 QPushButton 设置 setStyleSheet 例&#xff1a; ui->recorder->setStyleSheet("QPushButton{"\"border: 1px solid #00d2ff; "\"min-height: 60px; "\"col…

python多继承的3C算法

python多继承的3C算法 有很多地方都说python多继承的继承顺序&#xff0c;是按照深度遍历的方式&#xff0c;其实python多继承顺序的算法&#xff0c;不是严格意义上的深度遍历&#xff0c;而是基于深度遍历基础上优化出一种叫3C算法 python多继承的深度遍历 class C:def ru…

MySQL高级-MVCC-原理分析(RR级别)

文章目录 1、RR隔离级别下&#xff0c;仅在事务中第一次执行快照读时生成ReadView&#xff0c;后续复用该ReadView2、总结 1、RR隔离级别下&#xff0c;仅在事务中第一次执行快照读时生成ReadView&#xff0c;后续复用该ReadView 而RR 是可重复读&#xff0c;在一个事务中&…

Django 配置静态文件

1&#xff0c;DebugTrue 调试模式 Test/Test/settings.py DEBUG True...STATICFILES_DIRS [os.path.join(BASE_DIR, static),] STATIC_URL /static/ 1.1 创建静态文件 Test/static/6/images/Sni1.png 1.2 添加视图函数 Test/app6/views.py from django.shortcuts impor…

uniapp,uni-fab组件拖动属性,替代方案

文章目录 1. 背景2. 替代方案2.1 方案一2.2 方案二 参考 1. 背景 最近基于uniapp开发一款设备参数调试的APP软件&#xff0c;其中有使用到悬浮按钮&#xff0c;快速开发阶段&#xff0c;为了能尽快上线&#xff0c;直接使用了uni-ui的扩展组件uni-fab&#xff0c;参考【1】&am…

Configure C/C++ debugging

Configure C/C debugging launch.json 文件用于在 Visual Studio Code 中配置调试器。 Visual Studio Code 会生成一个 launch.json (位于项目的 .vscode 文件夹下),其中几乎包含了所有必需的信息。要开始调试,您需要填写 program 字段,指定要调试的可执行文件的路径。这必须…

【从零开始学架构 架构基础】四 架构设计的复杂度来源:可扩展性复杂度来源

架构设计的复杂度来源其实就是架构设计要解决的问题&#xff0c;主要有如下几个&#xff1a;高性能、高可用、可扩展、低成本、安全、规模。复杂度的关键&#xff0c;就是新旧技术之间不是完全的替代关系&#xff0c;有交叉&#xff0c;有各自的特点&#xff0c;所以才需要具体…

新书速览|Linux C与C++一线开发实践

《Linux C与C一线开发实践》 本书内容 Linux C/C编程在Linux应用程序开发中占有重要的地位&#xff0c;掌握这项技术将在就业竞争中立于不败之地。《Linux C与C一线开发实践》内容针对初中级读者&#xff0c;贴近软件公司一线开发实践。全书厚达620多页&#xff0c;知识点丰富…

51单片机第6步_stdlib.h库函数

本章重点学习stdlib.h库函数。 #include <REG51.h> //包含头文件REG51.h,使能51内部寄存器; #include <stdlib.h> //float atof (char *s1); //参数s1字符串可包含正负号,小数点或E(e)来表示指数部分,如123.456或123e-2; //若首字符是非数据字符,或为正负号…

[NSSCTF]-Reverse:[SWPUCTF 2021 新生赛]easyapp(安卓逆向,异或)

无壳 把后缀名改为zip&#xff0c;找到apk 查看jadx 这里调用了MainActivity的lambda$onCreate$0$MainActivity&#xff0c;然后又调用了Encoder进行异或。 exp&#xff1a; result棿棢棢棲棥棷棊棐棁棚棨棨棵棢棌 key987654321 flag for i in range(len(result)):flagchr(…