【经典小游戏】猜数字

news2024/12/27 13:43:44

  • 前言
  • 1. 游戏介绍
  • 2. 游戏实现
  • 3. 游戏优化
  • 结语


在这里插入图片描述

个人主页:C_GUIQU

在这里插入图片描述

前言

各位小伙伴大家好!
先问大家一个问题:我们为什么要学习?
简单来说,就是为了实践!只有不断学习才可以帮助我们更好地实践!
小编也是第一次讲解游戏,下面带来猜数字游戏的讲解!!后期不定时给大家更新好玩的游戏!!!
在这里插入图片描述

1. 游戏介绍

【概述】
猜数字游戏是小编学习C语言时写的第一个小游戏。

猜数字,顾名思义就是去想一个数字然后与电脑生成的一个有范围的随机数作比较,直到猜对为止。

【游戏过程】
1.自动产生一个1-100之间的随机数
2.猜数字

猜对了:就恭喜你猜对了,游戏结束。
猜错了:会告诉你是猜大了,还是猜小了,继续猜,直到猜对为止。

3.游戏可以一直玩,除非退出游戏

2. 游戏实现

#define _CRT_SECURE_NO_WARNINGS

#include<stdio.h> // 引入标准输入输出头文件
#include<stdlib.h> // 引入标准库头文件,用于调用 srand 和 rand 函数
#include<time.h> // 引入时间头文件,用于获取当前时间

// 菜单函数,用于打印游戏菜单
void menu() {
    printf("欢迎来到猜数字游戏!\n");
    printf("**************************\n");
    printf("********   1.play   ******\n");
    printf("********   0.exit   ******\n");
    printf("**************************\n");
}

// 游戏函数,包含猜数字游戏的主要逻辑
void game() {
    int guess = 0; // 定义变量用于存储玩家的猜测
    int ret = rand()%100+1; // 生成1到100之间的随机数

    // 循环直到玩家猜对数字
    while(1) {
        printf("请猜数字:\n");
        scanf("%d",&guess); // 从键盘读取玩家的输入

        // 根据猜测的数字与随机数比较,给出提示
        if(guess < ret) {
            printf("猜小了\n");
        }
        else if(guess > ret) {
            printf("猜大了\n");
        }
        else {
            printf("恭喜你,猜对了!\n");
            break; // 猜对后跳出循环
        }
    }
}

int main() {
    int input = 0; // 定义变量用于存储玩家的选择
    srand((unsigned int)time(NULL)); // 使用当前时间作为随机数生成的种子

    // do...while 循环用于不断地显示菜单和处理玩家输入
    do {
        menu(); // 调用菜单函数显示菜单
        printf("请选择玩法:");
        scanf("%d",&input); // 从键盘读取玩家的选择

        // switch 语句用于根据玩家的选择执行不同的操作
        switch(input) {
        case 1: // 如果玩家选择1,则调用游戏函数开始游戏
            game();
            break; // 结束switch语句
        case 0: // 如果玩家选择0,则打印退出消息并结束循环
            printf("退出游戏\n");
            break; // 结束switch语句
        default: // 如果玩家输入其他值,则提示错误并要求重新选择
            printf("选择错误,重新选择!\n");
            break; // 结束switch语句
        }

    } while(input); // 当玩家选择不为0时,继续循环

    return 0; // 程序结束
}

在这里插入图片描述

3. 游戏优化

下面增加难度,猜数字只有5次机会~

#define _CRT_SECURE_NO_WARNINGS

#include<stdio.h>
#include<stdlib.h>
#include<time.h>

// 菜单函数,用于打印游戏菜单
void menu() {
    printf("欢迎来到猜数字游戏!\n");
    printf("**************************\n");
    printf("********   1.play   ******\n");
    printf("********   0.exit   ******\n");
    printf("**************************\n");
}

// 游戏函数,包含猜数字游戏的主要逻辑
void game() {
    int guess = 0; // 定义变量用于存储玩家的猜测
    int ret = rand()%100+1; // 生成1到100之间的随机数
    int attempts = 0; // 定义变量用于存储猜测次数

    // 循环直到玩家猜对数字或达到5次尝试
    while(attempts < 5) {
        printf("请猜数字(你还有%d次机会):\n",5 - attempts);
        scanf("%d",&guess); // 从键盘读取玩家的输入
        attempts++; // 猜测次数加1

        // 根据猜测的数字与随机数比较,给出提示
        if(guess < ret) {
            printf("猜小了\n");
        }
        else if(guess > ret) {
            printf("猜大了\n");
        }
        else {
            printf("恭喜你,猜对了!\n");
            break; // 猜对后跳出循环
        }
    }

    if(attempts == 5 && guess != ret) {
        printf("很遗憾,你没有在5次内猜对数字。游戏结束!正确答案是:%d\n",ret);
    }
}

