实现大纲:
1.电脑随机生成一个数字
2.猜数字
(1):猜大了,提醒你继续猜
(2):猜小了,提醒你继续猜
(3):猜对了,提醒你:恭喜你!猜对了。并结束游戏
3.玩玩一把不过瘾可以继续玩,不用退出程序;
首先我们要定义一个变量和打印一个菜单告诉玩家该怎么选择,因为程序一开始运行就要进行打印和玩玩游戏后还可以继续进行,所以我们首选do while 循环来实现;
#include<stdio.h> #include<time.h> void mnue() { printf("********************\n"); printf("*****1.玩游戏 *****\n"); printf("*****0.退出游戏*****\n"); printf("********************\n"); } int main() { //打印菜单 //1.玩游戏 //0.退出游戏 srand((unsigned int)time(NULL)); int input = 0; do { mnue(); printf("请选择:>"); scanf("%d", &input); switch (input) { case 1: printf("猜数字游戏\n"); game(); break; case 0: printf("推出游戏\n"); break; default: printf("选择错误,请重新选择\n"); } } while (input); return 0; }
接下来我们就要进行游戏环节的实现,在C语言中rand函数可以生成0—32767的随机数;但是在使用中有很多需要注意的点;
#include<stdio.h> #include<time.h> void mnue() { printf("********************\n"); printf("*****1.玩游戏 *****\n"); printf("*****0.退出游戏*****\n"); printf("********************\n"); } void game() { //1.生成随机数 int ret = rand(); printf("%d\n", ret); //rand函数可以生成随机数 生成一个0—RAND_MAX的随机数 (0——32767) //2.猜数字 } int main() { //打印菜单 //1.玩游戏 //0.退出游戏 //srand((unsigned int)time(NULL)); int input = 0; do { mnue(); printf("请选择:>"); scanf("%d", &input); switch (input) { case 1: printf("猜数字游戏\n"); game(); break; case 0: printf("推出游戏\n"); break; default: printf("选择错误,请重新选择\n"); } } while (input); return 0; }
我们试运行两次对会发现每次运行生成的随机数都是相同的
出现这样的结果是因为rand函数在调用前要使用srand函数,而srand函数的参数必须为一个随机值,这样就出现了类似”先有鸡还是先有蛋“的问题,思考下我们不难发现现实生活中我们的时间总是在变化的,这样就有了时间戳这个名词;时间戳:每一个时刻可以转化为一个数字;恰好C语言中我们有time函数,但是srand函数的返回值必须为usinged int 而time函数的返回值为time_t,所以我们要将time函数的返回值强制转化为usigned int。
#include<stdio.h> #include<time.h> void mnue() { printf("********************\n"); printf("*****1.玩游戏 *****\n"); printf("*****0.退出游戏*****\n"); printf("********************\n"); } time返回值 time_t sand返回值 unsigned int void game() { // //1.生成随机数 int ret = rand();//给sand传递一个随机值——时间戳 一个时刻可以转化一个数字 time函数可以返回一个时间戳 printf("%d\n", ret); // //rand函数可以生成随机数 生成一个0—RAND_MAX的随机数 (0——32767) // //2.猜数字 } int main() { //打印菜单 //1.玩游戏 //0.退出游戏 srand((unsigned int)time(NULL)); int input = 0; do { mnue(); printf("请选择:>"); scanf("%d", &input); switch (input) { case 1: printf("猜数字游戏\n"); game(); break; case 0: printf("推出游戏\n"); break; default: printf("选择错误,请重新选择\n"); } } while (input); return 0; }
这样rand配合着srand和rand函数就可以生成随机数;我们又发现rand函数生成的随机数范围有点大,有点不方便,我们只想要1—100的随机数,我们可以将生成的随机数进行取模,就可以生成0—99的随机数,在+1可以生成1—100的随机数;
让我们来看看完整代码
#include<stdio.h> #include<time.h> void mnue() { printf("********************\n"); printf("*****1.玩游戏 *****\n"); printf("*****0.退出游戏*****\n"); printf("********************\n"); } time返回值 time_t sand返回值 unsigned int void game() { // //1.生成随机数 int guess = 0; int ret = rand()%100+1; //给sand传递一个随机值——时间戳 一个时刻可以转化一个数字 time函数可以返回一个时间戳 //rand函数可以生成随机数 生成一个0—RAND_MAX的随机数 (0——32767) //2.猜数字 while (1) { scanf("%d", &guess); if (guess > ret) { printf("猜大了\n"); } else if (guess < ret) { printf("猜小了\n"); } else { printf("恭喜你猜对了\n"); break; } } } int main() { //打印菜单 //1.玩游戏 //0.退出游戏 srand((unsigned int)time(NULL)); int input = 0; do { mnue(); printf("请选择:>"); scanf("%d", &input); switch (input) { case 1: printf("猜数字游戏\n"); game(); break; case 0: printf("推出游戏\n"); break; default: printf("选择错误,请重新选择\n"); } } while (input); return 0; }