今天给大家分享一个猜数字游戏代码
我们要完成一下几个部分(完整的代码放在最后)
1.生成1-100的随机数
2.打印一个简易的菜单
3.使用循环结构 让玩家输入值决定是否进行游戏 玩完一次后可以继续决定是否继续游戏
4.完成猜数字逻辑结构
----------------------------------------------------
1.生成随机数
生成随机数我们要使用几个函数实现
1.1 rand
void表示rand函数无需传值 int表示rand函数会生成一个整形随机值 这个随机值的范围在0-rand_MAX之间 最大值的大小是由编译器实现的 通常该值为32767
但是rand函数生成的是一个伪随机数 并不是真正的随机数 rand函数是对一个叫“种子”的基准值进行运算生成的随机数 种子就是一个固定的数 rand函数对这个值进行某种运算从而生成一个伪随机数 在默认情况下种子的值为1,如果我们不把种子改变的话就会出现下面的情况
这里我们调用5次rand函数并将生成的随机值打印
这是运行两次的结果 我们发现两次运行生成的随机数是一样的 这是因为种子没有发生改变 那么当我们玩完一次游戏之后退出游戏 下次再玩我们要猜的值就永远不会改变 所以我们要想办法改变种子
注:使用rand函数要包含头文件#include<stdlib.h>
1.2 srand
srand函数是用来初始化种子的 种子类型为unsigned int 简单来说 srand(2)就代表种子变为2 那么只要让括号里的值一直改变 然后再在rand函数之前调用srand函数 就可以让种子保持变化 那么就可以在每次调用程序时生成不一样的随机数了
那么我们怎么样才能让srand括号里的值一直改变呢?在我们的生活中 有一样东西一直在变 那就是--时间
1.3 time
time函数要传的值是一个指针变量 time函数会返回当前的日历时间 实际上返回的是1970年1月1日0时0分0秒到当下时间的差值 单位是秒 返回类型为time_t time_t本质上就是32位或者64位的整形类型 在今天的代码中 我们不需要给time函数传值 所以我们给time函数赋一个空指针Null 这样time函数就只会返回时间的差值 如下图
注:使用time函数要包含头文件#include<time.h>
1.4 生成随机数
我们把这些函数结合使用就能够实现生成随机数了
这样一来 每次生成的随机数就都不一样了
1.5 设置随机数的范围
如果我们要生成a-b的随机数 方法如下
我们要生成1-100的随机数 则只要套用公式
2.打印菜单
通过一个简单的menu函数来实现一个简易的菜单
3.循环结构实现选择游戏逻辑
选择do while 循环是因为不管怎样我们都要先打印一次菜单供玩家选择 程序开头创建了input变量 进入循环后 先调用menu函数打印菜单并让玩家选择输入input的值 再用switch语句根据input的值来判断进入哪个入口 玩家选择1则开始游戏 选择0则结束游戏 选择其他的值则会提醒玩家选择错误 这里while表达式为input的值 如果玩家输入0则代表要退出游戏 其他非0值则代表继续 符合逻辑
4. 猜数字逻辑
在玩家选择1之后就会进入game()函数开始猜数字游戏
首先创建变量r来接收随机数 然后创建玩家要猜所输入的值 进入循环 玩家输入所猜测的值 如果比r小则提示“猜小了” 如果比r大则提示“猜大了” 直到猜中r则打印“恭喜你,猜对了” 然后退出循环
注:srand函数我们只需要在程序开头调用一次就好
这样我们在每一次调用程序的时候就会改变一次种子
完结
写的不好大家见谅❤️❤️
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void game()
{
int r = rand() % 100 + 1;
int guess = 0;
while (1)
{
printf("请猜数字>:");
scanf("%d", &guess);
if (guess < r)
{
printf("猜小了\n");
}
else if (guess > r)
{
printf("猜大了\n");
}
else
{
printf("恭喜你,猜对了\n");
break;
}
}
}
void menu()
{
printf("***********************\n");
printf("****** 1. play ******\n");
printf("****** 0. exit ******\n");
printf("***********************\n");
}
int main()
{
int input = 0;
srand((unsigned int)time(NULL));
do
{
menu();
printf("请选择:>");
scanf("%d", &input);
switch (input)
{
case 1:
game();
break;
case 0:
printf("游戏结束\n");
break;
default:
printf("选择错误,重新选择\n");
break;
}
} while (input);
return 0;
}