C语言小游戏--猜数字小游戏

简介: 使用C语言实现简单的小游戏:猜数字小游戏,轻松上手,快来试试吧!

紫蓝色几何渐变科技互联网微信公众号封面 (1).gif

猜数字小游戏基本实现的逻辑也是大小关系来实现的,电脑随机生成1~100之间的一个随机数,然后需要我们来输入数字来进行猜数字,如果输入的数字比电脑随机生成的数字大,那么就会提示猜大了,如果输入的数字比随机生成的数字小,那么就会提示猜小了,但是要涉及到随机数的设置,这个也会一一分析

基本实现结果:

先给出一个菜单,然后可以让玩家进行选择,然后输入1~100之间的数字,进行猜数字,如果输入的数字小于电脑生成的数字,就提示你猜小了,如果大于,就提示猜大了,直到你猜中数字

💓游戏菜单实现

要实现游戏菜单,首先在代码运行起来之后就要打印这个菜单,而且玩完一次游戏之后还想再玩也是可以选择的,因此就需要一个循环,而且是先打印循环语句再进行判断,所以就需要do while循环

代码实现:

#include <stdio.h>voidmenu()
{
printf("*************************\n");
printf("*************************\n");
printf("******** 1. Play ********\n");
printf("******** 0. Exit ********\n");
printf("*************************\n");
printf("*************************\n");
}
intmain()
{
intinput=0;    
do    {
//打印菜单menu();
printf("请选择:");
scanf("%d", &input);
switch (input)
        {
case1:
printf("猜数字小游戏:\n");
break;
case0:
printf("退出游戏:\n");
break;
default:  //加上输入的不为0也不为1的情况printf("输入非法,请重新输入:\n");
break;
        }
    } while (input);   //将input放进判断条件意思是当input为真时进入循环//为假退出循环,当输入的不为0时就会进入循环//这样就可以实现一次玩完之后还可以再玩return0;
}

💓猜数字函数的实现

voidgame()
{
//1.生成随机数//2.猜数字}
要实现猜数字,首先得设置一个数来猜,并且这个数谁也不知道,需要电脑设置一个1~100的随机数,然后玩家再进行猜数字,如果猜大了就显示猜大了,猜小了就显示猜小了,直至猜对,因此如果让电脑来随机生成一个随机数是一个关键,那么接下来就来看看随机数怎么生成

📍随机数生成器

C语言中有一个库函数是专门生成随机数,这个函数是rand,关于这个函数的具体细节我们可以再使用C语言的工具来学习一下

rand函数会返回一个0~RANG_MAX的一个随机值,那这个RAND_MAX的值是多少呢?,我们可以在编译器上面看一看

也就是说,rand函数会返回一个0~32767的一个随机数,我们可以打印看一看

#include <stdlib.h>#include <stdio.h>voidgame()
{
//1.生成随机数inttarget_num=rand();
printf("%d", target_num);
//2.猜数字}

可以看到两次运行之后生成的随机数居然是一模一样,如果这样设置随机数就没有意思,每次设置的数都一样,猜完一次就知道第二次的结果,因此,不能只是单纯的用rand函数来设置随机数,上面对rand函数的介绍我们只看了前半段话,后半段话还没有看

后半段说了,在使用rand函数之前需要使用srand函数来进行设置,那srand怎么用呢?可以看一下

因此我们来使用一下srand来设置一下随机数的生成器

#include <stdlib.h>#include <stdio.h>voidgame()
{
//1.生成随机数srand(1); //函数的参数类型为unsigned int 类型,所以可以设置不同的数字先来观察一下inttarget_num=rand();
printf("%d\n", target_num);
//2.猜数字}

只有当srand函数参数设置不同数字时生成的随机数才会改变,那这就证明在srand函数参数为一个随机值时才可以得到不同的随机数,那这就很奇怪,我们需要生成随机数,而这个函数的参数也需要随机数,这就很挫了,那是不是证明这个方法行不通呢?

在生成随机数时,我们只需要在里面放进去一个随时在变化的值,那么什么值是一直在变化的呢?那就是时间,时间在每分每秒的一直变化,那这个不就是我们所需要的值吗?因此我们需要使用时间戳,因为时间在随时变化,时间戳跟着时间也在随时变化,在C语言中有表示时间的函数叫time函数,关于time函数我们可以来看一看

time函数的函数参数是需要一个指针,但在设置随机数的时候并不需要什么指针,因此就传给它一个空指针NULL,time函数的返回类型是time_t,其实time_t是long long经过重命名之后的值,但是我们在使用srand时它所需要的函数参数是unsigned int 的值,所以我们需要对time函数进行强制类型转换来达到设置随机数的目的

#include <time.h>#include <stdlib.h>srand(( unsignedint )time(NULL));  //设置随机数生成器

在设置随机数的生成器的时候,我们只需要生成一次随机数就够了,因此要将随机数的生成器放在主函数中,如果放进game函数中,每玩一次就会生成一次随机数,这样子很会导致生成的随机数并不是很随机,生成的随机数两个数之间的差异并不是很大,所以将随机数的生成器放在主函数的内部就够了,我们可以看一下效果:

#include <stdlib.h>#include <stdio.h>voidgame()
{
//1.生成随机数 inttarget_num=rand();
printf("%d\n", target_num);
//2.猜数字}
intmain()
{
intinput=0;
//设置随机数的生成器srand((unsignedint)time(NULL));
do    {
menu();
printf("请选择:");
scanf("%d", &input);
switch (input)
        {
case1:
printf("猜数字小游戏:\n");
game();
break;
case0:
printf("退出游戏:\n");
break;
default:
printf("输入非法,请重新输入:\n");
break;
        }
    } while (input);
return0;
}

但是如果这样写,那生成的随机数是0~32767之间的数,猜数字的难度就及其大,因此我们得将范围变小,缩小至1~100,要知道任何一个数模上100得到的结果是0~99之间的,那如果使用生成的随机数%100然后+1就可以得到1~100之间的随机数

intret=rand() %100+1; //随机生成1~100之间的数字
当随机数设置好了之后,我们就需要进行猜数字了,那这个逻辑就很简单

📍猜数字

关于猜数字,我们需要输入一个值,如果这个输入的值比电脑随机生成的值大,那么就会提示猜大了,如果输入的数比电脑随机生成的数字小了,那么就会提示猜小了,这样反复的循环,直到猜对

代码实现:

voidgame()
{ 
inttarget_num=rand() %100+1;   //随机生成的1~100之间的数intnum=0;
while (1)  //设置死循环,如果没有猜对就一直猜    {
printf("请猜数字:");
//输入scanf("%d", &num);
//判断if (num>target_num)
printf("猜大了\n");
elseif (num<target_num)
printf("猜小了\n");
//猜对获胜break跳出循环else        {
printf("猜对了\n");
break;
        }
    }
}

写到这里整个代码的基本逻辑都写完了,下面展示完整的代码

📍完整代码

//猜数字小游戏//头文件的包含#include <stdio.h>#include <time.h>#include <stdlib.h>//菜单voidmenu()
{
printf("*************************\n");
printf("*************************\n");
printf("******** 1. Play ********\n");
printf("******** 0. Exit ********\n");
printf("*************************\n");
printf("*************************\n");
}
//猜数字游戏逻辑voidgame()
{   
//1.随机数的生成inttarget_num=rand() %100+1;  //生成的随机数是1~100//rand%100是0~99之间的数,再加上1就是1~100之间的数intnum=0;
//2.猜数字while (1)
    {
printf("请猜数字:");
//输入scanf("%d", &num);
//判断if (num>target_num)
printf("猜大了\n");
elseif (num<target_num)
printf("猜小了\n");
//猜对了就获胜else        {
printf("猜对了\n");
break;
        }
    }
}
intmain()
{
intinput=0;
//设置随机数的生成器srand((unsignedint)time(NULL));
do    {
menu();
printf("请选择:");
scanf("%d", &input);
switch (input)
        {
case1:
printf("猜数字小游戏:\n");
game();
break;
case0:
printf("退出游戏:\n");
break;
default:
printf("输入非法,请重新输入:\n");
break;
        }
    } while (input);
return0;
}


那么猜数字小游戏整个游戏逻辑和代码就展示完了,如果大家有什么疑问可以打在评论区,我们可以一起讨论一下,或者也可以私信我,感谢大家的支持!谢谢!

目录
相关文章
|
22天前
|
C语言
【C语言】猜数字小游戏的一步一步实现2
【C语言】猜数字小游戏的一步一步实现
|
22天前
|
算法 C语言
【C语言】猜数字小游戏的一步一步实现1
【C语言】猜数字小游戏的一步一步实现
|
22天前
|
程序员 C语言
【C语言实战项目】猜数字游戏
【C语言实战项目】猜数字游戏
37 0
【C语言实战项目】猜数字游戏
|
22天前
|
C语言
C语言之三子棋小游戏
C语言之三子棋小游戏
|
1天前
|
C语言
C语言——oj刷题——猜数字游戏
C语言——oj刷题——猜数字游戏
|
9天前
|
C语言 C++
C语言项目(1)----扫雷小游戏的实现
C语言项目(1)----扫雷小游戏的实现
17 0
|
9天前
|
C语言
C语言实现猜数字游戏
C语言实现猜数字游戏
|
13天前
|
C语言
循环的应用--猜数字游戏、关机程序【c语言篇】
循环的应用--猜数字游戏、关机程序【c语言篇】
26 0
|
13天前
|
C语言
【C语言入门小游戏】扫雷
【C语言入门小游戏】扫雷
21 1
|
13天前
|
编译器 C语言
【C语言入门小游戏】三子棋
【C语言入门小游戏】三子棋
19 0
【C语言入门小游戏】三子棋

相关实验场景

更多