猜数字游戏实现(详解)

article/2025/4/6 18:20:01

目录

前言

一、打印游戏菜单

二、循环条件补充

三、实现猜数字

                1、生成随机数

                2、猜数字

四、源码


前言

        学了这么久的C语言,目前就可以通过我们曾经所学的知识来写一个猜数字游戏。怎么实现的呢?跟着我的脚步往下看吧!

思路:

一、打印游戏菜单

为了可以让游戏反复玩,则需要菜单来提醒玩家是否继续或退出,那么该如何实现菜单呢?让我们看看下面的代码(部分)。

#include <stdio.h>
void menu()
{printf("*************************\n");printf("******   1.play  ********\n");printf("******   0.exit  ********\n");printf("*************************\n");
}
int main()
{int input = 0; do{//打印菜单menu();printf("请选择(1/0):");//输入scanf("%d", &input);} while();
}

        代码详解:想反复玩游戏,肯定需要循环,这里我们采用do while循环。接下来打印菜单,这非常简单,不就是几行代码打印吗,所以我们封装一个函数menu(菜单的意思),它不需要返回任何值所以是void类型。这里需要注意一下,input是一个变量,所以前面要加取地址符号,到目前为止,只有数组名前不需要加取地址符。 

二、循环条件补充

#include <stdio.h>
void menu()
{printf("*************************\n");printf("******   1.play  ********\n");printf("******   0.exit  ********\n");printf("*************************\n");
}
int main()
{int input = 0; do{//打印菜单menu();printf("请选择(1/0):");//输入scanf("%d", &input);switch (input){case 1:printf("猜数字\n");break;case 0:printf("退出游戏\n");break;default:printf("选择错误,重新选择\n");break;}} while (input);}

        代码详解:这里可以输入任何值,输入“1”开始游戏,输入“0”则退出游戏,但万一玩家不小心输入其他值时,我们是不是要提醒玩家“输入错误,重新选择”,这时switch语句就派上用场了。最后循环条件是input,大家想想,假如input为“0”,判断为假,则结束循环,这不就和退出游戏相互匹配上了。0为假,非0为真。

        最后我们调试来看看结果,这里不要一直写下去,写一步要看看结果是否符合预期,不然写到最后出现n条错误,那就尴尬了。(显然下面结果是符合我们预期的)

 三、实现猜数字

#include <stdio.h>
void menu()
{printf("*************************\n");printf("******   1.play  ********\n");printf("******   0.exit  ********\n");printf("*************************\n");
}void game()
{}int main()
{int input = 0; do{//打印菜单menu();printf("请选择(1/0):");//输入scanf("%d", &input);switch (input){case 1:game();break;case 0:printf("退出游戏\n");break;default:printf("选择错误,重新选择\n");break;}} while (input);}

        代码详解:这里我们需要把case 1中的printf换成game函数(是猜数字的整个路基),这里game函数也不需要返回任何值,所以还是void类型。

1、生成随机数

#include <stdio.h>
#include <stdlib.h>
void menu()
{printf("*************************\n");printf("******   1.play  ********\n");printf("******   0.exit  ********\n");printf("*************************\n");
}void game()
{//生成随机数int ret = rand();printf("%d\n", ret);
}int main()
{int input = 0; do{//打印菜单menu();printf("请选择(1/0):");//输入scanf("%d", &input);switch (input){case 1:game();break;case 0:printf("退出游戏\n");break;default:printf("选择错误,重新选择\n");break;}} while (input);}

        代码详解:C语言中有个rand函数,是专门用来生成随机数的。可以通过后面的网站来加深对rand函数的了解(https://legacy.cplusplus.com/reference/cstdlib/rand/?kw=rand),这里我简单的解释一下,rand函数返回的是0~RAND_MAX(它的值是32767)之间的一个随机数,同时还需要引用头文件<stdlib.h>

程序运行结果:

         上面是我两次运行的结果,大家有没有发现,我第一次运行的生成数据和第二次一模一样,如果这是一款游戏,两次数据都一样,那还有啥可玩的。

        那么问题肯定出现在rand函数上。其实使用rand之前还需要调用另外一个函数srand来设置随机数的生成器。(https://legacy.cplusplus.com/reference/cstdlib/srand/)

 它需要接收一个整数值。

下面是加入函数srand代码:

#include <stdio.h>
#include <stdlib.h>
void menu()
{printf("*************************\n");printf("******   1.play  ********\n");printf("******   0.exit  ********\n");printf("*************************\n");
}void game()
{srand(0); //假设接收的整数是0//生成随机数int ret = rand();printf("%d\n", ret);
}int main()
{int input = 0; do{//打印菜单menu();printf("请选择(1/0):");//输入scanf("%d", &input);switch (input){case 1:game();break;case 0:printf("退出游戏\n");break;default:printf("选择错误,重新选择\n");break;}} while (input);}

 接下来我们Ctrl + F5看看运行结果:

         有没有发现还是出问题了,每次猜数字的数字都是一样的,这猜起来还是没有什么意义。有没有可能把srand接收的整数值换一下,值就变了呢?让我们来实践一下。

         值果然变了,所以我们需要接收一个可以变化的值,那怎么换呢?有没有发现,在我们电脑上,时间一直都在发生变化,所以我们能不能接收时间的某一个值?这里给大家引入一个词叫时间戳。这是时间戳转换工具网址(https://tool.lu/timestamp/)

        所以我们可以把时间戳传给srand函数,那怎么传时间戳呢?在C语言中,time函数会返回时间戳。(https://legacy.cplusplus.com/reference/ctime/time/?kw=time)

time函数会返回time_t,其实就是返回一个整型(知道就行了),而后面的参数是一个指针。同样地,它还需要包含一个头文件<time.h>。

接下来我们来看看代码:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void menu()
{printf("*************************\n");printf("******   1.play  ********\n");printf("******   0.exit  ********\n");printf("*************************\n");
}void game()
{srand((unsigned int)time(NULL)); //生成随机数int ret = rand();printf("%d\n", ret);
}int main()
{int input = 0; do{//打印菜单menu();printf("请选择(1/0):");//输入scanf("%d", &input);switch (input){case 1:game();break;case 0:printf("退出游戏\n");break;default:printf("选择错误,重新选择\n");break;}} while (input);}

        代码详解:首先我在time函数前加了unsigned int是因为time函数会返回一个整型,我把它强制转换类型了,而NULL是空指针,它的值是0。(目前就知道这么多就行了)

运行结果:

         那么问题又来了,这些随机数之间相邻太近了,这说明还不够随机,在这里,我想说的是函数srand在程序中只要调用一次就行,不需要频繁调用,所以我们只需要放到main函数中,因为我们知道,main是程序的入口且只会执行一次。

来看看改之后的结果:

         你以为到这就结束了吗?其实并没有,回过头来看,这些随机数的值是不是太大了,而题目要求是1~100之间啊,那我们应该怎么做呢?先看看下面的代码:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void menu()
{printf("*************************\n");printf("******   1.play  ********\n");printf("******   0.exit  ********\n");printf("*************************\n");
}void game()
{//生成随机数int ret = rand()%100+1;printf("%d\n", ret);
}int main()
{int input = 0; srand((unsigned int)time(NULL));do{//打印菜单menu();printf("请选择(1/0):");//输入scanf("%d", &input);switch (input){case 1:game();break;case 0:printf("退出游戏\n");break;default:printf("选择错误,重新选择\n");break;}} while (input);}

        代码解析:为什么要在rand后面%100+1呢?原因是:任何一个数字,只要%100,它的结果取值范围就是0~99 ,而现在要生成1~100的数字,所以再+1,它的取值范围就变成了1~100了。

运行结果:

2、猜数字 

 部分代码如下:

void game()
{int num = 0;//生成随机数int ret = rand() % 100 + 1;//printf("%d\n", ret);//猜数字(循环)while (1){printf("请猜数字:");scanf("%d", &num);//判断if (num < ret){printf("猜小了\n");}else if (num > ret){printf("猜大了\n");}else{printf("恭喜你,猜对了\n");break;//直到猜对跳出循环}}
}

        看到这,读者们大概理解了思路了吧。最后我再优化一个效果(在源码里),就是猜对数字后有一个清屏的效果,这里我用到了system,想了解其用法可以来到我这篇博客(https://blog.csdn.net/Weraphael/article/details/127750890)

四、源码

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void menu()
{printf("*************************\n");printf("******   1.play  ********\n");printf("******   0.exit  ********\n");printf("*************************\n");
}void game()
{int num = 0;//生成随机数int ret = rand()%100+1;//猜数字(循环)while (1) {printf("请猜数字:");scanf("%d", &num);//判断if (num < ret)printf("猜小了\n");else if (num > ret)printf("猜大了\n");else{printf("恭喜你,猜对了\n");break;//直到猜对跳出循环}}
}int main()
{int input = 0; srand((unsigned int)time(NULL));do{//打印菜单menu();printf("请选择(1/0):");//输入scanf("%d", &input);system("cls");switch (input){case 1:game();break;case 0:printf("退出游戏\n");break;default:printf("选择错误,重新选择\n");break;}} while (input);}

 感兴趣的小伙伴可以玩玩哦!


http://chatgpt.dhexx.cn/article/FCfw3IVv.shtml

相关文章

C语言猜数字小游戏---详解+源码

学了一些基础的C语言语法后我们就可以开始试着写一些小程序或者小游戏了&#xff0c;今天我就给大家用C语言写一个简单的猜数字小游戏。 源代码&#xff1a; #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<windows.h> #include<stdlib.h> #…

【C语言编程】实现猜数字游戏

用C语言编程的方法来实现我们在生活中经常玩到的一个猜数字小游戏&#xff0c;其主要玩法就是我们编写出一个程序&#xff0c;起先计算机会先自动生成一个数&#xff0c;这个数也就是我们需要去才对的数&#xff0c;然后玩家在这个程序的执行开始后先输入一个数&#xff0c;拿这…

Python每日一练——第3天:三种猜数字小游戏

前言&#x1f4e2;&#x1f4e2; Python每日一练来啦&#xff0c;本文已收录于&#xff1a;《Python每日一练》专栏 此专栏目的在于&#xff0c;帮忙学习Python的小白提高编程能力&#xff0c;训练逻辑思维&#xff0c;每周持续更新中&#xff0c;欢迎免费订阅&#xff01;&a…

猜数字小游戏——c语言实现(详解)

目录 一、实现目标 二、准备部分 1.1 时间戳 2.1 rand&#xff08;&#xff09;函数 3.1 srand函数 4.1time函数 三、随机数的实现 四、游戏菜单的实现 五、菜单功能的实现 六、游戏主体部分 七、游戏完整代码 八、游戏实现效果图 九、总结 一、实现目标 1.写一个…

通过游戏编程学Python(1)— 猜数字

通过游戏编程学Python 通过游戏编程学Python&#xff08;1&#xff09;— 猜数字 文章目录 通过游戏编程学Python前言一、知识点二、第一个游戏 —— 猜数字1. 玩法简介2. 游戏流程 三、程序代码三、代码详细分析1. import语句2.输入与输出3.While循环4.代码段5.变量类型转换6…

C语言实现猜数字游戏(超详解)

目录 前言 一、游戏描述 二、代码实现 1.生成游戏菜单 2.构建主函数 3.构建游戏函数 三、二分法实现猜数 代码附上: 写在最后&#xff1a; 前言 猜数字小游戏是我们大多数人学习C语言时都会了解到的一个有趣的C语言小游戏&#xff0c;下面我将详细介绍该游戏的实现和…

都说要打造个人IP,那到底什么才是个人IP?

什么是个人IP&#xff0c;它由哪些组成&#xff1f; 它由多个方面组成&#xff0c;包括个人的网络行为、习惯、兴趣爱好、位置信息&#xff0c;以及其他可以用于识别个人的数据。 目录 什么是个人IP&#xff0c;它由哪些组成&#xff1f; 第一&#xff0c;性格方面 第二&am…

一键自动修改IP小工具分享

一键自动修改IP小工具分享 1.功能介绍2. 测试环境3. 背景4. 使用方法配置文件修改 5. 补充说明电脑上有多个网卡显示当前IP 6. 参考文档7. .exe程序下载链接 1.功能介绍 功能: 1. 可以一键修改电脑的IP(包括自动获取IP和手动配置固定IP); 2. 配置文件可根据需求修改; 3. 操作简…

普通网红如何打造个人IP?个人IP打造有哪些注意事项?

不管你是做哪个行业的,你一定要把自己个人IP打造成一个爆款,做窄做小,让你的用户去对号入座。 个人IP如何打造?把自己打造成爆款? 比如你是做保险的,你不能所有保险都去做,而是只做某一类保险,只针对某一类人群的保险。 比如只做美国保险,并且只做美国个人方面的报下,针对…

网络 IP

ip地址的分类 既然每个人的ip地址都不一样&#xff0c;那一台主机怎么通过ip地址找到另一台主机的呢&#xff0c;茫茫人海&#xff0c;不可能一个个查找把&#xff0c;所以就有专门的人来管理和分配这个ip地址&#xff0c;看看以前怎么分的地址(了解) 网络号由你所连的网决定&a…

如何打造ip,打造属于自己的护城河?

最近萃见一直在考虑打造个人ip的事情。人一思考起来&#xff0c;就容易魔怔。吃饭在想&#xff0c;走路在想&#xff0c;睡前躺在那也在想。信息瞬息万变的时代&#xff0c;普通人该何去何从&#xff1f; 我记得刚接触互联网这一块的时候流量还是很好获取的&#xff0c;你就往…

如何从零到一打造你的网络个人IP(时代赚钱利器)

大家好,我是夕颜,欢迎来到夕颜聊副业 这两年个人IP和私域运营这几个词异常火热。 我们该如何正确去理解个人IP这个词和打造你的IP ? 很多人对于个人IP存在一些误导 我卖个减肥药和护肤品是不是个人IP? 答案:不是,在我认为卖产品是以你个人的名义去帮别人做品牌IP,不…

[网络] 大话IP地址

本文说的IP是指IPv4,IPv6不在本文的讨论范围之内。 IP是由32位2进制组成,通常为了表示方便,用4组十进制数字表示, 如果两个IP地址,它的Net_ID相同,只有Host_ID不同,表示它们在同一个网段内,在局域网内,同一个网段的数据可以通过广播传递,而不同网段则必须通过路由器…

世界上最百变的人不是女友,竟然是......

问&#xff1a;“这世上最百变的人是谁&#xff1f;” 答&#xff1a;“女友。” 不好意思你出局了。 正确答案是&#xff1a;“老妈&#xff01;” 老妈才是走在朋友圈前端的弄潮儿。 我的老妈造型百变&#xff0c; 丝巾、墨镜、高跟鞋&#xff0c; 可以几十套衣服不重样。 我…

个人 IP 打造方法

什么是个人ip&#xff1f; “个人ip&#xff0c;网络用语&#xff0c;指个人对某种成果的占有权&#xff0c;在互联网时代&#xff0c;它可以指一个符号、一种价值观、一个共同特征的群体、一部自带流量的内容。每个人都是产品&#xff0c;把自己当成这辈子最好的产品去打造。…

新手如何打造个人IP?

最近经常有人在抖音和微博上问我&#xff0c;对于不熟悉自媒体的互联网新手&#xff0c;是否有可能打造个人IP呢&#xff1f;对于准备打造个人IP的新手&#xff0c;需要做哪些准备&#xff1f;从何处开始着手呢&#xff1f; 目录 自媒体新手打造个人IP的三个重要步骤。 第一…

手把手教你打造个人IP

现在的职场环境对个人发展实在太不友好&#xff0c;尤其是互联网人&#xff0c;随着年级的增长&#xff0c;有很大概率遭遇职场中年危机&#xff0c;基于此&#xff0c;建议每个人都要开启自己的副业&#xff0c;从而分担风险。 对个人来说&#xff0c;最好的副业就是自媒体&am…

打造个人IP,利用IP知识变现的万能方法

打造个人IP&#xff0c;利用IP知识变现的万能方法 &#xff08;本文首发公号【跟海哥学知识变现】&#xff0c;移步公号和100万小伙伴一起学知识变现&#xff0c;立马领取【知识变现】电子书一本&#xff09; 个人IP可能是未来五年&#xff0c;甚至是未来10年里最大的风口之一…

个人ip如何打造

目录 一、起号的基础逻辑 二、为什么新开的账号在10天之内一定会推出畅销产品&#xff1f; 三、详细说明操作步骤 ​四、抖音玩法儿讲解 模仿 投放 ​创新 五、为什么新账户在10天内一定会发布畅销产品呢&#xff1f; 六、官方的基础技巧。 第一步&#xff0c;准备5到…