【C语言】猜数字小游戏

简介: C语言实现猜数字小游戏

1. 游戏说明

  1. 电脑会随机生成一个1~100的数字。

  2. 猜数字

(1)猜大了,提醒猜大了,继续猜。

(2)猜小了,提醒猜小了,继续猜。

(3)猜对了。显示“恭喜你,猜对了”,结束游戏

(4)玩完一把不过瘾可以继续玩,不用退出程序。

2. 设计思路

通过调用随机数函数rand()产生随机数,在调用rand()时需要配合使用srand()和time()。

使用rand()%100能产生0~99的随机数,再+1(即rand()%100+1)就能让电脑产生1~100的数字。

通过scanf()函数输入数字猜测,再if语句判断猜的数字和电脑生成数字的大小进行相关提示。

所以最外面要有一个循环结构,这里我使用了while(1)死循环,当猜对时使用break跳出终止循环,否则继续猜直到猜对。

3. 相关函数

3.1 rand()函数

函数原型
8576311fb1d39f23304f9f3560c4f237.png

C语言中的rand()函数会返回一个范围在0~RAND_MAX(至少是32767)的伪随机整数

每次调用rand函数,它会生成一个新的随机数,并更新内部状态,以供下一次调用时使用。由于rand函数是伪随机数生成器,所以在每次程序运行时,如果不设置种子值,将会生成相同的随机数序列

为了生成不同的随机数序列,在调用rand()函数产生随机数前,我们要先调用srand()函数设置随机数种子(seed)。 如果没有设置随机数种子, rand()在调用时会自动设随机数种子为1。随机数种子相同,每次产生的随机数也会相同。

rand()函数包含在stdlib.h头文件中。

3.2 srand()函数

函数原型:
fbc012cb36d13d3397c9ef23cfa42506.png

C语言中的srand()函数用于初始化随机数生成器。它是伪随机数生成器,每次程序运行时都会生成相同的随机数序列。为了在每次运行时得到不同的随机数序列,需要使用与时间相关的种子值作为参数调用srand函数。

其中,seed是一个无符号整数,通常可以使用time函数获取当前系统时间作为种子值

通过调用srand函数,可以设置随机数生成器的种子值,然后使用rand函数生成随机数

需要注意的是,每次程序运行时,需要调用srand函数设置不同的种子值,以确保生成不同的随机数序列。否则,每次运行将会得到相同的随机数。

srand()函数也包含在stdlib.h头文件中。

3.3 time()函数

函数原型:
79509ad6a411d1da6b7486df02c1439b.png

time()函数功能是获取当前时间,并将其转换为time_t(时间戳)类型的值。

其中,timet *time 是一个指向time t 类型变量的指针,用于存储获取到的时间值。通常情况下,可以传入NULL,表示不需要返回时间值,只获取当前系统时间即可

如果要获取当前时间的值,可以传入一个time_t类型的变量的地址,time函数将会将当前时间值存储到该变量中。返回值是一个time_t类型的值,表示当前系统时间的秒数。

4. 游戏实现

需要包含的头文件:

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

4.1 打印菜单menu()函数

void menu()
{
   
    printf("**********************\n");
    printf("*****   1.play  ******\n");
    printf("*****   0.exit  ******\n");
    printf("**********************\n");
}

4.2 游戏game()函数

void game()
{
   
    //1. 生成随机数
    int ret = rand() % 100 + 1; //获得1~100的随机数
                                //rand()可以生成随机数,随机数的范围是0~32767
    //2. 猜数字
    int guess = 0;
    while(1)
    {
    
        printf("请猜数字:>");
        scanf("%d", &guess);
        if (guess > ret)
            printf("猜大了\n");
        else if (guess < ret)
            printf("猜小了\n");
        else
        {
   
            printf("恭喜你,猜对了!\n");
            break;
        }
    }
}

4.3 主函数main()函数

int main()
{
   
    //打印菜单
    //1. 玩游戏
    //0. 退出游戏
    int input = 0;
    srand((unsigned int)time(NULL)); //要给srand传递一个变化的值,计算机上的时间是时刻变化的
    do                               //time函数可以返回一个时间戳
    {
   
        menu();
        printf("请选择:>");
        scanf("%d", &input);
        switch (input)
        {
   
        case 1:
            game();
            break;
        case 0:
            printf("退出游戏\n");
            break;
        default:
            printf("选择错误,重新选择!\n");
            break;
        }
    } while (input);
    return 0;
}

5. 完整代码

#define _CRT_SECURE_NO_WARNINGS 1

#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()
{
   
    //1. 生成随机数
    int ret = rand() % 100 + 1; //获得1~100的随机数
                                //rand()可以生成随机数,随机数的范围是0~32767
    //2. 猜数字
    int guess = 0;
    while(1)
    {
    
        printf("请猜数字:>");
        scanf("%d", &guess);
        if (guess > ret)
            printf("猜大了\n");
        else if (guess < ret)
            printf("猜小了\n");
        else
        {
   
            printf("恭喜你,猜对了!\n");
            break;
        }
    }
}

int main()
{
   
    //打印菜单
    //1. 玩游戏
    //0. 退出游戏
    int input = 0;
    srand((unsigned int)time(NULL)); //要给srand传递一个变化的值,计算机上的时间是时刻变化的
    do                               //time函数可以返回一个时间戳
    {
   
        menu();
        printf("请选择:>");
        scanf("%d", &input);
        switch (input)
        {
   
        case 1:
            game();
            break;
        case 0:
            printf("退出游戏\n");
            break;
        default:
            printf("选择错误,重新选择!\n");
            break;
        }
    } while (input);
    return 0;
}

90967d389e0974c25cd547acc4e337b6.png

6. 总结

到这里,我们的猜数字小游戏的设计就结束了。这里主要还是学习了随机数函数的使用。

希望通过后续学习,不断提高代码能力和分析解决问题的能力。由于本人是大一学生,知识水平有限,本文如果有错误和不足之处,还望各位大佬多多指出并提出建议!

相关文章
|
27天前
|
C语言
C语言实现2048小游戏---粤嵌GE6818嵌入式系统实训
C语言实现2048小游戏---粤嵌GE6818嵌入式系统实训
54 0
|
9天前
|
存储 编译器 C语言
|
20天前
|
程序员 C语言
C语言小游戏之猜数字
C语言小游戏之猜数字
18 5
|
20天前
|
算法 编译器 C语言
猜数字游戏C语言代码实现
猜数字游戏C语言代码实现
|
21天前
|
C语言
C语言小游戏的源代码
C语言小游戏的源代码
|
17天前
|
C语言
C语言实现猜数字游戏:代码详解与函数解析
C语言实现猜数字游戏:代码详解与函数解析
12 0
|
21天前
|
算法 编译器 C语言
【C语言】:详解随机数的生成和猜数字游戏的实现
【C语言】:详解随机数的生成和猜数字游戏的实现
12 0
|
24天前
|
C语言
C语言------猜数字游戏----有次数限制版
C语言------猜数字游戏----有次数限制版
11 0
|
24天前
|
C语言
C语言----猜数字游戏
C语言----猜数字游戏
18 0
|
2月前
|
C语言
C语言实现猜数字游戏
C语言实现猜数字游戏
28 1