【C语言】第一个C语言项目——“猜数字”游戏(内附源码)

news2024/11/24 15:49:30

在这里插入图片描述

君兮_的个人主页

勤时当勉励 岁月不待人

C/C++ 游戏开发


Hello米娜桑,这里是君兮_,今天又抽空为大家更新我们的主线0基础C语言啦!鉴于最近讲解了非常多的选择语句与循环语句,咱们今天就来讲讲两者结合的一个简单的实战应用。
同时如果你是0基础小白的话,建议先看看下面两篇博客哦!以下是链接:

【C语言初阶】万字解析,带你0基础快速入门C语言(上)
【C语言初阶】万字解析,带你0基础快速入门C语言(下)

  • 废话不多说咱们直接开始吧!!

项目实战讲解

  • 猜数字游戏
    • 一.生成随机数
      • 随机数的生成
    • 二. 猜数字
        • 打印菜单
        • 游戏的编写
    • 三.源码
  • 总结

猜数字游戏

  • 现在我们想实现这样一个功能:
  • 1.生成一个随机数,这个随机数大小在1-100之间
  • 2.用户输入数字,如果输入的数字比随机数小,就提示玩家猜小了,输入的数字比随机数大,就提示猜大了,直至找到我们的随机数
  • 结合上面两点,就成了我们今天要实现的第一个小项目,猜数字游戏,我们分步来分析。

一.生成随机数

  • 为了让电脑能生成的数随时在变化,我们必须找到一个在随时变化的东西传进去不断的生成数
  • 此时我们想到,有一个东西正无时无刻不在发生变化,那就是时间,恰好符合我们的要求。
  • 接下来先讲讲怎么通过时间戳生成随机数。

随机数的生成

  • 什么是时间戳?
  • 时间戳是计算机科学中常见的术语,是指一种记录时间的方式,通常用于记录某个事件的发生时间或者文件的创建、修改时间等信息。简单的说,时间戳就是一串数字,表示从某个固定时间点(1970年1月1日00:00:00)开始到现在的时间长度,通常以秒为单位计算。
  • 生成随机数的函数
#include<stolib>//使用该函数所需的头文件
rand()
  • 我们通过msdn来认识一下它

在这里插入图片描述

  • rand的返回值为一个整型,注意最后一句话哦:

在这里插入图片描述

  • 也就是说,在使用rand之前,我们得先调用一下srand为其设定生成随机数的起点(或者生成器)”
  • srand函数msdn定义如下:
    在这里插入图片描述
  • 当我们调用srand函数时,必须满足的条件是传给它的值是一个变化的值,此时就可以用我们前面讲到的时间戳了
#include<time.h>//使用time函数所需头文件
srand((unsigned int)time(NULL));//把时间函数置空传给srand同时由于srand要求参数必须为unsigned int型,把time(NULL)强制类型转换一下
  • 注意,rand生成的其实是一个伪随机数。

二. 猜数字

随机数的问题搞定了,现在开始解决具体问题

打印菜单

  • 在开始游戏前,我们得先打印一个菜单来提醒一下玩家怎么进入游戏。
  • 这一步其实是非常简单的,代码如下
void menu()//打印菜单
{
	printf("*****************************\n");
	printf("*********** 1.play **********\n");
	printf("*********** 0.exit **********\n");
	printf("*****************************\n");

}

  • 好了,一个简单的菜单就写好了,但是此时的1和0是没有任何的选择效果的,我们接下来就让我们的菜单真正能做到输入1开始输入0结束的效果。
int main()
{
	srand((unsigned int)time(NULL));
	int input = 0;
	
	do {
		
		menu();
		printf("请选择:> ");
		scanf("%d",&input);
		switch (input)
		{
		case 1:
			game();	//进入游戏	
			break;
		case 0:
			printf("退出游戏\n");
			break;
			
		default:
			printf("输入错误,请重新输入\n");//输入的非0非1时
			break;
		}
	}while(input);


	return 0;
}
  • 来测试一下我们这个菜单的效果

