思路解析
1.游戏需要界面,开始和退出
2.游戏开始时,我需要有随机数在游戏中自动生成
3.用户猜测数字时,若正确则提示正确,若错误则需要告知‘猜大了’或‘猜小了’
4.最好加上次数限制,增加游戏感
5.当一局结束后,再次选择开始或退出
生成随机数的函数介绍
1.rand函数
用来生成随机数的
#include<stdlib.h>//必须包含此头文件
int main()
{
RAND_MAX;//放入编译器里面可以看到的文字——
//#define RAND_MAX 0x7fff——此16进制转为10进制为32767
rand();//生成随机数的范围是0~RAND_MAX
return 0;
}
情况:若打印多次rand函数生成的数会发现,数字都一样
说明该rand函数生成的随机数是伪随机数,是计算机通过某种算法生成的随机数
原因:rand函数是对一个叫“种子”的基准值进行运算生成的随机数,而且rand函数生成随机数的默 认种子为1。
解决方案:只要让种子变化就可以了
2.srand函数
用来初始化随机数的生成器的
原型如下:
1 void srand (unsigned int seed);
原理:程序在调用rand函数之前先调用srand函数,通过srand函数的参数来设置rand函数生成随 机数的时候的种子,只要种子变化,每次生成的随机序列也就变化起来了
3.time函数
用来作为种子的
原型如下:
1 time_t time (time_t* timer);
解释:time函数会返回当前的日历时间,其返回的是1970年1月1日0时0分0秒到现在程序运行时 间之间的差值,单位是秒,返回的类型是time_t类型的,time_t类型的本质上其实就是32 位或者64位的整数类型。
time函数的参数timer如果是非NULL的指针的话,函数也会将这个返回的差值放在timer指 向的内存中带回去。如果timer是NULL,就只返回这个时间的差值。time函数返回的这个时 间差也被叫做:时间戳
使用时需要包含头文件:time.h
4.设置随机数的范围
如果要生成0~99之间的随机数
1 rand() %100;//余数的范围是0~99
如果要⽣成1~100之间的随机数
1 rand()%100+1;//%100的余数是0~99,0~99的数字+1,范围是1~100
如果要生产a~b之间的随机数
1 a + rand()%(b-a+1)
代码过程
1.自定义函数(游戏界面)
void begin()
{
printf("****************\n");
printf("**** 1.play ****\n");
printf("**** 2.exit ****\n");
printf("****************\n");
printf("是否开始游戏:>");
}
2.自定义函数(游戏过程)
(1)猜大或者猜小之后的回馈
(2)次数的限制(规定次数内未完成后结束,并展示正确数字)
void game()
{
int sum = 0;
int i = 5;//规定游戏次数
printf("只有五次机会哦!!!\n");
//1.输入随机数
int r = rand()%100+1;/*数字在0-100之间*/
//2.猜数字
while (i)
{
printf("请猜猜这个数:>");
scanf("%d", &sum);
if (sum < r)
{
printf("猜小了\n");
}
else if (sum > r)
{
printf("猜大了\n");
}
else
{
printf("恭喜你猜对了\n");
break;
}
i--;
}
if (i == 0)
{
printf("失败了,再努力吧\n");
printf("正确的数字是%d\n", r);
}
}
3.主函数的内容
int main()
{
srand((unsigned int)time(NULL));//以时间生成种子
int input = 0;
do//用循环使一次游戏结束后还可以选择是否继续
{
begin();//第一个函数,打印游戏界面
scanf("%d", &input);//选择是否开始游戏
switch (input)
{
case 1:
game();//第二个函数,游戏过程的进行
break;
case 2:
printf("退出游戏\n");
break;
default:
printf("请重新输入\n");
break;
}
} while (input);
return 0;
}
代码内容
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>
//猜数字游戏
void begin()
{
printf("****************\n");
printf("**** 1.play ****\n");
printf("**** 2.exit ****\n");
printf("****************\n");
printf("是否开始游戏:>");
}
void game()
{
int sum = 0;
int i = 5;//规定游戏次数
printf("只有五次机会哦!!!\n");
//1.输入随机数
int r = rand()%100+1;/*数字在0-100之间*/
/*2.猜数字*/
while (i)
{
printf("请猜猜这个数:>");
scanf("%d", &sum);
if (sum < r)
{
printf("猜小了\n");
}
else if (sum > r)
{
printf("猜大了\n");
}
else
{
printf("恭喜你猜对了\n");
break;
}
i--;
}
if (i == 0)
{
printf("失败了,再努力吧\n");
printf("正确的数字是%d\n", r);
}
}
int main()
{
srand((unsigned int)time(NULL));//以时间生成种子
int input = 0;
do//用循环使一次游戏结束后还可以选择是否继续
{
begin();//第一个函数,打印游戏界面
scanf("%d", &input);//选择是否开始游戏
switch (input)
{
case 1:
game();//第二个函数,游戏过程的进行
break;
case 2:
printf("退出游戏\n");
break;
default:
printf("请重新输入\n");
break;
}
} while (input);
return 0;
}