游戏大概:
这段代码实现了一个简单的猜数字游戏功能。程序运行后,会先显示一个菜单供用户选择是开始游戏(输入 1 )还是退出游戏(输入 0 )。当选择开始游戏时,电脑会生成一个在 1 到 100 之间的随机数,然后用户通过不断输入猜测的数字,程序会提示猜大了还是猜小了,直到猜对为止。
设置菜单menu():
void menu(){
printf("********************************\n");
printf("*******1.play 0.exit********\n");
printf("********************************\n");
}
这个函数的作用是在控制台输出游戏的菜单界面,清晰地展示给用户两个选项,即选择 1 开始游戏,选择 0 退出游戏,通过格式化的文本输出,让界面更加直观。
注:这里期望当用户输入 0 时结束循环(退出游戏),但如果在代码执行过程中,由于某些原因使得 后续input 的值没有机会被正确更新为 0 或者被修改为一个能使循环条件为假的值,那么循环就会一直持续下去,从而出现死循环的情况。
如果没有用0定义退出,则在后续main函数部分,可能因为循环没有识别到能够令自己停下来的值,从而一直循环,不能起到退出游戏的效果。(C语言中,0表示假,一切非零是真)
设置游戏game():
void game(){
//1.生成随机数
int ret = 0;
int guess = 0;
ret = rand() % 100 + 1;//专门生成随机数的函数
// printf("%d\n", ret);
//2.猜数字
while(1){
printf("猜数字:");
scanf("%d", &guess);
if(guess > ret){
printf("猜大了,再猜一次!\n");
}else if(guess < ret){
printf("猜小了,再猜一次!\n");
}else{
printf("恭喜你,猜对了。\n");
break;
}
}
}
- 生成随机数部分:
- 首先定义了两个整型变量
ret和guess,ret用于存储电脑生成的随机数,guess用于后续接收用户猜测的数字。 - 通过
rand() % 100 + 1这个表达式来生成随机数。rand函数会返回一个范围在0到RAND_MAX(通常是32767)之间的伪随机整数,对其取模100后得到的结果范围是0到99,再加上1就可以得到一个在1到100之间的随机数,并将这个随机数赋值给ret。
- 首先定义了两个整型变量
- 猜数字部分:
- 使用
while(1)构建了一个无限循环,意味着只要没有猜对数字,循环就会一直执行下去,让用户可以持续进行猜测。 - 在循环内部,首先通过
printf和scanf提示用户输入猜测的数字,并将用户输入的数字存储到guess变量中。 - 接着通过
if - else if - else语句来判断用户猜测的数字和电脑生成的随机数ret的大小关系:- 如果
guess大于ret,就输出提示信息告知用户猜大了,让用户再猜一次。 - 如果
guess小于ret,则输出提示信息告知用户猜小了,同样让用户继续猜测。 - 当
guess等于ret时,说明用户猜对了,输出恭喜信息并通过break语句跳出循环,结束当前轮次的游戏。
- 如果
- 使用
main函数部分:
int main(){
srand((unsigned int) time(NULL));
//时间戳
//拿时间戳来设置随机数的生成起点
// time_t time(time_t *timer)
int input = 0;
do{
menu();
printf("请选择>:");
scanf("%d", &input);
switch(input){
case 1:
game();
break;
case 0:
printf("退出游戏。\n");
break;
default:
printf("输入错误,请重新输入。\n");
}
}while(input);
return 0;
}
- 设置随机数种子部分:
- 在
main函数开头,首先调用srand((unsigned int) time(NULL)),time(NULL)函数会获取从 1970 年 1 月 1 日 0 时 0 分 0 秒到当前时刻的秒数(时间戳),将这个时间戳转换为unsigned int类型后作为参数传递给srand函数,以此来设置随机数生成的种子。这样做的目的是使得每次运行程序时,由于时间戳不同,rand函数生成的随机数序列也就不同,增加游戏的随机性。
- 在
- 游戏流程控制部分:
- 定义了一个整型变量
input,用于接收用户在菜单中选择的操作(1表示开始游戏,0表示退出游戏等)。 - 通过
do - while循环来实现整个游戏的流程控制,使得游戏可以反复执行以下操作,直到用户选择退出(即input为0):- 首先调用
menu函数,输出游戏的菜单界面,展示操作选项给用户。 - 接着提示用户输入选择,并通过
scanf函数获取用户输入的数字存储到input变量中。 - 使用
switch语句根据input的值来执行不同的操作:- 当
input为1时,调用game函数,进入猜数字的游戏环节。 - 当
input为0时,输出提示信息告知用户退出游戏,然后while条件判断为假,结束do - while循环,进而结束整个程序。 - 如果
input是其他值(既不是1也不是0),则输出提示信息告知用户输入错误,让用户重新输入。
- 当
- 首先调用
- 定义了一个整型变量
包含的头文件:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
开头引入三个头文件:
stdio.h:标准输入输出头文件,提供了像printf、scanf这样用于输入输出操作的函数声明,在代码中多处用于向控制台输出提示信息以及获取用户输入的数字等操作。stdlib.h:标准库头文件,其中声明了rand函数(用于生成伪随机数)以及srand函数(用于设置随机数生成的种子)等,是实现生成随机数功能的关键头文件。time.h:时间相关的头文件,代码中使用了time函数来获取当前时间(以时间戳的形式),其返回值被用于设置随机数生成的种子,确保每次运行游戏时生成的随机数序列不同。
完整函数:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
//RAND_MAX - 0-32767
void menu(){
printf("********************************\n");
printf("*******1.play 0.exit********\n");
printf("********************************\n");
}
void game(){
//1.生成随机数
int ret = 0;
int guess = 0;
ret = rand() % 100 + 1;//专门生成随机数的函数
// printf("%d\n", ret);
//2.猜数字
while(1){
printf("猜数字:");
scanf("%d", &guess);
if(guess > ret){
printf("猜大了,再猜一次!\n");
}else if(guess < ret){
printf("猜小了,再猜一次!\n");
}else{
printf("恭喜你,猜对了。\n");
break;
}
}
}
int main(){
srand((unsigned int) time(NULL));
//时间戳
//拿时间戳来设置随机数的生成起点
// time_t time(time_t *timer)
int input = 0;
do{
menu();
printf("请选择>:");
scanf("%d", &input);
switch(input){
case 1:
game();
break;
case 0:
printf("退出游戏。\n");
break;
default:
printf("输入错误,请重新输入。\n");
}
}while(input);
return 0;

1399

被折叠的 条评论
为什么被折叠?



