【C语言】实现趣味猜数字小游戏
目录一、游戏介绍二、如何生成随机数1.rand函数2.srand函数3.time函数4.综合以上知识我们可以做到让程序每次运行都生成不同的1~100之间的随机数的操作具体代码如下三、整体参考代码四、其他小功能1、在用户输入之后更新范围并输出以提示用户2、让游戏变得更刺激些——限制用户输入次数五、完整版代码一、游戏介绍猜数字小游戏是一个经典的代码练习题目今天我们要通过C语言实现猜数字小游戏 。游戏过程1、电脑生成一个 1~100 范围内的随机数2、玩家猜数字电脑根据玩家的输入给出反馈猜大或猜小直到玩家猜对游戏结束。二、如何生成随机数1.rand函数在C语言中有一个 rand 函数可以生成随机数生成的随机数范围是0~32767使用rand函数需要包含 stdlib.h 头文件可以通过以下方法生成 a~b 范围内的随机数a rand() % ( b - a 1 ) //生成 a~b 范围内的随机数接下来我们测试一下rand函数#includestdio.h #includestdlib.h int main() { printf(%d\n, rand()); printf(%d\n, rand()); printf(%d\n, rand()); printf(%d\n, rand()); printf(%d\n, rand()); return 0; }运行结果根据运行结果我们可以发现使用rand函数生成的随机数是伪随机每次运行后生成出的数字都相同。通过查阅资料可以知道rand函数是对一个叫“种子”的基准值进行运算生成的随机数,而在C语言中rand函数默认的基准值为1。因此我们需要使用另一个函数srand。2.srand函数srand函数可以用来初始化随机数生成器。srand需要传入一个 unsigned int 类型的数作为rand生成随机数的种子。在程序中一般使用 time 函数获取时间作为种子。注srand函数不需要频繁调用每次运行程序时调用一次就足够了3.time函数time函数会返回一个时间戳即从1970年1月1日到程序运行时间之间的秒数。返回类型为time_t类型本质上是32位或64位的整型类型。time函数的参数如果是非NULL指针就会把返回的时间戳放到指针指向的内存中带回去如果参数为NULL就只返回这个时间戳。使用time函数需要包含头文件 time.h4.综合以上知识我们可以做到让程序每次运行都生成不同的1~100之间的随机数的操作具体代码如下#includestdio.h #includestdlib.h #includetime.h int main() { srand(time(NULL)); printf(%d\n, (rand()%1001)); return 0; }三、整体参考代码头文件#includestdio.h #includestdlib.h #includetime.h为了提高代码的可读性可以把打印菜单和猜数字的部分封装成函数void menu() //定义菜单函数 { printf(**********************\n); printf(****** 1.开始 ******\n); printf(****** 0.退出 ******\n); printf(**********************\n); }定义一个猜数字函数并根据用户输入做出反馈。当用户输入的数字和电脑生成的随机数相同时使用 break 跳出循环。void game() //猜数字部分 { int num rand() % 100 1; int guess 0; while(1) { printf(请输入数字:); scanf(%d,guess); if (num guess) { printf(很遗憾你猜小了\n); } else if (num guess) { printf(很遗憾你猜大了\n); } else { printf(恭喜你猜对了\n); break; } } printf(游戏结束); }由于在菜单下方选择选项的操作至少要做一次因此我们选择 do...while 循环并在 do...while 循环中打印菜单使用 switch 对不同的输入进行反馈。int main() { srand(time(NULL)); //初始化随机数生成器 int input 0; do { menu(); //调用菜单函数打印菜单 printf(请选择:); scanf(%d, input); switch (input) { case 0: printf(游戏结束\n); break; case 1: game(); break; default: printf(输入错误请重新输入\n); break; } } while (input); return 0; }四、其他小功能1、在用户输入之后更新范围并输出以提示用户void game() //猜数字部分 { int num rand() % 100 1; int max 100; int min 1; //定义最大值和最小值并分别赋值为100,1 int guess 0; while(1) { printf(请输入数字:); scanf(%d,guess); if (num guess) { if (guess min) //将用户输入与最小值比较避免因用户输入问题导致范围变大 min guess; //当用户输入的数偏小就将用户输入的数复制给最小值并输出 printf(很遗憾你猜小了。当前范围( %d , %d )\n,min,max); } else if (num guess) { if (guessmax) //将用户输入与最小值比较避免因用户输入问题导致范围变大 max guess; //当用户输入的数偏大就将用户输入的数复制给最大值并输出 printf(很遗憾你猜大了。当前范围( %d , %d )\n, min, max); } else { printf(恭喜你猜对了\n); break; } } printf(游戏结束); }2、让游戏变得更刺激些——限制用户输入次数void game() //猜数字部分 { int count 5; //定义 count 并初始化为 5 表示用户共有 5 次输入机会 int num rand() % 100 1; int guess 0; while (count) //将函数循环条件改为 count 当 count 减为 0 时停止循环 { printf(你还有 %d 次机会请输入数字:,count); //在用户输入前打印剩余次数 scanf(%d, guess); if (num guess) { printf(很遗憾你猜小了\n); } else if (num guess) { printf(很遗憾你猜大了\n); } else { printf(恭喜你猜对了\n); break; } count--; //用户每次输入之后次数减一 } printf(游戏结束); }五、完整版代码#define _CRT_SECURE_NO_WARNINGS 1 //猜数字游戏 #includestdio.h #includestdlib.h #includetime.h void menu() //定义菜单函数 { printf(**********************\n); printf(****** 1.开始 ******\n); printf(****** 0.退出 ******\n); printf(**********************\n); } void game() //猜数字部分 { int count 5; //定义 count 并初始化为 5 表示用户共有 5 次输入机会 int max 100; int min 1; //定义最大值和最小值并分别赋值为100,1 int num rand() % 100 1; int guess 0; while (count) //将函数循环条件改为 count 当 count 减为 0 时停止循环 { printf(你还有 %d 次机会请输入数字:, count); //在用户输入前打印剩余次数 scanf(%d, guess); if (num guess) { if (guess min) //将用户输入与最小值比较避免因用户输入问题导致范围变大 min guess; //当用户输入的数偏小就将用户输入的数复制给最小值并输出 printf(很遗憾你猜小了。当前范围( %d , %d )\n, min, max); } else if (num guess) { if (guess max) //将用户输入与最小值比较避免因用户输入问题导致范围变大 max guess; //当用户输入的数偏大就将用户输入的数复制给最大值并输出 printf(很遗憾你猜大了。当前范围( %d , %d )\n, min, max); } else { printf(恭喜你猜对了\n); break; } count--; //用户每次输入之后次数减一 } printf(游戏结束); } int main() { srand(time(NULL)); //初始化随机数生成器 int input 0; do { menu(); //调用菜单函数打印菜单 printf(请选择:); scanf(%d, input); switch (input) { case 0: printf(游戏结束\n); break; case 1: game(); break; default: printf(输入错误请重新输入\n); break; } } while (input); return 0; }感谢观看