猜数字游戏

猜数字游戏实现

1.程序会生成一个1~100之间的随机数

2.猜数字

1)猜小了,程序会告诉你猜小了。继续猜

2)猜大了,程序会告诉你猜大了。继续猜

3)猜对了,程序会告诉你:恭喜你猜对了。结束

3.游戏可以反复

第一步先写一个函数menu,打印菜单,用do.....while循环来实现

#include <stdio.h>

void menu()
{
    printf("*********************");
    printf("****** 1. play*******");
    printf("****** 0. exit*******");
    printf("*********************");
}
int main()
{
    do
    {
        //打印菜单
        menu();
    } while();
    return 0;
}

接下来写猜数字游戏实现的完整逻辑

#include <stdio.h>

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

此时代码运行起来

接下来要写猜数字部分:

写一个函数game来实现猜数字,在game函数内部分为两部分(生成随机数和猜数字),在第一部中,生成随机数用rand函数来实现,rand函数是专门用来生成随机数的,它返回的是0~RAND_MAX(32767)之间的一个随机数

#include <stdio.h>

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


void game()
{
    //1.生成随机数
    int ret = rand();
    printf("%d\n",ret);
    //2.猜数字
}
int main()
{   int input = 0;
    do
    {
        //打印菜单
        menu();
        printf("请选择:>");
        scanf("%d",&input);
        switch(input)
        {
        case 1:
            game();//game函数中是猜数字的整个逻辑
            break;
        case 0:
            printf("退出游戏\n");
            break;
        default:
            printf("选择错误,重新选择\n");
            break;
        }
    } while(input);
    return 0;
}

此时代码运行起来会发现每一次的数字都是一样的,并不是随机数字

这是因为rand函数在使用之前要使用一个srand函数来设置随机数的生成器,srand函数需要一个头文件 #include <stdlib.h>

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

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


void game()
{
    srand(0);
    
    //1.生成随机数
    int ret = rand();
    printf("%d\n",ret);
    //2.猜数字
}
int main()
{   int input = 0;
    do
    {
        //打印菜单
        menu();
        printf("请选择:>");
        scanf("%d",&input);
        switch(input)
        {
        case 1:
            game();//game函数中是猜数字的整个逻辑
            break;
        case 0:
            printf("退出游戏\n");
            break;
        default:
            printf("选择错误,重新选择\n");
            break;
        }
    } while(input);
    return 0;
}

此时再次运行会发现每一次的数字都一样【将srand(),()内的数字改为1等其他数字,结果也一样】

这时候要引入一个概念,时间戳,时间戳是从1970年1月1日(UTC/GMT的午夜)所经过的秒数

(时间戳=现在的时间 - 19701.1),而在C语言中,time函数会返回时间戳,time函数的参数类型是一个指针,此时我们不需要,可以将它的参数设置为空指针(NULL),这样就能生成每一次都不一样的随机数,并且time函数需要引入一个头文件 #include <time.h>

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

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


void game()
{
    srand((unsigned int)time(NULL));
    
    //1.生成随机数
    int ret = rand();
    printf("%d\n",ret);
    //2.猜数字
}
int main()
{   int input = 0;
    do
    {
        //打印菜单
        menu();
        printf("请选择:>");
        scanf("%d",&input);
        switch(input)
        {
        case 1:
            game();//game函数中是猜数字的整个逻辑
            break;
        case 0:
            printf("退出游戏\n");
            break;
        default:
            printf("选择错误,重新选择\n");
            break;
        }
    } while(input);
    return 0;
}

此时让代码运行起来,会发现随机数非常相近,如果动作稍微快一点的话,前后几次的随机数可能会相同

原因:srand函数在程序中只要调用一次就可以了,不需要频繁调用,所以应该将srand函数放在主函数中去使用

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

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


void game()
{
    
    //1.生成随机数
    int ret = rand();
    printf("%d\n",ret);
    //2.猜数字
}

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

    do
    {
        //打印菜单
        menu();
        printf("请选择:>");
        scanf("%d",&input);
        switch(input)
        {
        case 1:
            game();//game函数中是猜数字的整个逻辑
            break;
        case 0:
            printf("退出游戏\n");
            break;
        default:
            printf("选择错误,重新选择\n");
            break;
        }
    } while(input);
    return 0;
}

此时打印出来的就是真正的一串随机数

我们条件要求的是生成1~100的随机数,而任何数%100的结果都在0~99之间,所以

%100+1就变成在1~100之间

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

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


void game()
{
    
    //1.生成随机数
    int ret = rand() % 100 + 1;
    printf("%d\n",ret);
    //2.猜数字
}

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

    do
    {
        //打印菜单
        menu();
        printf("请选择:>");
        scanf("%d",&input);
        switch(input)
        {
        case 1:
            game();//game函数中是猜数字的整个逻辑
            break;
        case 0:
            printf("退出游戏\n");
            break;
        default:
            printf("选择错误,重新选择\n");
            break;
        }
    } while(input);
    return 0;
}

接下来要最后完成的二部分,猜数字

以下是最终代码:

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

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


void game()
{
    int num = 0;
    //1.生成随机数
    int ret = rand() % 100 + 1;
    //printf("%d\n",ret);进行猜数字部分需将此步注释掉
    //2.猜数字
    
    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("请选择:>");
        scanf("%d",&input);
        switch(input)
        {
        case 1:
            game();//game函数中是猜数字的整个逻辑
            break;
        case 0:
            printf("退出游戏\n");
            break;
        default:
            printf("选择错误,重新选择\n");
            break;
        }
    } while(input);
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值