• C++ 游戏:转杯子猜球位置 2


    根据试验,发现C++ 转杯子猜球位置 游戏有BUG。


    BUG 1:当输入杯子个数较大时,会导致输出出现问题。

    BUG 1 原因:窗口太小,输出太多时会导致换行输出。

    BUG 1 解决方案:将控制台的大小进行调整,使其大小合理,不仅增加了美观性,还让 BUG 1 得以解决 


    BUG 2:上程序输入难度虽然超过20,但程序会自动把他设为20,就会让别人非常嚣张。

    BUG 2 原因:当杯子数量多时,移动距离变长,时间也会变长,导致猜位置变得更简单。

    BUG 2 解决方案:针对这个情况,我研发了一个新的功能,在这里先保密,如有想知道者,请自己编译程序并运行。



    下面是 转杯子猜球位置 2 完整代码

    1. #include
    2. #include
    3. using namespace std;
    4. char a[50][50]={"------",
    5. "| |",
    6. "| |",
    7. "| |",
    8. "------"};
    9. int c,n=10,kl,sudu;
    10. bool k[200]={0,1,0,0};
    11. using namespace std;
    12. void color(int x)
    13. {
    14. switch(x)
    15. {
    16. case 1:SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY |FOREGROUND_RED );break;
    17. case 2:SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY |FOREGROUND_BLUE );break;
    18. case 3:SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY |FOREGROUND_GREEN);break;
    19. case 4:SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY |FOREGROUND_RED |FOREGROUND_BLUE );break;
    20. case 5:SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY |FOREGROUND_RED |FOREGROUND_GREEN);break;
    21. case 6:SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY |FOREGROUND_BLUE |FOREGROUND_GREEN);break;
    22. case 7:SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY |FOREGROUND_GREEN|FOREGROUND_BLUE |FOREGROUND_RED);break;
    23. default:SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY |FOREGROUND_GREEN|FOREGROUND_BLUE |FOREGROUND_RED);break;
    24. }
    25. }
    26. void cls()
    27. {
    28. system ("cls");
    29. }
    30. void xy(int y,int x)
    31. {
    32. COORD coord;
    33. coord.X=x;
    34. coord.Y=y;
    35. HANDLE a=GetStdHandle(STD_OUTPUT_HANDLE);
    36. SetConsoleCursorPosition(a,coord);
    37. }
    38. void out(int x,int y,bool t)
    39. {
    40. if (kl)
    41. color(rand()%7+1);
    42. if (t)
    43. for (int i=0;i<5;i++,x++)
    44. {
    45. xy(x,y);
    46. for (int j=0;j<6;j++)
    47. cout <
    48. }
    49. else
    50. for (int i=0;i<5;i++,x++)
    51. {
    52. xy(x,y);
    53. for (int j=0;j<6;j++)
    54. cout <<" ";
    55. }
    56. }
    57. void yuan()
    58. {
    59. for (int i=1;i<=n;i++)
    60. out (8,12*i-3,1);
    61. }
    62. void dong()
    63. {
    64. int a,b,i,t;
    65. a=rand()%n+1;
    66. do
    67. b=rand()%n+1;
    68. while (b==a);
    69. t=abs(12*a-12*b);
    70. swap (k[a],k[b]);
    71. out (8,12*a-3,0);
    72. out (8,12*b-3,0);
    73. for (i=7;i>=1;i--)
    74. {
    75. out (i,12*a-3,1);
    76. out (16-i,12*b-3,1);
    77. Sleep (sudu);
    78. out (i,12*a-3,0);
    79. out (16-i,12*b-3,0);
    80. }
    81. if (a>b)
    82. for (i=1;i<=t;i++)
    83. {
    84. out (1,a*12-3-i,1);
    85. out (15,b*12-3+i,1);
    86. Sleep (sudu);
    87. out (1,a*12-3-i,0);
    88. out (15,b*12-3+i,0);
    89. }
    90. else
    91. for (i=1;i<=t;i++)
    92. {
    93. out (15,b*12-3-i,1);
    94. out (1,a*12-3+i,1);
    95. Sleep (sudu);
    96. out (15,b*12-3-i,0);
    97. out (1,a*12-3+i,0);
    98. }
    99. for (i=1;i<=7;i++)
    100. {
    101. out (16-i,12*a-3,1);
    102. out (i,12*b-3,1);
    103. Sleep (sudu);
    104. out (16-i,12*a-3,0);
    105. out (i,12*b-3,0);
    106. }
    107. yuan();
    108. }
    109. int main()
    110. {
    111. system("mode con cols=130 lines=28");
    112. srand(int (0));
    113. int in,d;
    114. xy(0,5); cout <<"转杯子猜球:请选择难度星级:1 ~ 20 ( 1 最简单 ,20 最难,难度超过20会有惊喜呦,嘿嘿嘿)";
    115. xy(1,5); cin >>in;
    116. if (in<1) in=1;
    117. if (in>20) in=20,kl=1;
    118. Sleep (500);
    119. cls();
    120. xy(0,5); cout <<"转杯子猜球:请选择杯子个数:3 ~ 10";
    121. xy(1,5);
    122. cin >>n;
    123. if (n<3) n=3;
    124. if (n>10) n=10;
    125. sudu=round(20/n)-round(in/n);
    126. cls();
    127. yuan();
    128. for (int i=1;i<=7;i++)
    129. {
    130. xy(i,11); cout <<"○";
    131. Sleep (100);
    132. xy(i,11); cout <<" ";
    133. }
    134. for (int i=1;i<=c;i++)
    135. dong();
    136. xy(20,20);
    137. cout <<"转完了,请问球在哪个杯子里呢?";
    138. xy(22,20);
    139. cin >>in;
    140. for (int i=1;i<=n;i++)
    141. if (k[i])
    142. {
    143. d=i;
    144. break;
    145. }
    146. xy(24,20);
    147. if (in==d)
    148. cout <<"恭喜你猜对了!!";
    149. else
    150. cout <<"很遗憾,正确答案是" <
    151. Sleep(1000);
    152. xy(30,100);
    153. return 0;
    154. }

    变量的名字有点奇怪,因为我是乱打的,请见谅。


    主要思路:

    做一大堆自定义函数,然后再将它们结合起来。


    1、xy 函数:改变输出坐标,详见:C++ 如何改变输入输出光标的位置

    2、yuan 函数:将杯子设为初始状态

    3、cls 函数:等于 system ("cls") ;

    4、color 函数:此函数可用于特殊情况,解决 BUG 2。

    5、dong 函数:最重要的函数,用来制造杯子移动的动画效果。


    终于打完了!

  • 相关阅读:
    memmove函数详解 看这一篇就够了-C语言(函数讲解、函数实现、使用用法举例、作用、自己实现函数 )
    测试八股文-单元测试框架
    SpringBoot集成Swagger的使用
    在 Streamlit 中使用自定义 CSS 创建加密仪表板
    JAVA泛型实现原理
    C++11delete与default
    限流的简单实现
    另辟蹊径者 PoseiSwap:背靠潜力叙事,构建 DeFi 理想国
    ProtoPie for Mac(高保真交互原型设计工具)
    C#中的四种类型转换
  • 原文地址:https://blog.csdn.net/DUXS11/article/details/126556343