在这里插入图片描述

  • 非常完美,菜单算是打印完成了,我们进行下一步。

游戏的编写

  • 前面我们已经分析了该游戏的逻辑,现在我们就来根据我们游戏的逻辑来编写这段代码:
void game()
{
	int random_num = rand() % 100 + 1;//产生1-100的随机数
	int input = 0;
	while (1)
	{
		printf("请输入猜的数字>:");//玩家输入
		scanf("%d", &input);
		if (input > random_num)//输入的数字比生成随机数大
		{
			printf("猜大了\n");
		}
		else if (input < random_num)//生成的数字比随机数小
		{
			printf("猜小了\n");
		}
		else
		{
			printf("恭喜你,猜对了\n");
			break;
		}
	}
}

  • 唯一要解释一下的是随机数生成的范围是怎么设定在0-100的
int random_num = rand() % 100 + 1;
  • 看下这段代码,我们把生成的随机数对100取余,那么此刻是不是随机数的值就一定在0-99之间了?(大于100的话会进1的),然后我们对这个数再+1,那么此时随机数的范围就被定在1-100了?
  • 这个项目并不算太难,大家看代码自己分析一下相信就能想明白,其他的我就不过多解释了,咱们来直接试试游戏的效果。
    在这里插入图片描述
  • 没啥问题吧?话说我两次就猜对了今天是不是该去买彩票呢?

三.源码

  • 源码给大家放这啦,有需要的自取哦!
#include<stdlib.h>
#include<time.h>
void menu()//打印菜单
{
	printf("*****************************\n");
	printf("*********** 1.play **********\n");
	printf("*********** 0.exit **********\n");
	printf("*****************************\n");

}
void game()
{
	int random_num = rand() % 100 + 1;
	int input = 0;
	while (1)
	{
		printf("请输入猜的数字>:");
		scanf("%d", &input);
		if (input > random_num)
		{
			printf("猜大了\n");
		}
		else if (input < random_num)
		{
			printf("猜小了\n");
		}
		else
		{
			printf("恭喜你,猜对了\n");
			break;
		}
	}
}

int main()
{
	srand((unsigned int)time(NULL));
	int input = 0;

	do {

		menu();
		printf("请选择:> ");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			game();	//进入游戏	
			break;
		case 0:
			printf("退出游戏\n");
			break;

		default:
			printf("输入错误,请重新输入\n");//输入的非0非1时
			break;
		}
	} while (input);


	return 0;
}

总结

  • 以上就是今天要讲的所有内容啦,说实话我一开始压根没打算更新这个项目的,因为大家看代码就知道真的非常非常的简单。但是为了照顾有些真的是0基础的小白,嗯,咱们还是从简单的开始吧。

  • 如果你觉得自己的基础还不错,想看稍微有点难度的实战项目的话,可以看看下面这两篇博客哦!
    【C语言】万字教学,带你分步实现扫雷游戏(内含递归函数解析),剑指扫雷,一篇足矣
    【C语言】三子棋详解(包教包会的那种)

  • 如果你对文章的内容有任何疑问欢迎在评论区或者私信博主指出哦,博主看到都会第一时间回复的!

  • 大噶(家)下次再见啦!

新人博主创作不易,如果感觉文章内容对你有所帮助的话不妨三连一下这个新人博主再走呗。你们的支持就是我更新的动力!!!

(可莉请求你们三连支持一下博主!!!点击下方评论点赞收藏帮帮可莉吧)
在这里插入图片描述

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

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

相关文章

Python Locust全过程使用代码详解

下方查看历史精选文章 重磅发布 - 自动化框架基础指南pdfv1.1大数据测试过程、策略及挑战 测试框架原理&#xff0c;构建成功的基石 在自动化测试工作之前&#xff0c;你应该知道的10条建议 在自动化测试中&#xff0c;重要的不是工具 Python locust 是一个基于 Python 的开源负…

