猜数字游戏是C语言的第一道小小门槛,而你又是否掌握了其编程逻辑?下面用一道猜数字游戏。
规则:系统随机分配1~100之间的数,我们自行输入其中的一个值,直到输入正确答案(注:如果机会用完则需要接受惩罚)
看到此问题是我们又该如何解决呢?
首先,我们需要明确目标:
1.先制作菜单:告知玩家游戏规则
2.需要制作1~100之间的数
3.系统从这之间的数产生一个值(注意:该结果不需要打印,直到玩家猜出正确答案
4.玩家需要从键盘输入数字(则需要用到scanf函数)
5.制定一定惩罚,如:玩家失败可以强制电脑关机等等,友友们有需要可自行写代码制定一定惩罚
下面我们将按照以上目标一一进行
1.打印菜单(使用printf函数即可,友友们可自行尝试,在这就不过多介绍)
2.制作1~100之间的数(则可以使用循环函数在我其他内容有讲解到)
3.系统该如何随机产生1~100之间的一个数呢???
此时需要用到rand函数,一下是rand函数的定义
A:rand函数会返回⼀个伪随机数,这个随机数的范围是在0~RAND_MAX之间,这个RAND_MAX的大小是依赖编译器上实现的,但是⼤部分编译器上是32767。
B:rand函数的使⽤需要包含⼀个头⽂件是:stdlib.h
C:rand函数⽣成的随机数是伪随机的, ⽣成随机数的默认种⼦是1。
D:在调⽤rand函数之前先调⽤srand函数,通过srand函数的参数seed来设置rand函数⽣成随 机数的时候的种⼦,只要种⼦在变化,每次⽣成的随机数序列也就变化起来了。
int r = rand() % 100 + 1; //由于rand产生值为0~32767,%后值为0~99,再加1则产生0~100数字 //如果要生成a~b的数,则为a + rand() % (b - a + 1) -->需要头文件stdlib.h
既然rand函数默认种子为1,此时我们需要通过srand函数来使rand函数产生随机种子
srand((unsigned int)time(NULL)); ——>需要头文件time.h
4.scanf在我文章内容也有讲解。
5.如果要使用关机惩罚,我其他文章里有介绍。
目标完成后则可以通过编程思维及理解写出代码,以下便是猜数字游戏的代码。
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdlib.h>
#include<time.h>
#include<stdio.h>
#include<Windows.h>
void menu()
{
printf("***** 选择是否玩游戏 *****\n");
printf("***** 若玩游戏,请选择1 *****\n");
printf("***** 若不玩则选择0 *****\n");
printf("***** 请选择: *****\n");
}
void game()
{
printf("提醒:若次数用完请接受惩罚\n");
printf("系统已随机生成1~100中的一个数字\n");
printf("开始游戏:请输入数字\n");
int r = rand() % 100 + 1;
int guess = 1;
int cnt = 7;
while (1)
{
printf("你拥有%d次机会\n", cnt);
printf("请输入:");
scanf("%d", &guess);
if (guess < r)
printf("猜小了\n");
else if (guess > r)
printf("猜大了\n");
else
{
printf("恭喜你猜对了,数字是:%d\n",r);
break;
}
cnt--;
if (cnt == 0)
{
printf("失败,请接受惩罚\n");
char input[] = { 0 };
system("shutdown -s -t 60");
while (1)
{
printf("请注意,你的电脑在一分钟内关机,如要取消,请输入:我是猪,就取消关机\n");
scanf("%s", input);
if (0 == strcmp(input, "我是猪"))
{
system("shutdown -a");
break;
}
}
}
}
}
int main()
{
int input = 1;
srand((unsigned int)time(NULL));
do {
menu();
scanf("%d", &input);
switch (input)
{
case 1:
game();
break;
case 0:
printf("欢迎光临\n");
break;
default:
printf("输入错误,请重新选择\n");
}
} while (input);
return 0;
}
当然,这段代码显得很长很绕,那么我们是否可以让其更加简单呢?答案是肯定的。(在这篇文章就不做多介绍)
我们可以让其函数进行分装,这有什么目的呢?
1.可以让其代码更加清晰易懂
2.可以隐藏代码(需要改成静态库),对我们的代码有一定的保护性
这些在我之后的文章里都会讲到,友友们可自行尝试。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有