前言
Hello,大家好!我是Summer歆,今天给大家分享的是用C语言编写带有整蛊趣味的猜数字游戏,在猜错4次后需要输入指令否则电脑自动关机。
让我带大家刨析一下游戏的组成:进入游戏后,程序会自动生成一个1-100之间的随机数,我们可以猜猜这个数字是多少。如果猜错了,程序会提示我们是猜大了还是猜小了。我们一共有4次机会,只要在4次内猜对我们就通过了游戏。如果4次机会耗完还没猜对就游戏失败,进入惩罚阶段:需要输入一段指令,否则电脑在一分钟内自动关机。接下来让我们看看游戏的设计过程以及最终的成品吧。
一. 如何生成一个随机数
我们要想编写猜数字的游戏,首先要生成一个随机数供玩家猜测。那么我们要怎样才能实现一个随机数的生成呢?
1.rand函数
#include<stdlib.h>
int rand(viod);
rand函数是C语言提供给我们能够生成随机数的函数,但它生成的是伪随机数,它的使用需要包含头文件stdlib.h。那么什么是伪随机数呢?我们运行两次rand函数就会发现生成的随机数是相同的。
那是因为伪随机数并不是真正的随机数,它是对一个叫“种子”的基准值进行运算生成的随机值。而这个种子是不变的,默认值为1。也就是说我们每次使用rand函数生成的随机值是不变的。
这样说不好理解,那我们打个比方:假设我们需要的随机数为y,随机数y的生成是基于一种运算完成的,假设这种运算为y=3x,x就是我们上面提到的种子,它的默认值为1,所以不管我们运算多少次得到的随机数y都是3,是不变的,也就配不上我们随机数这个名,只能退而求其次叫伪随机数。想让这个伪随机数变起来其实也很简单,我们只需要让“种子”改变就行了。当然,这里我们只是把这种运算简化了,真正的运算肯定比这复杂得多。
问题到这里也就很明朗了:我们需要一个随机数,但生成的是伪随机数,达不到我们我们的要求,而改变“种子”的值我们就能得到一个真正的随机数。所有我们需要思考的是如何改变“种子”的值。
2.srand函数
void srand(种子)
srand函数中的参数就是我们需要改变的种子,我们只要改变srand函数中的参数并在使用rand函数前调用srand函数就可以实现随机数的生成。
随机数的生成是实现了,但是像这样每次手动输入并改变“种子”的值比较麻烦,如果我们能够让“种子”的值自动改变那就实现了真正意义上的随机数的生成。那么怎么让“种子”自动改变呢?
3.time函数
#include<time.h>
time_t time(time_t* timer)
如果我们能找到一个自动改变的数并赋值给“种子”,那么这个问题就迎刃而解了。那么什么是在一直自动改变的呢?——答案是时间。
time函数就可以获取时间,并以当前的时间与1970年1月1日0分0秒这个时间点做差,单位为秒,得到的数也叫时间戳。返回的类型为time_t类型,本质上是型。time函数的参数timer如果是非NULL的指针,函数也会将这个返回的差值放在timer指向的内存中带回去;如果是NULL型,就只会返回这个时间的差值,我们也就得到了自动改变的“种子”。接下来实现代码:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
srand((unsigned)time(NULL));
printf("%d",rand());
return 0;
}
至此,我们实现了生成一个随机数,但这个随机数还不符合我们的要求,我们要的是1-100内的随机数,那我们该怎么做呢?---取模,如果我们把得到的随机数用100取膜就得到了0-99之间的随机数,在此基础上加1就得到了1-100之间的随机数。代码如下(运行图我就不展示了):
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
srand((unsigned)time(NULL));
int random_num=rand()%100+1;
printf("%d",random_num);
return 0;
}
二. 如何让电脑自动关机
在游戏失败后,我们就让电脑自动关机,但我们只是整蛊,并不是给整不活,还是得留点回旋的余地。我们可以设置让玩家在一分钟内完成特殊指令(这个可以自己DIY),比如输入我是那啥。否则就自动关机。那它是怎么实现的呢?
1.shutdown命令
在电脑菜单中有搜索cmd,会出现一个命令提示符,我们点开后输入shutdown命令,再输入(空格)+(-s),表示关机;接着输入(空格)+(-t)表示设置关机时间;最后输入(空格)+(60),表示在60秒后关机。想要取消关机的话可以输入shutdown -a。这些都是计算机中的指令,我们该怎么运用到C语言中来呢。
2.system库函数
system是包含在#include<stdlib.h>头文件中的库函数,可以用来执行系统命令,在了解到这些后我们就柳暗花明了。
#include<stdio.h>
#include<stdlib.h>
int main
{
printf("电脑将在60秒后关机");
system("shutdown -s -t 60");\\关机指令
printf("电脑取消关机");
system("shutdown -a");\\取消关机指令
return 0;
}
三. 功能组装
1.游戏菜单+生成随机数
打开程序后玩家可以选择是否游戏。
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
int input = 0;
srand((unsigned)time(NULL));
do
{
printf("******************");
printf("***** 1.play *****");
printf("***** 2.exit *****");
printf("******************");
printf("请选择:");
scanf("%d", &input);
switch (input)
{
case 1:
game();//游戏主体,封装成函数。
break;
case 2:
printf("退出游戏");
break;
default:
printf("输入错误,请重新输入");
break;
}
}
while(input)
return 0;
}
2.猜数字
玩家输入一个数字,与生成的随机数比对,如果错了提示猜大了还是猜小了,一共给玩家4次机会,只要在4次内猜对就通过了游戏。并封装在game()函数内。
void game();
{
int randow_num = rand() % 100 + 1;
int guess = 0;
int i = 4;
while (i)
{
if (guess > randow_num)
{
printf("猜大了\n");
}
else if (guess < randow_num)
{
printf("猜小了\n");
}
else
{
printf("恭喜你猜对了!");
break;
}
i--;
if (i = 0)
{
punishment();//惩罚程序,封装成函数。
}
}
}
3.自动关机
上文中已经介绍了如何让电脑自动关机,代码如下:
void punishment()
{
char get[20] = { 0 };
system("shutdown -s -t 60");
printf("请注意:您的电脑将在60秒内关机,如果输入:我是小丑,就取消关机");
again:
scanf("%s", get);
if (strcmp(get, "我是小丑") == 0)//判断两个字符串内容是否相等
{
system("shutdown -a");
}
else
{
printf("输入错误,请重新输入");
goto again;
}
}
四. 成品展示
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<string.h>
void punishment()
{
char get[20] = { 0 };
system("shutdown -s -t 60");
printf("请注意:您的电脑将在60秒内关机,如果输入:我是小丑,就取消关机\n");
again:
scanf("%s", get);
if (strcmp(get, "我是小丑") == 0)
{
system("shutdown -a");
}
else
{
printf("输入错误,请重新输入\n");
goto again;
}
}
void game()
{
int randow_num = rand() % 100 + 1;
int guess = 0;
int i = 4;
while (i)
{
printf("还剩下%d次机会\n", i);
scanf("%d",&guess);
if (guess > randow_num)
{
printf("猜大了\n");
}
else if (guess < randow_num)
{
printf("猜小了\n");
}
else
{
printf("恭喜你猜对了!\n");
break;
}
i--;
if (i == 0)
{
printf("游戏失败,请接受惩罚\n");
punishment();
}
}
}
int main()
{
srand((unsigned)time(NULL));
int input = 0;
do
{
printf("******************\n");
printf("***** 1.play *****\n");
printf("***** 2.exit *****\n");
printf("******************\n");
printf("请选择:");
scanf("%d", &input);
switch (input)
{
case 1:
game();
break;
case 2:
printf("退出游戏");
break;
default:
printf("输入错误,请重新输入");
break;
}
} while (input);
return 0;
}
到这也就结束了今天的分享,快复制代码去整蛊你的小伙伴吧!我是Summer歆,期待每位读者的关注!