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