//#include<stdio.h>
//#include<stdlib.h>
//#include<time.h>
//void menu()
//{
// printf("*************************\n");
// printf("****** 1.play *********\n");
// printf("****** 0.exit *********\n");
// printf("*************************\n");
//}
//
//void math()
//{
// int se = rand() % 100 + 1;
// //printf("%d\n",se);
// int guess = 0;
// while (1)
// {
// printf("请输入猜测的数字大小:>");
// scanf("%d", &guess);
// if (guess > se)
// {
// printf("猜大了\n");
// }
// else if (guess < se)
// {
// printf("猜小了\n");
// }
// else
// {
// printf("猜对了\n");
// break;
// }
// }
//}
//
//int main()
//{
// int n;
// srand((unsigned) time);
// do
// {
// printf("猜数字游戏:>\n");
// menu();
// printf("请做出选择:>");
// scanf("%d",&n);
// switch (n)
// {
// case 1:
// math();
// break;
// case 0:
// printf("您以退出游戏\n");
// break;
// default:
// printf("输入错误,请重新输入:>");
// break;
// }
//
// } while (n);
// return 0;
//}
C语言猜数字游戏的重难点在于随机数的处理,想要做好一个猜数字游戏,那么就要使得它的数字足够随机,那么如何解决随机数这个问题呢?
我们通常使用 rand() 这个函数来处理,rand() 函数是一个整形无参数函数(int rand(void)),每次调用它就可以获得一个明显不相关的数据,但是在使用rand 的时候,我们需要用srand 函数来进行初始化,让它得到一个随机值。
void srand(unsigned int seed)
使用情况如下:
经过实验发现,如果srand ()里面的数值不发生改变,那么rand 得到的数值也就不会发生变化,也就是说,如果想要得到一直在变化的随机数,那么srand 函数里面的随机数也要一直在变动,
但是这样一来我们的问题就再次回到了原点——随机数。
这样一来,我们就需要一个一直在变动的数值,那么什么一直在变动?答案是——时间
这时候我们就要引入一个时间戳的概念,什么叫时间戳
时间戳是使用数字签名技术产生的数据,签名的对象包括了原始文件信息、签名参数、签名时间等信息。时间戳可以当成以前的邮戳来理解,戳记表明邮件的收发时间,时间戳也一样,不过时间戳的获取是指从计算机诞生的1970年1月1日早上0点到现在的时间的秒数。
我们引用时间戳的函数是time,则srand 可写为
srand ((unsigned) time);
此时我们的随机数就可以写出来了:
#include<time.h>
#include<stdlib.h>
void math()
{
int random;
srand((unsigned) time(NULL));
random=srand;
printf("%d\n",random);
}
解决了最大的难题,那么猜数字游戏,我们也就能写出来了
先做一个简易的菜单
void menu()
{
printf("*************************\n");
printf("***** 1.play **********\n");
printf("***** 0.exit **********\n");
printf("*************************\n");
}
菜单做完了之后再做随机数的产生和猜数字游戏的玩法基础
#include<stdlib.h>
#include<time.h>
#include<stdio.h>
void math()
{
srand((unsigned) time);
int random=rand;
int guess;
while(1) //这里判定条件为 1 是为了让游戏能够一直进行猜测数字,给玩家多次机会
{
pirntf("请输入你猜测的数字:>");
scanf("%d",&guess);
if(guess>random)
{
printf("猜大了\n");
}
else if(guess<random)
{
printf("猜小了\n");
}
else
{
printf("恭喜你,猜中了!\n");
break;//猜中了就直接跳出循环
}
}
}
做完上面两步之后,接下来来做游戏的主体:
#include<stdio.h>
int main()
{
int n;
do
{
printf("猜数字游戏:>");
menu();
printf("请选择:>");
scanf("%d",&n);
switch(n)
case 1:
math();
break;
case 0:
printf("您已退出游戏\n");
break;
}while(n)//这里用do···while()语句是为了能让程序更方便运行,不会在做出选择后就退出游戏
}
按照上面的代码来说逻辑和语法基本已经没有问题了,但是
所以应该把这句语句放进主函数里
如此 srand 语句就只被调用了一次,就不会出现那种情况 ,但是我们所写出来的代码得到的随机数范围又太大了不好猜测,所以我们应该给它做出限制,让它的范围在1~100以内;
如
觉得有用的兄弟们,点个赞,给个关注吧。