• C语言猜数字游戏详解及代码优化


    目录

    引言:

    1.程序思路: 

    2.代码实现:

    2.1.生成游戏菜单:

    2.2.构建主函数框架: 

    2.3.构建游戏函数: 

    3.游戏源码: 

    4.程序优化:

    🎈优化后源码: 

    结论: 


    引言:

    猜数字游戏是一种非常经典的小游戏,通过让玩家猜一个随机生成的数字来测试其智力和运气。在本篇博客中,博主将通过详细的代码示例来介绍如何使用C语言实现一个简单的猜数字游戏,帮助小伙伴们更好的理解和掌握C语言的基本语法和逻辑控制结构。

    1.程序思路: 

    猜数字游戏的基本思路是:

    1. 程序随机生成一个1~100之间的数
    2. 玩家通过输入猜测的数字来猜测这个数字
    3. 如果猜小了,就告诉你猜小了
    4. 如果猜大了,就告诉你猜大了
    5. 如果猜对了,那就恭喜你,游戏结束

    2.代码实现:

    2.1.生成游戏菜单:

    给这个游戏设置一个菜单,玩家选择1为开始游戏,选择0为退出游戏。

    1. void menu()
    2. {
    3. printf("********************\n");
    4. printf("**** 1.play ****\n");
    5. printf("**** 0.exit ****\n");
    6. printf("********************\n");
    7. }

    效果显示:

    2.2.构建主函数框架: 

    我们希望一盘游戏结束后不过瘾,还可以继续玩,这时候就可以使用do-while循环。然后用switch语句控制继续游戏还是退出游戏,写到这儿我们可以简单测试一下,看我们的代码有没有问题。

    1. int main()
    2. {
    3. int input = 0;
    4. do
    5. {
    6. menu();
    7. printf("请选择(1/0):>");
    8. scanf("%d", &input);
    9. switch (input)
    10. {
    11. case 1:
    12. printf("猜数字!\n");
    13. break;
    14. case 0:
    15. printf("退出游戏!\n");
    16. break;
    17. default:
    18. printf("选择错误,重新选择!\n");
    19. break;
    20. }
    21. } while (input);
    22. return 0;
    23. }

    2.3.构建游戏函数: 

     如果测试没有问题,就可以继续实现里边的细节。接下来我们可以在“猜数字”这儿简单封装一个game()函数,将玩游戏的逻辑包含在里边,回头再在主函数里边调用。我们C语言里边提供了一个生成随机数的函数,叫rand(),它的返回值其实就是一个随机数。感兴趣的伙伴可以在cplusplus网站了解一下它的基本用法,但是如果我们只是这样写出来,却会发现它每次生成的随机数都是一样的,如下图所示:

    如果这样,那这个游戏玩起来可就没意思了,那怎么样才能让它每次生成的随机数都不一样呢,接下来我们可以一起来了解一下这个rand()函数:

    • 首先,rand()函数生成的数都是伪随机数(即不是真正的随机数),rand()函数是通过某种算法生成的随机数,所以说这个随机数就不够随机。
    • 其次,rand()函数生成的随机数范围是:0~RAND_MAX(32767)
    • rand()函数在生成随机数之前,要使用srand()函数设置随机数的生成器。

    🎈一旦srand()函数设置的种子数固定了,那我们生成的随机数就成固定的了。

    • 反之,如果我们设置srand()函数的种子数不一样,那么生成的随机数就会不一样。
    • 那怎样设置一个随机数的种子呢,其实很简单,只要传进去一个时刻在发生变化的值,那我们的随机数就生成了 。
    • 我们知道,计算机上面的时间在时刻发生变化,如果我们能把这个值给它传进去,随机数不就生成了吗。
    • 这里,我们就要用到time()函数,它可以返回一个时间戳(顾名思义就是一个数字,可以转换成时间),只要时间在变化,那我们的时间戳就在变化,到这里,我们的game()函数就封装完成了。
    1. void game()
    2. {
    3. //1.生成1~100的随机数
    4. int ret = rand() % 100 + 1;
    5. printf("%d\n", ret);
    6. //2.猜数字
    7. int guess = 0;
    8. while (1)
    9. {
    10. printf("请猜数字:>");
    11. scanf("%d", &guess);
    12. if (guess > ret)
    13. printf("猜大了,请继续猜!\n");
    14. else if (guess < ret)
    15. printf("猜小了,请继续猜!\n");
    16. else
    17. {
    18. printf("恭喜你,猜对了!\n");
    19. break;
    20. }
    21. }
    22. }

    🎈游戏效果:

    3.游戏源码: 

    🎈附上游戏源码:

    1. #include
    2. #include
    3. #include
    4. void menu()
    5. {
    6. printf("********************\n");
    7. printf("**** 1.play ****\n");
    8. printf("**** 0.exit ****\n");
    9. printf("********************\n");
    10. }
    11. void game()
    12. {
    13. //1.生成1~100的随机数
    14. int ret = rand() % 100 + 1;//生成1~100之间的整数
    15. printf("%d\n", ret);
    16. //2.猜数字
    17. int guess = 0;//存储玩家猜测的数字
    18. while (1)
    19. {
    20. printf("请猜数字:>");
    21. scanf("%d", &guess);
    22. if (guess > ret)
    23. printf("猜大了,请继续猜!\n");
    24. else if (guess < ret)
    25. printf("猜小了,请继续猜!\n");
    26. else
    27. {
    28. printf("恭喜你,猜对了!\n");
    29. break;
    30. }
    31. }
    32. }
    33. int main()
    34. {
    35. int input = 0;
    36. srand((unsigned int)time(NULL));//初始化随机数种子
    37. do
    38. {
    39. menu();
    40. printf("请选择(1/0):>");
    41. scanf("%d", &input);
    42. switch (input)
    43. {
    44. case 1:
    45. game();
    46. break;
    47. case 0:
    48. printf("退出游戏!\n");
    49. break;
    50. default:
    51. printf("选择错误,重新选择!\n");
    52. break;
    53. }
    54. } while (input);
    55. return 0;
    56. }

    4.程序优化:

    上面的程序虽然可以实现猜数字游戏的基本功能,但还有一些可以优化的地方,如下:

    1. 在程序中添加错误处理机制,防止玩家输入非法字符或超出范围的数字。
    2. 增加可玩性,例如添加计时功能记录最高分等。
    3. 优化代码结构,使程序更加简洁,易读。

    🎈优化后源码: 

    1. #include
    2. #include
    3. #include
    4. #define MAX_NUM 100//最大数字
    5. #define MIN_NUM 1//最小数字
    6. #define MAX_TRIES 10//最大猜测次数
    7. int main()
    8. {
    9. int guess, tries = 0;
    10. srand((unsigned int)time(NULL)); // 初始化随机数种子
    11. int num = rand() % MAX_NUM + MIN_NUM; // 生成随机数
    12. printf("欢迎来到猜数字游戏!\n");
    13. printf("你需要在%d次之内猜出1~%d之间的一个数字。\n", MAX_TRIES, MAX_NUM);
    14. do
    15. {
    16. printf("请输入一个1~100之间的整数:");
    17. if (scanf("%d", &guess) != 1)
    18. {
    19. printf("输入错误,请输入一个整数!\n");
    20. fflush(stdin); // 清空输入缓冲区
    21. continue;
    22. }
    23. if (guess < MIN_NUM || guess > MAX_NUM)
    24. {
    25. printf("输入错误,请输入一个1~100之间的整数!\n");
    26. continue;
    27. }
    28. tries++;
    29. if (guess > num)
    30. {
    31. printf("猜大了,请继续猜!\n");
    32. }
    33. else if (guess < num)
    34. {
    35. printf("猜小了,请继续猜!\n");
    36. }
    37. } while (guess != num && tries < MAX_TRIES);
    38. if (guess == num)
    39. {
    40. printf("恭喜你,猜对了!\n");
    41. printf("你用了%d次猜出了这个数字。\n", tries);
    42. }
    43. else
    44. {
    45. printf("很遗憾,你没有在%d次之内猜对这个数字。\n", MAX_TRIES);
    46. printf("这个数字是%d。\n", num);
    47. }
    48. return 0;
    49. }
    • 在上面的程序中,我们首先使用定义定义了一些常量,例如最大数字、最小数字、最大猜测次数等。
    • 然后,我们在程序开始时输出欢迎信息和游戏规则。
    • 在玩家猜测数字的过程中,我们使用了一些错误处理机制,例如使用scanf函数读取输入时检查返回值,以确保输入的是一个整数;使用fflush函数清空输入缓冲区,以避免输入错误的字符导致程序崩溃;使用continue语句跳过错误输入,以便玩家重新输入正确的数字。
    • 最后,我们在游戏结束时输出相应的提示信息,并记录玩家猜测的次数和随机数字的值。 

    🎈效果如下:

    结语: 

    猜数字游戏是一种非常有趣的小游戏,通过实现一个简单的猜数字游戏程序,我们可以更好地理解和掌握C语言的基本语法和逻辑控制结构。在实际开发中,我们可以根据具体的需求和场景,对程序进行优化和扩展,以提高游戏的可玩性和用户体验。希望本篇博客能够帮助大家更好地学习和应用C语言,我们下期再见。

  • 相关阅读:
    阿里云 Serverless 异步任务处理系统在数据分析领域的应用
    [附源码]计算机毕业设计springboot疫情物资管理系统
    字符串(字符数组)的各种操作功能
    【Python画图】Matplotlib中fig、ax、plt的区别及其用法(入门)
    基于 Delphi 的前后端分离:之二
    什么是跨域?什么是同源策略?如何解决Ajax跨域问题?什么是JSONP?JSONP怎么请求数据?什么是Proxy?Proxy怎么请求数据?
    MetaGPT day06 Environment组件源码 多智能体辩论
    框架的概念
    ZFS文件系统预研资料
    OpenCV结构分析与形状描述符(23)确定一个点是否位于多边形内的函数pointPolygonTest()的使用
  • 原文地址:https://blog.csdn.net/weixin_65931202/article/details/132796459