前言
程序员写游戏给自己玩哈哈哈,想要学好C语言(包括其他语言),实践是必不可少的,通过编写一个小游戏什么什么的来巩固学习到的知识是非常值得的行为。于是乎,我在这里写一个关于猜数字的小游戏来巩固自己对随机数生成方面的知识。
一、随机函数介绍
由计算机生成的随机数全都是伪随机数,都是通过一系列计算得到的数,只是看起来"很随机"罢了。
要想在C语言中生成随机数,需要用到两个函数。rand和srand。
int rand (void);
void srand (unsigned int seed);
1.rand
rand函数的作用是生成0~RAND_MAX之间的随机数,RAND_MAX的值是32767。该函数包含在strlib.h头文件里面。
但是若是只使用rand函数,会发现编译后的结果一直没有变化,始终是一个41。
这是因为rand函数的随机种子没有改变,被默认成1了,要想改变随机种子,需要用到srand函数。
2.srand
srand函数的功能是为随机数的生成器设置一个种子,以实现不完全相同的随机数序列。该函数包含在strlib.h头文件里面。
该函数的参数类型是unsigned int 类型。
要想其参数一直改变,总不能我一直手动改变吧。一个经常变化的数。。。时间!时间是每时每刻都在变化的,将时间当作参数就完美解决了。
3.time
time函数的功能是返回当前时间戳,其包含在time.h的头文件里面。
由于其返回类型是time_t类型,需要将其转换为unsigned int类型才可被srand函数使用。
二、代码实现
1.引入头文件
代码如下:
#include<stdio.h> #include<time.h> #include<stdlib.h>
2.游戏外部(主函数)逻辑
代码如下:
int main() { int select = 0; //srand函数和time函数生成随机种子 srand((unsigned int)time(NULL)); do { //显示菜单 menu(); printf("请选择:"); scanf("%d", &select); //循环逻辑 switch (select) { case 1: //进行游戏 game(); break; case 0: //退出游戏 printf("退出游戏\n"); break; default: //选择错误 printf("输入错误\n"); break; } } while (select);//进行游戏后可选择再次游玩 return 0; }
3.目录函数的实现
void menu() { printf("******************************\n"); printf("********** 1.play **********\n"); printf("********** 0.exit **********\n"); printf("******************************\n"); }
不需要返回值,也不需要参数。
4.游戏过程的逻辑
void game() { //定义玩家所猜测的数 int guess = 0; //生成随机数 int ret = rand() % 100 + 1; //循环猜测 while (1) { printf("请猜数字(1~100):"); scanf("%d", &guess); //猜错提示 if (guess < ret) printf("猜小了\n"); else if (guess > ret) printf("猜大了\n"); else { //猜对跳出 printf("猜对了\n"); break; } } }
至此,游戏的完整代码已经编写出来了,来测试一下结果。
三、结果证明
结果符合预期。
总结
以上内容讲述了随机数相关函数的介绍以及应用。本篇通过随机函数编写了一个小小的猜数字游戏,旨在提高学习的兴趣,加深知识印象。