int main() {
    int input = 0; // 定义变量用于存储玩家的选择
    srand((unsigned int)time(NULL)); // 使用当前时间作为随机数生成的种子

    // do...while 循环用于不断地显示菜单和处理玩家输入
    do {
        menu(); // 调用菜单函数显示菜单
        printf("请选择玩法:");
        scanf("%d",&input); // 从键盘读取玩家的选择

        // switch 语句用于根据玩家的选择执行不同的操作
        switch(input) {
        case 1: // 如果玩家选择1,则调用游戏函数开始游戏
            game();
            break; // 结束switch语句
        case 0: // 如果玩家选择0,则打印退出消息并结束循环
            printf("退出游戏\n");
            break; // 结束switch语句
        default: // 如果玩家输入其他值,则提示错误并要求重新选择
            printf("选择错误,重新选择!\n");
            break; // 结束switch语句
        }

    } while(input); // 当玩家选择不为0时,继续循环

    return 0; // 程序结束
}

在这里插入图片描述

结语

以上就是小编对猜数字游戏的讲解。
如果觉得小编讲的还可以,还请一键三连。互三必回!
持续更新中~!
在这里插入图片描述

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

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

相关文章

【Java网络编程】网络编程中的基本概念及实现UDP、TCP客户端服务器程序

目录 一、什么是网络编程&#xff1f; 二、网络编程中的基本概念 1. 客户端和服务器 2. 请求和响应 三、Socket套接字 UDP数据报套接字编程 1. DatagramSocket 2. DatagramPacket 3. UDP回显客户端服务器程序 4. UDP字典客户端服务器程序 TCP流套接字编程 1. Serve…

【JS】js数字转k、w结尾 | 1000 = 1k

问题 数字转k、w结尾 如&#xff1a;10001k 100001w 码 /*** 数字转k,w* param {Number} num * returns String*/ const numberTokw num > {if (num < 1000) return numlet endStr w,numVal 10000;if (num > 999 && num < 10000) {endStr knumVal …

设计模式之创建型模式详解

设计模式 创建型模式 创建型模式(Creational Pattern)对类的实例化过程进行了抽象&#xff0c;能够将软件模块中对象的创建和对象的使用分离。为了使软件的结构更加清晰&#xff0c;外界对于这些对象只需要知道它们共同的接口&#xff0c;而不清楚其具体的实现细节&#xff0…

物联网实战--驱动篇之(九)NB-IOT(BC260)

目录 一、NB-IOT简介 二、NB-IOT要素 三、代码详解 四、平台端 一、NB-IOT简介 实际上&#xff0c;就是NB-Iot彻底引爆了物联网的&#xff0c;大概2018年左右&#xff0c;NB推广如火如荼&#xff0c;同时广域网、低功耗的LPWAN网络也逐渐传开&#xff0c;现在回头来看&…

Flyweight 享元

意图 运用共享技术有效地支持大量细粒度的对象。 结构 其中 Flyweight描述一个接口&#xff0c;通过这个接口Flyweight可以接受并作用于外部状态。ConcreteFlyweight实现Flyweight接口&#xff0c;并作为内部状态&#xff08;如果有&#xff09;增加存储空间。ConcreteFlywe…

[Java基础揉碎]集合

目录 集合的理解和好处 数组 集合的理解和好处 继承图 ​编辑 简单实例 Collection接口和常用方法 1) add:添加单个元素 2) remove:删除指定元素 3) contains:查找元素是否存在 4) size:获取元素个数 5) isEmpty:判断是否为空 ​编辑 6) clear:清空 7) addAll:添…

Prior Knowledge-Guided Transformer for Remote Sensing Image Captioning

Prior Knowledge-Guided Transformer for Remote Sensing Image Captioning 1. 摘要 遥感图像(RSI)字幕生成旨在为遥感图像生成有意义且语法正确的句子描述。然而,相比于自然图像字幕,RSI字幕生成面临着由于RSI特性而产生的额外挑战。第一个挑战源于这些图像中存在大量物体。…

ssh-key关于authorized_keys电脑与linux互相认证

思路&#xff1a; 在A上生成公钥私钥。将公钥拷贝给server B&#xff0c;要重命名成authorized_keys(从英文名就知道含义了)Server A向Server B发送一个连接请求。Server B得到Server A的信息后&#xff0c;在authorized_key中查找&#xff0c;如果有相应的用户名和IP&#xf…

冰达ROS机器人快速使用指南

