文章目录
猜数字游戏专题1.随机数生成1.1 rand1.2 srand1.3 time1.4 随机数的范围 2.猜数字游戏的实现 希望读者们多多三连支持小编会继续更新你们的鼓励就是我前进的动力!
猜数字游戏专题
掌握了前面学习的vlog的知识,尤其是分支与循环,我们可以写一个经典有趣的游戏:猜数字
游戏要求:
1.电脑自动生成1~100的随机数
2.玩家猜数字,程序根据玩家猜的数字,做出猜大了或猜小了的判断,直到玩家猜对为止
1.随机数生成
1.1 rand
rand是C语言中的一种函数,其语法形式为:
int rand (void);
rand 会返回一个随机数,这个随机数的范围在0~RAND_MAX(理论值)之间
使用该函数需要包括头文件**#include <stdlib.h>**
实际上我们多次运行只有 rand 函数的程序会发现,每次打印的随机数都相同,其实只有 rand 函数返回的是一个伪随机数,真正的随机数是无法预测下一个数是多少的, rand 函数是基于一个叫 “种子” 的基准值生成随机数,种子默认值为1,所以我们想生成完全随机的数,要让种子时刻处于变化状态
1.2 srand
srand 也是C语言中的一种函数,其语法形式为:
void srand (unsigned int seed);
srand 会初始化随机数的生成器,调用 rand 函数前要调用 srand 函数,通过 srand 函数的参数seed来设置rand函数生成随机数的时候的种子,只要种子在变化,每次生成的随机数序列也就变化起来了
那也就是说 srand 的种子如果是随机的, rand 就能生成随机数
1.3 time
易知时间是在时刻发生变化的,所以我们可以将时间作为种子来使用
time 就是C语言中的一个时间函数,其语法形式为:
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 函数的时候需要包含头文件:#include <time.h>
于是完整的生成随机数代码可以这样写:
srand((unsigned int)time(NULL));printf("%d\n", rand());
srand函数是不需要频繁调用的,⼀次运行的程序中调用⼀次就够了
1.4 随机数的范围
生成0~99之间的随机数:
rand() % 100;//余数的范围是0~99
生成1~100之间的随机数:
rand()%100+1;//%100的余数是0~99,0~99的数字+1,范围是1~100
生成100~200之间的随机数:
100 + rand()%(200-100+1)//余数的范围是0~100,加100后就是100~200
生成a~b之间的随机数:
a + rand()%(b-a+1)
2.猜数字游戏的实现
首先设置主要的菜单界面:
#include <stdio.h>#include <stdlib.h>#include <time.h>int main(){ int input = 0; srand((unsigned int)time(NULL)); do { menu(); printf("请选择:>"); scanf("%d", &input); switch (input) { case 1: game(); break; case 0: printf("游戏结束\n"); break; default: printf("选择错误,重新选择\n"); break; } } while (input);
void menu(){ printf("***********************\n"); printf("****** 1. play ******\n"); printf("****** 0. exit ******\n"); printf("***********************\n");}
然后设计主要的猜数字代码:
void game(){ int r = rand()%100+1; int guess= 0; while(1) { printf("请猜数字>:"); scanf("%d", &guess); if(guess < r) { printf("猜⼩了\n"); } else if(guess > r) { printf("猜⼤了\n"); } else { printf("恭喜你,猜对了\n"); break; } } }
除此之外,丰富游戏玩法我们还可以加上猜的次数,自定义函数game可修改为:
void game(){ int r = rand() % 100 + 1; int guess = 0; int count = 5; while (count) { printf("\n你还有%d次机会\n", count); printf("请猜数字>:"); scanf("%d", &guess); if (guess < r) { printf("猜⼩了\n"); else if (guess > r) { printf("猜⼤了\n"); } else { printf("恭喜你,猜对了\n"); break; } count--; } if (count == 0) { printf("你失败了,正确值是:%d\n", r); }}
最后要注意把两个自定义函数 game 和 menu 放在主函数前
或者在主函数前加上 void mean() 和 void game() 进行函数声明 (后面会讲)