MKS SERVO4257D 闭环步进电机_系列9 上位机通讯示例

第1部分 产品介绍 MKS SERVO 28D/35D/42D/57D 系列闭环步进电机是创客基地为满足市场需求而自主研发的一款产品。具备脉冲接口和RS485/CAN串行接口&#xff0c;支持MODBUS-RTU通讯协议&#xff0c;内置高效FOC矢量算法&#xff0c;采用高精度编码器&#xff0c;通过位置反馈&a…

视觉SLAM十四讲——ch13实践(设计SLAM系统)

视觉SLAM十四讲——ch13的实践操作及避坑 1. 实践操作前的准备工作2. 实践过程2.1 运行测试程序2.2 运行00数据集2.3 更改代码画出运动轨迹 3. 遇到的问题及解决办法3.1 cmake ..时出现的问题3.2 make时出现的问题3.3 头文件下红色报错 1. 实践操作前的准备工作 下载Kitti数据…

使用dat.gui更改three.js中的物体变量

一、dat.gui介绍 gui是一种JavaScript库&#xff0c;用于创建可视化控件和调试工具。它是dat.gui的简称。dat.gui是一个用于在Web应用程序中创建可定制GUI的JavaScript库。它可以轻松创建滑块、复选框、颜色选择器等控件&#xff0c;用户可以直接在GUI上进行交互和调整。dat.g…

一起来看看 K-verse LAND 销售活动中的合作伙伴给大家的祝福吧~

K-verse 是 The Sandbox 中的韩国内容主题空间&#xff0c;自去年 12 月首次推出以来&#xff0c;已吸引多家合作伙伴加入。此外&#xff0c;现有的合作伙伴公司和品牌正在积极准备以新的形式展示元宇宙内容。 这里有着许多可能性&#xff0c;K-verse LAND 销售活动是不是让你们…

Tomcat及项目部署

一、Tomcat是什么&#xff1f; Tomcat 是基于 Java 实现的⼀个开源免费, 也是被⼴泛使⽤的 HTTP 服务器。 二、下载安装 官⽅⽹站&#xff1a;https://tomcat.apache.org/ 选择其中的 zip 压缩包, 下载后解压缩即可. 解压缩的⽬录最好不要带 "中⽂" 或者 特殊符号…

vue-cli 如何修改默认环境变量名称

比如想要修改开发环境 NODE_ENV 的默认值 &#xff1f; 1. 新建文件 .env.development 2. 在 packjson.json 的 script 中添加一行代码 --mode [文件 env 后面的环境名称] "dev": "vue-cli-service serve --mode development", 3. 然后 npm run dev 环境变…

JavaScript ES12新特性有哪些?

文章目录 导文Promise.any()WeakRef 和 FinalizationRegistry数字分隔符String.prototype.replaceAll()Logical Assignment Operators数字类型的新增方法私有字段和方法 导文 JavaScript ES12&#xff08;也称为ECMAScript 2022&#xff09;是JavaScript的最新版本&#xff0c;…

如何解决报错:nginx error!

目录 Nginx报错问题 nginx error! The page you are looking for is not found. Website Administrator 解决方法 Nginx报错问题 当访问搭建好的Nginx服务网站时 有以下报错 nginx error! The page you are looking for is not found. Website Administrator Someth…

猪齿鱼开源发布2.0版本:DevOps能力全面升级,研发效能显著提升,欢迎即刻体验!

近日&#xff0c;甄知科技猪齿鱼Choerodon数智化开发管理平台正式发布了开源2.0版本&#xff01; 开源发布会上&#xff0c;甄知产研团队、业内伙伴和社区开发者们齐聚一堂&#xff0c;共同见证猪齿鱼开源2.0的重磅发布&#xff01;发布会由上海甄知科技创始合伙人兼CTO张礼军先…

前端添加代理通过nginx进行转发解决跨域