欢迎来到《冰达ROS机器人极简使用指南》 Q&#xff1a;这份教程适合谁&#xff1f; A&#xff1a;适合完全0基础新手&#xff0c;需要快速跑起来机器人的基本功能。也适合技术大佬需要快速的了解冰达ROS机器人的使用方法。 Q&#xff1a;这份教程内容很少&#xff0c;是不是…

路由器热备份

HSRP HSRP&#xff08;Hot Standby Routing Protocol&#xff09;热备份路由选择协议 HSRP是思科私有的协议&#xff0c;HSRP起到一个双网关热备份的一个目的&#xff0c;不考虑线路问题针对设备而言&#xff0c;一个设备挂了还有另外一台设备&#xff0c;所以双网关也叫双机…

动力学重构/微分方程参数拟合 - 基于模型

这一篇文章&#xff0c;主要是给非线性动力学&#xff0c;对微分方程模型参数拟合感兴趣的朋友写的。笼统的来说&#xff0c;这与混沌系统的预测有关&#xff1b;传统的机器学习的模式识别虽然也会谈论预测结果&#xff0c;但他们一般不会涉及连续的预测。这里我们考虑的是&…

URL地址解析至页面展示全过程(面试详细解答)

目录 1、解析URL 2、缓存判断 ​编辑3、DNS解析 ​编辑4、获取MAC地址 5、TCP三次握手 6、HTTP请求 7、服务器处理请求&#xff0c;返回HTTP响应 8、页面渲染 9、TCP四次挥手 10、浏览器解析HTML 11、浏览器布局渲染 1、解析URL 首先会对 URL 进行解析&#xff0c;…

C++_类型转换

文章目录 学习目标&#xff1a;1.static_cast2. reinterpret_cast3.const_cast4. dynamic_cast 学习过程1.static_cast2. reinterpret_cast3.const_cast在这里插入图片描述4. dynamic_cast 学习目标&#xff1a; 标准C为了加强类型转换的可视性&#xff0c;引入了四种命名的强…

黑马程序员Linux简单入门学习笔记

Linux介绍 内核提供系统最核心的功能&#xff0c;如: 调度CPU、调度内存、调度文件系统、调度网络通讯、调度等系统级应用程序&#xff0c;可以理解为出厂自带程序&#xff0c;可供用户快速上手操作系统&#xff0c;如:文件管理器、任务管理器、图片查看、音乐播放等 目录结构 …

在PostgreSQL中如何实现递归查询,例如使用WITH RECURSIVE构建层次结构数据?

文章目录 解决方案使用WITH RECURSIVE进行递归查询示例代码 总结 在PostgreSQL中&#xff0c;递归查询是一种非常强大的工具&#xff0c;它可以用来查询具有层次结构或树形结构的数据。例如&#xff0c;你可能会在员工-经理关系、目录结构或组织结构图中遇到这样的数据。为了处…

*Linux系统的进程和计划任务管理

目录 一、查看进程 1、程序和进程的关系 *2、ps查看静态进程信息 1&#xff09;ps aux 2&#xff09;ps -elf *3、top查看动态进程信息 4、pgrep查看进程信息 5、pstree查看进程树 二、控制进程 1、进程启动方式 2、进程的前后台调度 3、终止进程的运行 三、计划任…

VSCode搭建内核源码阅读开发环境

0. 参考链接 使用VSCode进行linux内核代码阅读和开发_vscode阅读linux内核-CSDN博客 1. 搭建Linux内核源码阅读环境 现状&#xff0c;Linux内核源码比较庞大文件非常多&#xff0c;其中又包含的众多的宏定义开关配置选项&#xff0c;这使得阅读内核源代码称为一件头疼的事。 …

Android AIDL接口

一.AlDI接口简介 AIDL&#xff08;Android Interface Definition Language&#xff09;是一种 IDL 语言&#xff0c;用于生成可以在 Android 设备上两个进程之间进行进程间通信&#xff08;IPC&#xff09;的代码。 通过 AIDL&#xff0c;可以在一个进程中获取另一个进程的数据…

Go源码--Strings库

1. 简介 strings库 存储了 一些针对 字符串的具体操作 其 代码短小精悍 可以学习到很多编程的思路 尤其是 涉及到字符串使用性能的方面&#xff0c;其源码库有好多的优秀案例可以学习。向强者对齐不一定成为强者&#xff0c;但向弱者对齐一定变为弱者。 介绍思路是先介绍 stri…

.net6项目模板

1.集成log4net 安装依赖包&#xff1a; 安装扩展依赖即可&#xff0c;已经包含了log4net依赖&#xff1a; Microsoft.Extensions.Logging.Log4Net.AspNetCore 添加日志配置文件&#xff1a; 日志配置文件属性设置为始终复制&#xff1a; 注入服务&#xff1a; #region 注入…