• C语言实现《猜数字游戏》


    目录

    前言:

    (一)制作菜单:

    1.关于菜单

    2.编写菜单:

    3.调用菜单并选择:

    (二)进行游戏:

    1.为什么在这里要调用函数?

    2.game()函数的实现

    3.关于随机数:

    srand函数:

    总代码:

    总结:


    前言:

    我们都知道,对于制作游戏,甚至说对于游戏开发,在市面上我们偏向采取运用C++来实现代码运作功能以及交互模块,并且运用类似easy_X等图形库来实现人物对象的塑造。为什么更愿意使用C++制作开发游戏而不是运用C语言或者C#等语言来制作游戏呢,其本质还是属C++是一门面向对象的开发语言,其对于对象的封装和实例化有着比C语言和C#更高效的方法,更高效的制作,这对于开发成本有着显著的下降。

    而今天实现的《猜数字游戏》,可以不需要运用对象的封装和实例,就可以基本实现。并不是说C语言只能制作诸如此类这些简单游戏,而是借用《猜数字游戏》可以引用到游戏中的基本元素,对以后的游戏开发可以高效简洁的实现,让玩家一目了然,玩得尽兴。

    关于猜数字游戏先解释标准规则,再介绍几种变体。

    通常由两个人玩,一方出数字,一方猜。出数字的人要想好一个没有重复数字的4个数,不能让猜的人知道。猜的人就可以开始猜。每猜一个数字,出数者就要根据这个数字给出几A几B,其中A前面的数字表示位置正确的数的个数,而B前的数字表示数字正确而位置不对的数的个数。

    而今天的猜数字游戏,我们以一种更简单的方法来玩。

    系统给定一个1——100的数字,玩家来随机猜任何一个1——100以内的数,系统判断是否匹配,如果猜的数大于,就打印“大了”,如果小了,就打印“下了”,如果正确,就打印“正确”。

    (一)制作菜单:

    1.关于菜单

    对于每一个游戏,我们都不会一上来就给玩家呈现游戏内容,而是给玩家提供菜单,一般包括:

    “开始新游戏”、“读取存档”、“选项”还有“退出游戏”,可能还会加上介绍制作游戏的团队名称以及团队成员。因此,提供一份简洁高效的菜单是必不可少的。

    2.编写菜单:

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

    以上是运用C语言实现的最简单的菜单打印,包含“玩游戏”的实现,以及“退出游戏”的代码实现,以我的观点来看,我认为一个最基本的菜单,务必要实现“开始游戏”“退出游戏”两个模块,这样可供玩家选择什么时候开始游戏,当玩完后可以选择直接退出游戏。

    但是这仅仅只是一个函数的实现,那在主函数里我们应该如何调用这个菜单函数呢?

    3.调用菜单并选择:

    在主函数里,我们可以先创建一个input变量,这个input变量可以用来输入1或者0,当输入0时我们退出游戏,输入1时我们开始游戏。因此在这里,我们可以选择do..while循环和switch语句来帮助我们实现调用菜单并选择。

    1. #include
    2. int main()
    3. {
    4. int input = 0;
    5. menu();
    6. do
    7. {
    8. printf("请选择:");
    9. scanf("%d", &input);
    10. switch (input)
    11. {
    12. case 0 :
    13. printf("\n正在离开游戏....\n");
    14. break;
    15. case 1:
    16. printf("\n猜数字...\n");
    17. game();
    18. break;
    19. default:
    20. printf("\n请重新输入...\n");
    21. }
    22. } while (input);
    23. return 0;
    24. }

    以上是我们在main函数里实现调用菜单函数以及选择语句。

    现在我们可以看到,为什么在菜单里面我们用输入0来表示退出游戏,而不是用2、3、4等来接收,因为当我们把input输入为0时,switch语句就会自动结束,而do...while循环也会就此结束。

    (二)进行游戏:

    1. case 1:
    2.             printf("\n猜数字...\n");
    3.             game();
    4.             break;

    我们在case 1语句中,调用了一个game()函数,我们在对于这么简单的游戏操作,为什么我们不直接在main函数里面实现代码操作,而是另开一个函数去调用呢?这样多出几行代码,不会更复杂吗?

    1.为什么在这里要调用函数

    如果我们直接在main函数里面实现全部代码过程,这样会使得我们的代码冗杂,代码健壮性低,而如果我们使用函数,就可以将main函数里的代码量进行缩短,在我们以后想要执行命令时,就可以直接调用函数,这样就不会再写一次,将代码变得冗长。

    2.game()函数的实现

    1. void game()
    2. {
    3. int n = 0;
    4. printf("请输入你要猜的数字:");
    5. int num = rand() % 100;
    6. int count = 1;
    7. while (1)
    8. {
    9. scanf("%d", &n);
    10. if (num > n)
    11. {
    12. printf("小了\n");
    13. }
    14. else if (num < n)
    15. {
    16. printf("大了\n");
    17. }
    18. else
    19. {
    20. printf("猜对了!!!\n");
    21. if (count <= 5)
    22. {
    23. printf("\n用了%d次就猜对了,真厉害!\n", count);
    24. }
    25. else
    26. {
    27. printf("\n菜\n");
    28. }
    29. break;
    30. }
    31. count++;
    32. }
    33. }

    以上就是game()函数所实现的内容,在while(1)的死循环中实现猜数字游戏,这样猜错了就可以一直猜一直猜。而运用if条件语句实现这个代码的底层逻辑,“如果大了”就打印大了,“如果小了”就打印小了,“如果相等”就打印猜对了。

    3.关于随机数:

    随机数rand()是C语言库里面自带的一个生成随机数的库函数,但是在这里我们要生成100以内的随机数,因此我们将rand()%100,这样就可以实现100以内的数了。

    我们都知道,如果我们只是引用rand()函数,这样是可以产生随机数,但是我们产生的随机数是固定的,这样我们就知道计算机产生的“随机数”了。所以我们利用一个时时刻刻发生变化的量,就可以彻彻底底的解决随机数这个问题了。

    srand函数

    以上是srand的定义,“Initialize random number generator”的意思是“初始化随机数生成值”。

    srand()用来设置rand()产生随机数时的随机数种子。参数seed必须是个整数,通常可以利用time(0)的返回值或NULL来当做seed。如果每次seed都设相同值,rand()所产生的随机数值每次就会一样。"相同的种子对应相同的数值"。

    所以我们在这里引入了一个概念——————时间戳(time())

    我们利用时间函数time()来计算时间和秒数。

    此函数会返回从公元 1970 年1 月1 日的UTC 时间从0 时0 分0 秒算起到现在所经过的秒数。如果t 并非空指针的话,此函数也会将返回值存到t 指针所指的内存。

    所以就有了以下的代码

    	srand((unsigned int)time(NULL));

    将这串代码放在main函数里,还应当包含头文件。

    1. #include
    2. #include

    这样生产的随机数,才是真正的随机数。

    总代码:

    1. #define _CRT_SECURE_NO_WARNINGS 1
    2. #include
    3. #include
    4. #include
    5. void game()
    6. {
    7. int n = 0;
    8. printf("请输入你要猜的数字:");
    9. int num = rand() % 100;
    10. int count = 1;
    11. while (1)
    12. {
    13. scanf("%d", &n);
    14. if (num > n)
    15. {
    16. printf("小了\n");
    17. }
    18. else if (num < n)
    19. {
    20. printf("大了\n");
    21. }
    22. else
    23. {
    24. printf("猜对了!!!\n");
    25. if (count <= 5)
    26. {
    27. printf("\n用了%d次就猜对了,真厉害!\n", count);
    28. }
    29. else
    30. {
    31. printf("\n菜\n");
    32. }
    33. break;
    34. }
    35. count++;
    36. }
    37. }
    38. void menu()
    39. {
    40. printf("****************************\n");
    41. printf("********* 1.PLAY ***********\n");
    42. printf("********* 0.EXIT ***********\n");
    43. printf("****************************\n");
    44. }
    45. int main()
    46. {
    47. int input = 0;
    48. menu();
    49. srand((unsigned int)time(NULL));
    50. do
    51. {
    52. printf("请选择:");
    53. scanf("%d", &input);
    54. switch (input)
    55. {
    56. case 0 :
    57. printf("\n正在离开游戏....\n");
    58. break;
    59. case 1:
    60. printf("\n猜数字...\n");
    61. game();
    62. break;
    63. default:
    64. printf("\n请重新输入...\n");
    65. }
    66. } while (input);
    67. return 0;
    68. }

    总结:

    对于猜数字游戏,我们首先应当打印菜单,并且要用函数的方式实现菜单的打印,并利用do...while循环和switch语句来实现菜单的选择。

    在生成随机数方面,要用到srand((unsigned int) time(NULL));

    还要记得包含头文件。

    以上就是怎样运用C语言实现《猜数字游戏》的全过程。

  • 相关阅读:
    数据库相关基础知识
    SPEC CPU2006 Benchmark Descriptions
    Retrofit解密:接口请求是如何适配suspend协程?
    shell学习脚本04(小滴课堂)
    【数值计算】基于四阶Runge-Kutta方法实现Mackey_Glass混沌时间序列生成以及相位时差的绘制附matlab代码
    React报错之Expected `onClick` listener to be a function
    亚马逊鲲鹏系统六大优势
    Android Glide, first start based on loadThumbnail, Kotlin(一)
    绘制花朵-第13届蓝桥杯Scratch选拔赛真题精选
    day06_菜单管理(查询菜单,添加菜单,添加子菜单,修改菜单,删除菜单,角色分配菜单,查询菜单,保存菜单,动态菜单)
  • 原文地址:https://blog.csdn.net/weixin_72917087/article/details/132630507