【游戏】猜数字
目录
1.游戏描述
1.自动产生一个1-100之间的随机数
2.开始猜数字
-->猜对了,游戏结束
-->猜错了,告诉你猜大了还是猜小了,继续猜直到猜对了为止
3.游戏可以一直玩,除非退出游戏
2.游戏设计
第一步:先设计主菜单,也就是你刚开始黑框框内想看到的。进入菜单后,输入1的时候进行猜数字游戏,输入0的时候break,输入其他的时候需要再次打印菜单并且重新输入操作。初始代码如下:
void menu()
{
printf("****************************n");
printf("****************************n");
printf("***** 1.开始游戏 ******n");
printf("***** 0.退出游戏 ******n");
printf("****************************n");
printf("****************************n");
}
int main()
{
int input = 0;
do
{
menu();
printf("请选择");
scanf("%d", &input);
switch (input)
{
case 1:printf("猜数字n");break;
case 0: printf("退出游戏n");break;
default:printf("输入错误,请重新输入!n");break;
}
} while (input);
getchar();
getchar();
return 0;
}
分析:当input等于1时,进入猜数字,然后跳出switch,do while循环为真则继续打印菜单;
当input等于0时,直接退出游戏,跳出switch,do while循环为假不执行;
当input为其他值时,重新输入,do while循环为真则继续打印菜单。
第二步:实现猜数字的过程记为game
1.需要生成一个随机数-->rand()
调查发现int rand(void)-->表示rand无参返回为int类型
代码如下:
void game()
{
int num=rand();//生成一个随机数,引用头文件stdlib.h
//rand无参,返回类型为int
printf("%dn", num);
}
当我们关闭程序,重新调试时我们会发现它的随机数都是一样的,如下图:
这是为什么呢?-->rand函数返回了一个0-32767的一个数,在用rand之前还应该调用srand(需要引入stdlib.h) 调查发现void srand(unsigned int )
因此我们尝试将代码修改为:
void game()
{
srand(100);
int num=rand();//生成一个随机数,引用头文件stdlib.h
//rand无参,返回类型为int
printf("%dn", num);
}
我们调试代码可以发现运行出来的随机数与之前不同,但是当我们一直执行猜数字便会发现一直都是365。当我们改变代码中的100,便可以发现365会变成其他数字,但一直执行猜数字也一直不变。
那我们如何让srand里的数字变起来呢?-->时间-时间戳(时间转化成一个数字)在网页搜索后可以了解到时间戳:就是当前时间相较于起始时间之间的差值换算成以秒为单位的数字
传入time函数(引入time.h),调查发现time函数返回的类型为time_t,而其也为int型,又因为srand需要unsigned int类型,所以我们把time函数强制转化,即代码修改如下:
void game()
{
srand((unsigned int)time(NULL));//time函数需要引入time.h
int num=rand();//生成一个随机数,引用头文件stdlib.h
//rand无参,返回类型为int
printf("%dn", num);
}
此时,代码运行如图:
我们可以发现这些随机值都离得很近,当我们快速执行1的时候会出现下面的情况(值相等)。但是我们一次猜数字的过程中,只需要设置一次随机数即可,因此我们不应该让srand紧在rand前面。怎么解决呢?-->将srand在一进入主函数就设置 。
那么我们怎么让这些随机数在1-100之间呢?-->让这个数%100的余数是0-99,所以加1范围就会变成1-100.
因此代码修改为int num=rand()%100+1;
2.猜数字
设置一个循环,输入要猜的数当小了的时候输出“猜小了”,继续输入一个数字;
当大了的时候输出“猜大了”,继续输入一个数字;
当等于的时候输出“恭喜你猜对了”并且跳出循环。
代码如下:
while (1)
{
printf("请猜数字n");
scanf("%d", &guess);
if (guess < num)
printf("猜小了n");
else if (guess>num)
printf("猜大了n");
else
{
printf("恭喜你,猜对了n");
break;
}
}
我们的这个游戏设计到这里就结束啦!!!
整体代码如下:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void menu()
{
printf("****************************n");
printf("****************************n");
printf("***** 1.开始游戏 ******n");
printf("***** 0.退出游戏 ******n");
printf("****************************n");
printf("****************************n");
}
void game()
{
int guess = 0;
int num = rand() % 100 + 1;//生成一个随机数,引用头文件stdlib.h
//rand无参,返回类型为int
while (1)
{
printf("请猜数字n");
scanf("%d", &guess);
if (guess < num)
printf("猜小了n");
else if (guess>num)
printf("猜大了n");
else
{
printf("恭喜你,猜对了n");
break;
}
}
}
int main()
{
int input = 0;
srand((unsigned int)time(NULL));//time函数需要引入time.h
do
{
menu();
printf("请选择");
scanf("%d", &input);
switch (input)
{
case 1:game();break;
case 0: printf("退出游戏n");break;
default:printf("输入错误,请重新输入!n");break;
}
} while (input);
getchar();
getchar();
return 0;
}
游戏试玩如下图:
今天的课程到这里就结束啦!!!!!
谢谢大家谢谢大家谢谢大家(重要的事说三遍!!!!)>_<