当前位置:   article > 正文

C语言实现猜数字游戏

C语言实现猜数字游戏

引言:

在掌握了前面的分支循环使用之后,我们就可以写一些稍微有趣的代码了,例如,我们可以实现一个猜数字游戏

一.随机数的生成

要想完成猜数字游戏,我们就需要生成随机数,那么该如何产生随机数呢?

C语言中提供了一个函数叫做rand,这函数是可以生成随机数的,函数原型如下:

int rand(void);

但是值得注意的是,rand函数生成的随机数是一种伪随机数,并不是真正意义上的随机,这个随机数范围在0——32767之间,rand函数使用时需要加上一个头文件:stdlib.h。

我们用下述代码来演示一下rand函数:

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main()
  4. {
  5. printf("%d\n",rand());
  6. printf("%d\n",rand());
  7. printf("%d\n",rand());
  8. printf("%d\n",rand());
  9. printf("%d\n",rand());
  10. printf("%d\n",rand());
  11. return 0;
  12. }

                  

看上去两次编译运行结果相同,恰恰说明了rand所提供的随机数是一种伪随机,是通过某种算法生成的随机数,真正的随机数是无法预测下一个数是多少的,如果要生成不同的随机数,那我们就需要改变一下函数。

二.srand函数

C语言中又提供了一个函数叫做srand,是用来初始化随机数的生成器的,srand函数的原型如下:

void srand(unsigned int seed);

程序中调用rand函数之前先调用了srand函数,通过srand函数的参数seed来设置rand函数随机数生成的种子,只要种子在变化,每次生成的随机数也就变化起来了。那就是说给srand的种子如果是随机的,rand就能生成随机数,在生成随机数时又需要一个随机数,这就相互矛盾了。

三.time函数的引入

在程序中我们一般是使用程序运行的时间作为种子,因为时间是时刻在变化的。

在C语言中有一个函数叫做time,就可以获得这个时间,time函数原型如下:

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,那么我们就可以让生成随机数的代码改写如下:

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. int main()
  5. {
  6. srand((unsigned int)time(NULL));
  7. printf("%d\n",rand());
  8. printf("%d\n",rand());
  9. printf("%d\n",rand());
  10. printf("%d\n",rand());
  11. return 0;
  12. }

                                                      

 再次观察,每次运行的结果就不同了,就代表我们的随机数设置成功了。

四.设置随机数的范围

如果我们要生成0——99之间的随机数,方法如下:

rand()%100;//余数范围为0到99

 如果我们要生成1——100之间的随机数,方法如下:

rand()%100+1;//余数是0——99,+1后范围是1——100

  如果我们要生成100——200之间的随机数,方法如下:

100+rand()%101;//余数范围是0——100,加上100范围为100——200

五.猜数字游戏的实现

我们要先想象一下猜数字游戏的架构,先给出一个随机数,是我们要猜的数字,如果猜大了,则给予提示,并且重新猜测,猜小了,就给出提示猜小了,如果猜对了,就可以提示恭喜通关,也可以增加难度比如只能猜三次。

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. void game()
  5. {
  6. int r=rand()%100+1;
  7. int guess=0;
  8. int count=5;
  9. while(count)
  10. {
  11. printf("\n你还有%d次机会\n",count);
  12. printf("请猜数字>:");
  13. scanf("%d",&guess);
  14. if(guess<r)
  15. {
  16. printf("猜小了,请重新猜测\n");
  17. }
  18. else if(guess>r)
  19. {
  20. printf("猜大了,请重新猜测\n");
  21. }
  22. else
  23. {
  24. printf("恭喜你,完成猜测,奖励100元\n");
  25. break;
  26. }
  27. count--;
  28. }
  29. if(count==0)
  30. {
  31. printf("你失败了,好好反思下最近是不是没有努力\n");
  32. }
  33. }
  34. void menu()
  35. {
  36. printf("********************\n");
  37. printf("*******1.play ******\n");
  38. printf("*******0.exit ******\n");
  39. printf("********************\n");
  40. }
  41. int main()
  42. {
  43. int input=0;
  44. srand((unsigned int)time(NULL));
  45. int n=rand();
  46. int m;
  47. do
  48. {
  49. menu();
  50. printf("请选择>:");
  51. scanf("%d ",&input);
  52. switch(input)
  53. {
  54. case 1:
  55. game();
  56. break;
  57. case 0:
  58. printf("游戏结束\n");
  59. break;
  60. default:
  61. printf("选择错误,重新选择\n");
  62. break;
  63. }
  64. }while(input);
  65. return 0;
  66. }

最后,完整代码附上,快上你的vs2022试试吧!喜欢的话可以点个赞支持一下哦!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/330428
推荐阅读
相关标签
  

闽ICP备14008679号