经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » C 语言 » 查看文章
C语言实现纸牌游戏之小猫钓鱼算法
来源:jb51  时间:2019/1/16 9:29:14  对本文有异议

本文实例为大家分享了C语言实现小猫钓鱼算法的具体代码,供大家参考,具体内容如下

星期天小哼和小哈约在一起玩桌游,他们正在玩一个非常古怪的扑克游戏——“小猫钓鱼”。游戏的规则是这样的:将一副扑克牌平均分成两份,每人拿一份。小哼先拿出手中的第一张扑克牌放在桌上,然后小哈也拿出手中的第一张扑克牌,并放在小哼刚打出的扑克牌的上面,就像这样两人交替出牌。出牌时,如果某人打出的牌与桌上某张牌的牌面相同,即可将两张相同的牌及其中间所夹的牌全部取走,并依次放到自己手中牌的末尾。当任意一人手中的牌全部出完时,游戏结束,对手获胜。(用两个队列和一个栈完成)

代码如下:

  1. #define _CRT_SECURE_NO_WARNINGS 1
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. /*
  5. * 游戏规则是这样的,将一副扑克牌平均分成两份,每人拿一份。小哼先拿出手中的第一张扑克牌放桌上,然后小哈也拿出手中的第一张扑克牌,并放在小哼刚打出的扑克牌的上面,就像这样两个人交替出牌。出牌时,如果某人打出的牌与桌上某张牌的牌面相同,即可将两张相同的牌及中间的牌全部拿走,并依次放到自己手中的牌的末尾。当任意一个人手上的牌全部打完时,另一个人获胜
  6. * 郭文峰
  7. * 2018/9/29
  8. */
  9. struct queue
  10. {
  11. int data[1000];
  12. int head;
  13. int tail;
  14. };
  15. struct stack
  16. {
  17. int data[10];
  18. int top;
  19. };
  20. int main(void)
  21. {
  22. struct queue q1, q2;
  23. struct stack s;
  24. int i = 0;
  25. int t = 0;
  26. int book[10];
  27. //初始化队列
  28. q1.head = 1;
  29. q1.tail = 1;
  30. q2.head = 1;
  31. q2.tail = 1;
  32. //初始化栈
  33. s.top = 0;
  34. for (i = 0; i < 10; i++)
  35. {
  36. book[i] = 0;
  37. }
  38. //依次向队列插入6个数
  39. //给小哼6张牌
  40. for (i = 1; i <= 6; i++)
  41. {
  42. scanf("%d", &q1.data[q1.tail]);
  43. q1.tail++;
  44. }
  45. //依次向队列插入6个数
  46. //给小哈6张牌
  47. for (i = 1; i <= 6; i++)
  48. {
  49. scanf("%d", &q2.data[q2.tail]);
  50. q2.tail++;
  51. }
  52. //当队列不为空的时候执行循环
  53. while (q1.head < q1.tail && q2.head < q2.tail)
  54. {
  55. t = q1.data[q1.head];//小哼出一张牌
  56. //判断小哼打出的牌是否能赢
  57. if (book[t] == 0)//表明桌上没有牌面为t 的牌
  58. {
  59. q1.head++;
  60. s.top++;
  61. s.data[s.top] = t;
  62. book[t] = 1;
  63. }
  64. else
  65. {
  66. q1.head++;
  67. q1.data[q1.tail] = t;
  68. q1.tail++;
  69. while (s.data[s.top] != t)
  70. {
  71. book[s.data[s.top]] = 0;
  72. q1.data[q1.tail] = s.data[s.top];
  73. q1.tail++;
  74. s.top--;
  75. }
  76. }
  77. t = q2.data[q2.head];//小哈出一张牌
  78. //判断小哈打出的牌是否能赢
  79. if (book[t] == 0)//表明桌上没有牌面为t 的牌
  80. {
  81. q2.head++;
  82. s.top++;
  83. s.data[s.top] = t;
  84. book[t] = 1;
  85. }
  86. else
  87. {
  88. q2.head++;
  89. q2.data[q2.tail] = t;
  90. q2.tail++;
  91. while (s.data[s.top] != t)
  92. {
  93. book[s.data[s.top]] = 0;
  94. q2.data[q2.tail] = s.data[s.top];
  95. q2.tail++;
  96. s.top--;
  97. }
  98. }
  99. }
  100. if (q2.head == q2.tail)
  101. {
  102. printf("小哼WIN\n");
  103. printf("小哼手上还剩的牌为:");
  104. for (i = q1.head; i <= q1.tail - 1; i++)
  105. {
  106. printf(" %d", q1.data[i]);
  107. }
  108. if (s.top > 0)
  109. {
  110. printf("\n桌上的牌是:");
  111. for (i = 1; i <= s.top; i++)
  112. {
  113. printf(" %d", s.data[i]);
  114. }
  115. }
  116. else
  117. {
  118. printf("桌上没有牌了!\n");
  119. }
  120. }
  121. else
  122. {
  123. printf("小哈WIN\n");
  124. printf("小哈手上还剩的牌为:");
  125. for (i = q2.head; i <= q2.tail - 1; i++)
  126. {
  127. printf(" %d", q2.data[i]);
  128. }
  129. if (s.top > 0)
  130. {
  131. printf("\n桌上的牌是:");
  132. for (i = 1; i <= s.top; i++)
  133. {
  134. printf(" %d", s.data[i]);
  135. }
  136. }
  137. else
  138. {
  139. printf("桌上没有牌了!\n");
  140. }
  141. }
  142. system("pause");
  143. return 0;
  144. }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持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号