【C语言】-猜数游戏-简单版

    • 🍑游戏内容概述

玩家需要在1-100之间猜一个数,每猜一次程序就会提示一次是猜大了或猜小了,直至猜中为止

    • 🍎各板块描述

(1)简单主界面

玩家需通过输入1或0来选择是否进行游戏,通过简单的输出函数printf即可实现主界面的打印

代码如下:

void menu()
{
    printf("************\n");
    printf("*  1.Play  *\n");
    printf("*  0.Exit  *\n");
    printf("************\n");
    printf("intput to choose:\n");
}

(2)游戏实现

游戏的实现可分为两部分,随机数的生成与猜数环节

  • 随机数的生成:

这里需要借助三个函数来实现,分别是:

rand()——生成的随机数,头文件为<stdlib.h>

srand()——随机数的生成器,需和rand()函数配套使用,头文件为<stdlib.h>

time()——时间戳函数,需要一个不断变化的数来作为生成随机数的来源,头文件为<windows.h>

代码如下:

    srand((unsigned int)time(NULL));
    int random_num = rand() % 100 + 1;

其中函数用法简单解释:

对srand():

由其定义可看出其返回值为空,其参数为unsigne int型(seed可以理解为随机数的来源),故在调用该函数时需要给它传一个unsigne int型的值

对time():

首先,其中的返回与参数类型time_t通过编译器(VS2022)的转到定义查看可知其本质上是int型:

故当我们将其作为srand函数的参数时需对其进行强制类型转化为unsigned int型

其次,time函数的参数为指针变量,但其实我们不需要传具体的参数,故直接传一个空指针NULL

对rand():

可以看出,我们需先在rand()之前使用srand()来生成随机数,随机数生成完毕后rand()返回的就是生成的随机数,故可直接用它进行赋值,整合起来也就有了上面那两行代码

(PS:以上关于函数的声明、定义及使用方法等均来自MSDN)

  • 猜数环节:

循环输入猜的数,和随机数进行对比,直至猜中跳出循环

代码如下:

    int guess_num = 0;
    while (1)
    {
        scanf("%d", &guess_num);
        if (guess_num < random_num)
            printf("Bigger\n");
        else if (guess_num > random_num)
            printf("Smaller\n");
        else if (guess_num == random_num)
        {
            printf("Bingo!\n");
            break;
        }
    }
  • 整合起来放到一个game()函数中:

代码如下:

void game()
{
    srand((unsigned int)time(NULL));
    int random_num = rand() % 100 + 1;
    //随机生成1-100之间的数

    printf("Start Guessing!\n");
    int guess_num = 0;
    while (1)
    {
        scanf("%d", &guess_num);
        if (guess_num < random_num)
            printf("Bigger\n");
        else if (guess_num > random_num)
            printf("Smaller\n");
        else if (guess_num == random_num)
        {
            printf("Bingo!\n");
            break;
        }
    }
}

(3)逻辑连接

在前两步的基础上进行主函数的编写:我们需要先打印一次菜单,随后进行选择是否进行游戏,故选择采用do while的循环语句。在循环中,若输入1则执行(2)中实现的game()函数;若输入0则退出循环,结束游戏(程序);若输入了其他数,则提示输入非法并重新输入

代码如下:

    int input = 0;
    do
    {
        menu();
        scanf("%d", &input);
        switch (input)
        {
        case 1:
            game();
        case 0:
            break;
        default:
            printf("Input error! Please input again\n");
        }
    } while (input);
    
    • 🍅完整代码

完整的代码如下:

#include<stdio.h>
#include<windows.h>
#include<stdlib.h>
//功能描述:
//1.    输入1和0选择是否进行游戏
//2.    生成随机数
//3.    每次猜数后给予相应反馈——猜大、猜小、猜中

//打印菜单
void menu()
{
    printf("************\n");
    printf("*  1.Play  *\n");
    printf("*  0.Exit  *\n");
    printf("************\n");
    printf("intput to choose:\n");
}
//游戏实现
void game()
{
    srand((unsigned int)time(NULL));
    int random_num = rand() % 100 + 1;
    //随机生成1-100之间的数

    printf("Start Guessing!\n");
    int guess_num = 0;
    while (1)
    {
        scanf("%d", &guess_num);
        if (guess_num < random_num)
            printf("Bigger\n");
        else if (guess_num > random_num)
            printf("Smaller\n");
        else if (guess_num == random_num)
        {
            printf("Bingo!\n");
            break;
        }
    }
}
int main()
{
    int input = 0;
    do
    {
        menu();
        scanf("%d", &input);
        switch (input)
        {
        case 1:
            game();
        case 0:
            break;
        default:
            printf("Input error! Please input again\n");
        }
    } while (input);
    
    return 0;
}

运行结果:

    • 🥦趣味拓展

在上述的基础上还可以创建一个变量来限定猜的次数,若在指定的次数内没猜对则可执行一些“惩罚”,比如关机什么的😂,大家还有什么好玩的建议可以留个评论呀~😁

看完觉得有觉得帮助的话不妨点赞收藏鼓励一下,有疑问或看不懂的地方或有可优化的部分还恳请朋友们留个评论,多多指点,谢谢朋友们!🌹🌹🌹

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值