C语言学习成果:小游戏拆炸弹

C语言学习成果:小游戏拆炸弹

描述:范围0~100随机设置了一个炸弹,然后你来猜,运用了生成随机数函数

生成随机函数指令:用到了以下函数:rand();srand();time();

rand():产生随机数

格式: rand ()     

           第二种是产生范围内的随机数: rand ()%范围1——(0~(范围1)-1)

          本质是:      基数    运算符    rand ()  % (范围1 )——(基数~基数  运算符(范围1)-1)注意:范围1可以是表达式

注意:实际上rand生成的是伪随机数,这种随机数是按照规定的算法以设置的“种子”值为基准计算出来的,所以本质上是不随机(按照某种规则生成)的。因为rand默认种子值是1,所以算法计算的结果都是一样的。如果想让每次运行的结果都不同,那么需要让种子值变化起来。

所以rand() 产生随机数时,如果用srand(seed) 播下种子之后,一旦种子相同,产生的随机数将是相同的。当然很多时候刻意让rand() 产生的随机数随机化,用时间作种子 srand(time(NULL)) ,这样每次运行程序的时间肯定是不相同的,产生的随机数肯定就不一样了。

srand()函数

srand函数就能用于设置rand函数的种子值(初始化随机数生成器),它也定义在头文件<stdlib.h>中,其函数原型如下:

#include <stdlib.h>
void srand(unsigned int seed);

所以如果我们让srand函数动起来就能设置rand函数的种子值,从而获得rand()函数的随机值。

那么如何让srand动起来呢?那就是时间,我们可以获取计算机的时间,即当前的时间戳,就可以让srand()函数动起来,我们就用到了time()函数

time(函数)

在程序中我们一般是使用程序运行的时间作为种子,因为时间时刻在发生变化的。

在C语言中有一个函数叫time,就可以获得这个时间,time函数原型如下:

time_t time (time_t* timer);

time函数会返回当前的日历时间,其实返回的是1970年1月1日0时0分0秒到现在程序运行时间之间的差值,单位是秒。返回的类型是time_t类型的,time_t类型本质上其实就是32位或者64位的整型类型。

time函数的参数timer如果是非NULL的指针的话,函数也会将这个返回的差值放在timer指向的内存中带回去。

如果timer是NULL,就只返回这个时间的差值。time函数返回的这个时间差也被叫做:时间戳。

  time函数能获得当前的时间戳,时间戳就是当前的时间与计算机的初始时间1970年1月1日0时0分0秒之间的差值,以秒为单位。它定义在<time.h>头文件中,其函数原型如下:

time_t time(time_t *timer);

程序

如此我们就可以写程序了:

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

int randomnumber(int num1, int num2)
{
    int num3;
    srand(time(0));
    return (num2+rand()%num1);
}

void main()
{

    int a, b = 1, num, i, fanwei1, chaofeng, fanwei2, cishu = 0;
    while (b)
    {
        printf("请设置数字炸弹:(1~100)\n输入666游戏结束\n输入1游戏开始:");

        scanf("%d", &a);
        if (a == 1)
        {
            printf("游戏开始!");
            printf("目前范围1——100   ********* 请输入你认为的炸弹的数字:");
            while (1)
            {

                scanf("%d", &num);
                if (num < 1 && num > 100)
                    printf("\n您输入的有误请重新输入:");
                else
                    break;
            }

            i = randomnumber(100, 0);
              fanwei1 = randomnumber(20, 0);

              fanwei2 = randomnumber(20, 0);

            while (1)
            {


                if (num != i && num > i)
                {
                    printf("\n大了老弟!!目前范围%d——%d:", i - fanwei1, i + fanwei2);
                    cishu++;
                }
                else if (num != i && num < i)
                {
                    printf("\n小了呦!!目前范围%d——%d:", i - fanwei1, i + fanwei2);
                    cishu++;
                }
                else
                {
                    printf("\n真不容易你猜对了:%d,用了%d次才猜对,继续努力哈", i, cishu);
                    cishu =0;
                    break;
                }
                if (cishu == 1)
                    printf("不行呀,第一次没猜对,继续?:");

                scanf("%d", &num);
                randomnumber(0, 20);

                switch (randomnumber(0, 20))
                {
                case 1:
                    printf("别怕,菜鸟,再来一局!\n");
                    break;
                case 2:
                    printf("如果你认输我也理解\n");
                    break;
                case 3:
                    printf("真不容易,你可以不玩的\n");
                    break;
                case 4:
                    printf("你别辖输入呀。不行别玩了\n");
                    break;
                case 5:
                    printf("菜就多练\n");
                    break;
                case 6:
                    printf("拆不了就跑吧\n");
                    break;
                case 7:
                    printf("加油,炸弹快要炸了\n");
                    break;
                case 8:
                    printf("我用脚也能猜出来\n");
                    break;
                case 9:
                    printf("别完了,点了吧\n");
                    break;
                case 10:
                    printf("行不行呀\n");
                    break;
                case 11:
                    printf("一共就一个炸弹稀碎\n");
                    break;
                case 12:
                    printf("拆蛋啊大佬,你这是在阅兵啊?\n");
                    break;
                case 13:
                    printf("你信佛吗?为什么不拆\n");
                    break;
                case 14:
                    printf("回家吧,别被炸弹炸死了\n");
                    break;
                case 15:
                    printf("你的操作像刚上手的玩家,我都替你着急。\n");
                    break;
                case 16:
                    printf("投降吧,你猜不出来的。\n");
                    break;
                case 17:
                    printf("你是来搞笑的吗?\n");
                    break;
                case 18:
                    printf("你的操作让我怀疑\n");
                    break;
                case 19:
                    printf("你的实力能打赢人机吗?\n");
                    break;
                case 20:
                    printf("你玩游戏的技术,真是比老太太扔飞镖还差劲!\n");
                    break;
                }
            }
        }

        else if (a == 666)
        {
            break;
        }
    }
}

    运行结果:


参考链接:https://blog.youkuaiyun.com/xieliru/article/details/137694212

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值