用C语言实现的数字猜猜乐
完整代码如下:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void menu()
{
printf("*********************\n");
printf("**** 1、PLAY ****\n");
printf("**** 0、EXIT ****\n");
printf("*********************\n");
}
int main(void)
{
int input = 0;
srand((unsigned int)time(NULL));
do
{
menu();
printf("请选择:");
scanf("%d", &input); //1进入游戏
switch(input)
{
case 0:
printf("退出游戏\n");
break;
case 1:
printf("游戏开始\n");
game();
break;
default:
printf("选择错误,请重新选择\n");
break;
}
} while (input);
//选择0就会结束while循环
return 0;
}
void game()
{
//1、生成随机数
int b = 0;
int a = rand()%100+1;//1~100的随机数
//printf("%d", a);
//2、猜数字
int count = 5;
while (count)
{
printf("请猜一个数:");
scanf("%d", &b);
if (b > a)
{
printf("猜大了,");
}
else if (b < a)
{
printf("猜小了,");
}
else
{
printf("恭喜你!猜对了!数字是%d\n",b);
break;
}
count--;
if (count > 0)
printf("你还有%d次机会\n", count);
}
printf("很遗憾,你没能猜对,数字为%d\n", a);
}
主要运用的是自定义函数、分支与循环。下面来讲讲细节。
首先,先用自定义函数创建了一个界面,这个界面可以根据自己的想法来创建,但主要的就是搭配后面的switch进行选择,选1就进入游戏,选0 就退出游戏。选择其他的就再次进行选择。注意,如果case子项没有break,就会继续往下执行。比如选择1,如果该分支没有break,会继续执行下面的代码。
我用的是do while循环,因为我首先要先有一个界面,所以调用了menu(),do while循环至少执行循环体一次,然后用你输入的选择用作while里的条件,如果你选择1,为真就会无限循环,依靠break跳出循环,选择0就不进行循环。
其次,就是在case1中又调用了一个自定义函数。这个函数是这游戏最重要的部分,玩这个游戏首先就要生成一个随机数,让你去猜,下面我们来谈谈如何生成随机数。
先介绍rand()和srand()。rand和srand都在头文件stdlib.h中。rand函数返回一个伪随机数,什么是伪随机数,其是通过某种算法生成的,真正的随机数是谁都无法预测的。rand的值在0-RAND_MAX(32767)之间。
使用rand()时括号里面不带参数,rand函数是对一个叫“种子”的基准值进行运算生成的随机数。srand函数用来初始化随机数生成器的,也就是初始化基准值的,默认值为1.
srand的原型为
void srand(unsigned int seed);
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函数在头文件time.h中
接下来回到这个程序。在每次程序进行时,我们只需要设置一次种子就行了,可以这样设置
srand((unsigned int)time(NULL));
如果不写srand括号里面的会怎么样?那么它的默认值是1,每次程序运行时它产生的随机数都不会变。
在没有srand的情况下,默认种子为1,那么我们再将srand的种子设为1,发现生成的值没有变化。
另外,srand不能放在循环里面,否则每次执行循环时设置的种子不一样,产生的数也会变化,也就是说让你猜的那个数一直在变,你是在折磨你自己。
在这个程序中,我还加了一个限制条件,只给你猜5次的机会,也可以根据自己的想法来。
上一篇: 重编C语言版简易猜数字游戏
下一篇: 详解:使用C语言实现的猜数字小游戏