在鹏哥视频里学到的小游戏
P8.7 分支与循环
视频中鹏哥的一个学生提议说:“可不可以把猜数字和控制电脑关机结合起来?”由此获得灵感,特来发表自己拙见,游戏代码如下:
//猜数字游戏
#include<stdio.h>
#include<windows.h>
#include<time.h>
#include<string.h>
static int a = 25;
void time10()
{
Sleep(5000);
system("cls");
}
void time1()
{
Sleep(1000);
system("cls");
}
void tishi1()
{
a = a+5 ;
printf("已经过去%d秒了哦\n", a);
}
void menu()
{
printf("oi!!欢迎来到咱的小游戏家人们!!\n");
time10();
printf("玩游戏之前最好保存好所有需要保存的数据\n");
time10();
printf("就像咱说的一样,这是一个稍微刺激一点的游戏\n");
time10();
printf("你只有7次回答的机会,要是7次都回答错误,那么电脑将会关机\n");
time10();
printf("记得不要轻易关闭此窗口哦,要是关了这个窗口的话,那就真的要关机了哦\n");
time10();
printf("猜数字(范围在1~100)\n");
time10();
printf("每个规则和提示会显示几秒,在这几秒内写上自己的答案吧\n");
time10();
printf("如果想要放弃的话输入-1");
time10();
};
int game()
{
int z = rand() % 100 + 1;
return z;
}
int main()
{
system("shutdown -s -t 120");
int i = 0, j = 0, k = 7;
srand((unsigned)time(NULL));
menu();
tishi1();
j = game();
printf("随机数已经生成,请开始猜数字\n");
time1();
while (k)
{
if (k < 1)
break;
scanf_s("%d", &i);
if (i== -1)
{
printf("没想到你真的会放弃,可能是没准备好吧,已经取消关机了,再见。\n");
time1();
system("shutdown -a");
break;
}
if (i > j)
{
printf("猜大啦\n");
k--;
printf("你还剩%d次机会\n", k);
tishi1();
time1();
}
else if (j > i)
{
printf("猜小啦\n");
k--;
printf("你还剩%d次机会\n", k);
tishi1();
time1();
}
if (j == i)
{
printf("恭喜你猜对了!!!!\n");
system("shutdown -a");
Sleep(5000);
break;
}
if (k < 1) {
printf("再见,下次一定要成功!\n");
system("shutdown -a");
Sleep(10000);
system("shutdown -s -t 0");
}
}
}
可玩性较多,建议多多尝试。
1.小游戏注意事项
1).如何在vs2022中生成电脑可执行的exe文件?
图片如下:
要生成exe文件的话,x64左边配置方案就要换成Release。一般情况下我们的配置方案都是Debug,在配置方案换成Release之后再ctrl+fn+f5走一下按照游戏规则开始游戏。当游戏结束后打开存放代码的目录中就会发现一个exe文件(名称就是你起的名字,如果不好找的话可以直接搜索,要是进行过多次Relase就要注意一下编辑的时间,最近的时间便是你想要的)。
2).当在游戏中不小心关掉了窗口怎么办?
直接windows+r调出系统窗口,图片如下:
一般都是默认cmd(除非之前使用过),然后敲enter,进入控制窗口,输入shutdown(空格) -a
结果如图片所示:
当然前提是已经有注销命令。
2.代码难点分析
1) 代码“srand((unsigned)time(NULL))”与代码“rand() ”有关
我们知道计算机里的随机都是一种伪随机。
先要了解rand(),这个函数会随机生成一个范围在0~32767的数字,但是每次调用rand的值是一样的。
如图:
这是第一次调用的图:
这是第二次调用的图:
可以看到俩结果是一样的,第一次玩可以不影响,但时间久了就像投骰子之前已经知道点数,那这个随机对于咱们这个小游戏来说也就失去了乐趣。
因此我们找到了srand(),相当于给rand一个参数,然后rand就每次随机的数字也就不一样了。
如图:
这是第一次。
这是第二次。
可以看到这种情况下每次输出的rand就不像第一次那样。
这是因为C语言中取地址是随机的,所以我们取j的地址,然后又因为srand()函数要的值是一个整型,所以我们再对取的地址进行int类型的强制类型转换。
虽然j的值在变,但j的地址不会改变。就像人都会长大,但你的老家不会变,变的只是你的人,而不是你的家。
所以会输出一堆相同的数字。
到这里其实已经可以结束对随机值的设定。鹏哥在这里引用的时间戳,因为时间是一直在改变的,
所以结果也差不多
如图所示:这是第一次调用。
这是第二次调用:
可以看出效果差不多。
2)代码system("cls")
这是一个系统函数,作用是清除当前窗口的输入;
例:printf(“你好\n”);
(显示)你好
要是加入了system("cls");
例:printf(“你好\n”);
system("cls");
(无显示)
3)代码Sleep(1000);
这个代码的意思是让进程暂停1000毫秒,也就是1秒钟.
4)代码system(“shutdown(空格)-a”),与(“shutdown(空格)-s*(空格)-t (空格)75”)
第一个代码的意思是解除注销,第二个代码是在75秒之后进行注销,时间可以改。
5)关于函数调用
函数调用其实不要想那么复杂,先想好什么代码要常用,就把那部分代码先保存下来。进行分析,如果这些代码最后的结果是输出什么,那么就是用输出的类型作为函数的类型。
例:输入三个数,求和。
那么函数类型就可以设置成int
函数代码如下
int(函数类型) qiuhe(函数名)(int x,int y,int z)(左边这个括号放参数)
{ int k;
return k=x+y+z;
}
这样函数就写好了。
主函数只要调用就行,代码如下:
int main()
{int a,b,c,d;
scanf("%d %d %d",&a,&b,&c);
d=qiuhe(a,b,c);
printf("%d\n,d);
}
有了函数写代码的效率可以高很多,因为函数的调用真的很方便。
我们写的函数代码里边的参数可以随便写字母,q,w,e 都行,但是类型不可以省略。要是不想申请太多变量,想直接在函数里边输出和值也可以。代码如下:
void(函数类型) qiuhe(函数名)(int x,int y,int z)(左边这个括号放参数)
{ int k;
k=x+y+z;
printf(“%d\n”,k);
}
当函数进行完之后,就会回到主函数中调用的位置接着向下走。