记录在项目中遇到跨域并进行解决的方案 解决方案 记录在项目中遇到跨域并进行解决的方案前端代理部分nginx转发配置origin限制,修复CORS跨域漏洞 前端代理部分 代理后页面请求地址截图&#xff1a; 这里地址栏的地址是&#xff1a;http://127.0.0.1:13908 调用登录接口请求地…

OrCAD Capture 元件位号Part Reference有下划线

原因&#xff1a; 提示用户曾经修改过原理图封装。 现象&#xff1a; USB20_12 解决办法&#xff1a; 对着元器件右键>User Assigned Reference > Uset&#xff0c;即可消除下划线。 修改后&#xff1a;

通过域名的方式访问服务器里的资源

大家好&#xff0c;我是雄雄。欢迎关注微信公众号&#xff1a;雄雄的小课堂 前言 在平时的项目过程中&#xff0c;我们可能经常会遇到这样的场景。 上传资源&#xff0c;比如图片或者视频到服务器中&#xff0c;上传上去后&#xff0c;我们给数据库中存的是文件所在路径&…

SSMP整合案例(3) 创建数据层并在测试类中运行数据库增删查改操作

上文 SSMP整合案例(2) Spring Boot整合Lombok简化实体类开发我们已经开发完了实体类 我们就可以做数据层了 目前来讲 数据层技术 使用了最大的自然是 MyBatis 但其实MyBatis-Plus在国内很多中小企业还是使用的挺多的 这次 我们主要是通过MyBatis-Plus和Druid来做这件事情 这两…

5款界面简洁无广告的轻量级小软件

今天的主题是简洁&#xff0c;轻便&#xff0c;都是轻量级的小软件&#xff0c;界面都是非常简洁&#xff0c;而且无广告的。 文件同步——Syncthing Syncthing是一款用于同步和分享文件的工具。它可以让你在不同的设备上同步你的文件夹&#xff0c;并提供多种功能和选项来设…

鱼眼相机成像模型以及基于OpenCV标定鱼眼镜头(C++)

opencv系列 文章目录 opencv系列一、鱼眼镜头模型二、投影函数等距投影模型等立体角投影模型正交投影模型体视投影模型 三、OpenCV中的鱼眼相机模型四、标定&#xff08;C&#xff09;实现使用的函数采集标定图像标定代码标定结果 一、鱼眼镜头模型 鱼眼镜头一般是由十几个不同…

新能源充电桩4G无线物联网解决方案|4G路由器ZR2000

日常生活中新能源汽车已随处可见&#xff0c;新能源也逐渐普遍&#xff0c;绿色出行、低碳生活的环保概念也随着科普深入人心&#xff0c;新能源汽车必备的充电桩行业随之崛起&#xff0c;为保证用户体验及运营管理&#xff0c;充电桩需要通过网络实现数据传输、远程监控、位置…

19-递归的理解、场景

一、递归 &#x1f32d;&#x1f32d;&#x1f32d;在函数内部&#xff0c;可以调用其他函数。如果一个函数在内部调用自身本身&#xff0c;这个函数就是递归函数 核心思想是把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解 一般来说&#xff0c;递归…

Azure-FunctionApp入门实战

介绍 FuntionApp 是微软云推出的一款serverless产品服务&#xff0c;作为coder可以无需关心程序部署所需的infra信息&#xff0c;只需要focus自己的业务代码实现即可 使用场景 是不是所有的业务都可以使用serverless产品呢&#xff1f;理论上是可以的&#xff0c;但是从实际…

初识mysql数据库之mysql数据库安装(centos)

目录 一、卸载不需要的环境 二、安装mysql yum源 三、安装mysql 四、登录mysql 1. 直接登录 2. 设置免密码登录 五、配置my.cnf 六、mysql登录时的一些选项介绍 一、卸载不需要的环境 要注意&#xff0c;在安装mysql数据库时&#xff0c;最好将用户切换为root&#xf…