本文通过之前所学的C语言基础知识来设计一个简单的C语言猜数字小游戏,代码中包含分支语句、循环语句、函数等基础知识。
1. 猜数字游戏功能介绍
1.电脑会随机生成一个1-100的数字。
2.玩家用户开始猜数字。
a> 猜大了,提醒猜大了,继续猜。
b> 猜小了,提醒猜小了,继续猜。
c> 猜对了,恭喜猜对了,结束游戏。
3.玩了一局如果想再玩一局可以继续玩,不用退出程序。
2. 猜数字之菜单
通过设计一个简易的菜单函数,来提醒玩家选择开始游戏还是结束游戏,选择 1 表示开始游戏,选择 0 表示结束游戏。
void menu() {
printf("**********************\n");
printf("******* 1.play *******\n");
printf("******* 0.exit *******\n");
printf("**********************\n");
}
3. 猜数字之主函数(main)
int main() {
int a = 0; // 1 0
srand((unsigned int)time(NULL));
do {
menu();
printf("请输入1/0:\n");
scanf("%d", &a);
switch (a) {
case 1:
game();
break;
case 0:
printf("游戏结束退出\n");
break;
default:
printf("输入错误,请重新输入\n");
break;
}
} while (a);
return 0;
}
要使结束一把游戏可以继续玩而无需退出程序,所以我们需要用到循环语句,而第一局无论玩与否都需要给玩家显示出菜单进行提示,故使用do...while()循环语句效果最佳。
我们选择1表示开始游戏,选择0表示结束游戏,而选择其他则默认输入错误,故而有多种选择,即是一种多分支语句,这里我们选择switch分支语句。
4. 猜数字之game函数
void game() {
int random_num = rand() % 100 + 1;
int input = 0;
while (1) {
printf("请输入你猜的数字:\n");
scanf("%d", &input);
if (input > random_num) {
printf("猜大了,请重新猜\n");
}
else if (input < random_num) {
printf("猜小了,请重新猜\n");
}
else {
printf("恭喜您猜对了\n");
Sleep(2000);
system("cls");
printf("上一把的数字为:%d\n", random_num);
break;
}
}
}
game函数是用来完成游戏的主要功能,即功能介绍中的1、2点。
1. 电脑随机生成一个数字 —— 我们只需要调用rand()函数即可。
2.玩家用户开始猜数字 —— 定义一个input变量来表示玩家猜的数字,而没猜对需要继续猜,故这里也需要用到一个循环语句。玩家猜的数字需要与电脑产生的随机数字进行比较,有猜大、猜小、猜对三种选择情况,要进行判断比较所以这里选择if的多分支语句而不是switch语句。
到此猜数字小游戏的所有功能就实现了,下面来讲解上述代码中用到的拓展知识
5. 涉及的拓展知识
5.1 rand()函数
rand()函数可以生成随机数,随机数的范围是0-32767之间,使用rand()函数需要包含头文件stdlib.h (注:cstdlib是C++中的头文件)。我们在调用rand时必须先调用srand 函数,否则每次运行程序的随机数是一样的。
rand()%100是让电脑产生的随机数除以100取余,使得产生的随机数在0-99之间,而rand()%100+1则使随机数的范围在1-100之间,最终达到猜数字小游戏的需求。
5.2 srand()函数
srand()函数是一个初始化随机数的生成器,即对于调用srand中使用的每个不同值,伪随机数生成器可以预期在后续调用rand()函数中生成不同的连续结果。srand()函数在整个程序中只需要调用一次即可。
为了生成类似随机数的数字,要给srand传递一个变化的值。而恰好计算机上时间是时刻变化着的,所以我们给srand函数赋一个time函数 —— time函数可以返回一个时间戳。
srand((unsigned int)time(NULL));
5.3 Sleep函数
Sleep函数的功能类似于暂停,即让程序等待一定时间(单位:毫秒)再继续执行后续代码,Sleep(2000)即让程序等待2秒。
6. 完整代码
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<windows.h>
// 菜单
void menu() {
printf("**********************\n");
printf("******* 1.play *******\n");
printf("******* 0.exit *******\n");
printf("**********************\n");
}
void game() {
int random_num = rand() % 100 + 1;
int input = 0;
while (1) {
printf("请输入你猜的数字:\n");
scanf("%d", &input);
if (input > random_num) {
printf("猜大了,请重新猜\n");
}
else if (input < random_num) {
printf("猜小了,请重新猜\n");
}
else {
printf("恭喜您猜对了\n");
Sleep(2000);
system("cls");
printf("上一把的数字为:%d\n", random_num);
break;
}
}
}
int main() {
int a = 0; // 1 0
srand((unsigned int)time(NULL));
do {
menu();
printf("请输入1/0:\n");
scanf("%d", &a);
switch (a) {
case 1:
game();
break;
case 0:
printf("游戏结束退出\n");
break;
default:
printf("输入错误,请重新输入\n");
break;
}
} while (a);
return 0;
}
程序运行效果如下图: