经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » C 语言 » 查看文章
C语言实现24点游戏计算器的示例代码
来源:jb51  时间:2022/8/22 14:54:47  对本文有异议

前言

24点游戏计算器的规则如下

24点是一种益智游戏,24点是把4个整数(一般是正整数)通过加减乘除以及括号运算,使最后的计算结果是24的一个数学游戏,24点可以考验人的智力和数学敏感性,它能在游戏中提高人们的心算能力。

24点通常是使用扑克牌来进行游戏的,一副牌中抽去大小王后还剩下52张(如果初练也可只用1~10这40张牌),任意抽取4张牌(称为牌组),用加、减、乘、除(可加括号)把牌面上的数算成24。每张牌必须只能用一次,如抽出的牌是3、8、8、9,那么算式为(9-8)×8×3或3×8÷(9-8)或(9-8÷8)×3等。

一、项目的创建标

1、选择项目

打开VS2019,点击创建新项目-》然后选择如下如图所示的选项创建C语言项目

2、输入项目名称和路径

3、创建头文件Main.h、PointGame.h和源文件Main.c、PointGame.c如下所示

二、项目的编写

1、Main.h头文件的编写

  1. #pragma once
  2.  
  3. #include <stdio.h>
  4. #include <stdlib.h>

2、PointGame.h头文件的编写

  1. #pragma once
  2.  
  3. #include <stdbool.h>
  4. #include <math.h>
  5.  
  6. #define PRECISION 1E-6
  7. #define TARGET 24
  8. #define SIZE 4
  9.  
  10. /*
  11. * 最终表达式由四个数、括号、运算符组成,其大小不会超过
  12. * 5 * (SIZE - 1) + SIZE * 2 + 1
  13. */
  14.  
  15.  
  16. typedef struct card
  17. {
  18. double value;
  19. char expression[5 * (SIZE - 1) + SIZE * 2 + 1];
  20. } Card, *pCard;
  21.  
  22. bool game24(pCard card, int size);
  23.  

3、PointGame.c源文件的编写

  1. #define _CRT_SECURE_NO_WARNINGS
  2.  
  3. #include "Main.h"
  4. #include "PointGame.h"
  5.  
  6. /*
  7. * 牌堆中计算24点
  8. * card 牌堆
  9. * size 个数
  10. */
  11. bool game24(pCard card, int size)
  12. {
  13. Card stack[3];
  14. /*
  15. * 如果牌堆里只有一张牌,判断是否就是需要的目标
  16. */
  17. if (size == 1)
  18. {
  19. if (fabs(card[0].value - TARGET) < PRECISION)
  20. {
  21. printf("%d = %s\n", TARGET, card[0].expression);
  22. return true;
  23. }
  24. else
  25. {
  26. return false;
  27. }
  28. }
  29. /*
  30. *从牌堆中任选两张牌
  31. */
  32. int m, n, i, t;
  33. for (m = 0; m < size - 1; m++)
  34. {
  35. for (n = m + 1; n < size; n++)
  36. {
  37. /*
  38. * 剩余的牌放入新牌堆
  39. */
  40. t = 0;
  41. for (i = 0; i < size; i++)
  42. {
  43. if (i != m && i != n)
  44. {
  45. stack[t].value = card[i].value;
  46. sprintf(stack[t].expression, "%s", card[i].expression);
  47. t++;
  48. }
  49. }
  50. /*
  51. * 选中两张牌的和放入新牌堆
  52. */
  53. stack[size - 2].value = card[m].value + card[n].value;
  54. sprintf(stack[size - 2].expression, "(%s + %s)", card[m].expression, card[n].expression);
  55.  
  56. if (game24(stack, size - 1))
  57. {
  58. return true;
  59. }
  60. /*
  61. * 选中两张牌的差放入新牌堆
  62. */
  63. if (card[m].value > card[n].value)
  64. {
  65. stack[size - 2].value = card[m].value - card[n].value;
  66. sprintf(stack[size - 2].expression, "(%s - %s)", card[m].expression, card[n].expression);
  67. }
  68. else
  69. {
  70. stack[size - 2].value = card[n].value - card[m].value;
  71. sprintf(stack[size - 2].expression, "(%s - %s)", card[n].expression, card[m].expression);
  72. }
  73.  
  74. if (game24(stack, size - 1))
  75. {
  76. return true;
  77. }
  78.  
  79. /*
  80. * 选中两张牌的积放入新牌堆
  81. */
  82. stack[size - 2].value = card[m].value * card[n].value;
  83. sprintf(stack[size - 2].expression, "%s * %s", card[m].expression, card[n].expression);
  84.  
  85. if (game24(stack, size - 1))
  86. {
  87. return true;
  88. }
  89.  
  90. /*
  91. * 选中两张牌的商放入新牌堆
  92. */
  93. if (card[m].value != 0)
  94. {
  95. stack[size - 2].value = card[n].value / card[m].value;
  96. sprintf(stack[size - 2].expression, "%s / %s", card[n].expression, card[m].expression);
  97.  
  98. if (game24(stack, size - 1))
  99. {
  100. return true;
  101. }
  102. }
  103.  
  104. if (card[n].value != 0)
  105. {
  106. stack[size - 2].value = card[m].value / card[n].value;
  107. sprintf(stack[size - 2].expression, "%s / %s", card[m].expression, card[n].expression);
  108.  
  109. if (game24(stack, size - 1))
  110. {
  111. return true;
  112. }
  113. }
  114. }
  115. }
  116. return false;
  117. }

4、Main.c源文件的编写

  1. #define _CRT_SECURE_NO_WARNINGS
  2.  
  3. #include "Main.h"
  4. #include "PointGame.h"
  5.  
  6.  
  7.  
  8. int main()
  9. {
  10. system("color 3E");
  11.  
  12. int i, poke;
  13. Card card[SIZE];
  14.  
  15. printf("请输入4个数字 以判断解法:");
  16. for (i = 0; i < SIZE; i++)
  17. {
  18. scanf("%d", &poke);
  19. card[i].value = (double)poke;
  20. sprintf(card[i].expression, "%d", poke);
  21. }
  22.  
  23. if (game24(card, SIZE))
  24. {
  25. printf("Done\n");
  26. }
  27. else
  28. {
  29. printf("No Answer\n");
  30. }
  31.  
  32. system("pause");
  33. return 0;
  34. }

三、项目的调试结果

选择生成----》生成解决方案。

结果如下

按F5调试结果如下所示

到此这篇关于C语言实现24点游戏计算器的示例代码的文章就介绍到这了,更多相关C语言24点游戏内容请搜索w3xue以前的文章或继续浏览下面的相关文章希望大家以后多多支持w3xue!

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号