最近重新开始学习C语言,必做节目之一就是写一个睿智的猜数字小游戏。
既然是重新学,就要玩点花样:>
最近学到了如何利用控制台shutdown计算机,现在来试试能不能内嵌到猜数字的睿智代码里。
下面先介绍一下必要函数
猜数字小游戏的精华是如何生成随机数。当然,我们知道,既然是由固定代码生成的数字,那肯定不是真的随机数,利用rand函数生成的函数叫伪随机数。
在C Library中查询,我们可以发现,rand函数的返回值是一个psuedo-random integral(伪随机整数),意味着rand函数需要一个seed来驱动它来产生一个伪随机数。现在我们来试试。
在VS 2019中写下如下代码
有趣的事情发生了,Ctrl +F5代码走一波以后
不论何时何地,rand生成的整型数都是42,和我们想象的好像不大一样。
继续阅读c plus plus我们发现,在使用rand函数前,我们需要使用srand将rand初始化。
查询srand
如文章所言,两个相同的seed初始化后,rand会产生相同的值,于是,我们需要想到一个能够不停地产生不同数字的函数,time函数是最好的选择,time函数能够显示时间,而不同时刻时间自然是不同的。
根据函数的定义,写出srand函数,注意,需要有一个类型转换将time的return value从time_t类型转换为unsigned int类型。
现在,我们就掌握了如何生成伪随机数!
😃
那么,如何shutdown我们的计算机呢?
老规矩,菜就要多查,打开c plus plus,搜索system函数
system是stdlib库下的一个函数,可以执行所给命令
常见的有
system(“cls”);
system(“dir”);
等等
如果要执行shutdown
可以执行以下代码
system(“shutdown -s -t 60”);
在命令提示符中输入shutdown -s -t 60后,会出现以下情况
当然,你也可以输入shutdown -a关闭这一命令
同样地,你也可以输入shutdown -p立马执行
秉着提高可玩性的精神,我们可以在猜数字中加入这些元素,学习不同函数的同时增加可玩性,代码呈现如下:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <windows.h>
void menu()
{
printf("********************************\n");
printf("******* 1. play *******\n");
printf("******* 0. exit *******\n");
printf("********************************\n");
}
void game()
{
int n_rand = rand() % 100 + 1, i;
int guess = 0;
int cnt = 0;
while(1)
{
printf("请猜一个1 ~ 100的数字:>\n");
scanf("%d", &guess);
if(guess == n_rand)
{
printf("恭喜你猜对了!\n");
if(cnt >= 5)
{
printf("SYSTEM SHUTDOWN TERMINATED\n");
system("shutdown -a");
}
break;
}
else
{
cnt ++;
if(guess > n_rand)
printf("你猜的数字比答案大,还剩%d次机会\n", 10 - cnt);
else
printf("你猜的数字比答案小,还剩%d次机会\n", 10 - cnt);
}
if(cnt >= 5 && cnt <= 10)
{
system("shutdown -s -t 60");
for(i = 0;i < cnt;i ++)
{
Sleep(500);
printf("SYSTEM SHUTDOWN T-MINUS SIXTY SECONDS\n");
}
}
else if(cnt >= 10)
{
printf("啊哦!你的次数用光了呢!真是难办呢!我走了!拜拜!\n");
system("shutdown -p");
while(1)
{
Sleep(1000);
printf("SYSTEM SHUTDOWN!!!!!!!!!\n");
}
break;
}
}
}
int main()
{
int input = 0;
srand((unsigned int)time(NULL));
do
{
menu();
printf("玩耍请按1 :>,离开请按0 :<\n");
scanf("%d", &input);
switch(input)
{
case 0:
printf("下次再玩叭 :<\n");
break;
case 1:
game();
break;
default:
printf("选错了,再想想\n");
break;
}
}while(input);
return 0;
}
(文章来自博主公众号玉米酥)
就这样,一个猜错让电脑关机的程序就写完了。内容很简单,希望你能看有所获。如有错误,还请谅解。