当前位置:   article > 正文

用C++做一个贪吃蛇小游戏(Dev-C++5.11亲测有用)_贪吃蛇dev

贪吃蛇dev

最近暑假外面很热,但是宅在家里总不能没事干吧?为了解闷,就写了一篇文章来解闷。

第一步,也就是最重要的一步:函数定义

我们先定义一下文字的颜色的函数:

  1. //更改颜色
  2. int color(int c)
  3. {
  4. SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), c);//更改文字颜色
  5. return 0;
  6. }

然后,让光标移到指定位置,(因为我有强迫症,不喜欢光标乱飞),我使用了WindowsAPI的结构。定位代码函数如下:

  1. //将光标移动到指定位置
  2. void gotoxy(HANDLE hout,int x,int y){
  3. //COORD是WindowsAPI中定义的一种结构,表示一个字符在控制台屏幕上的坐标
  4. COORD pos;
  5. pos.X=x;
  6. pos.Y=y;
  7. //SetConsoleCursorPosition是API中定位光标位置的函数。
  8. SetConsoleCursorPosition(hout,pos);
  9. }

之后,就可以开始创建一个贪吃蛇的开始界面了。

第二步:界面与外观

贪吃蛇总要有一个像样一点的界面吧,因为本作者是小学生,还不会用图形化库,所以我用了一个简单的字符输出来进行简单的界面创建。

  1. void cover (HANDLE hout);
  2. void explation(HANDLE hout)
  3. {
  4. int i,j=1;
  5. system("cls");
  6. color(13);
  7. gotoxy(hout,44,3);
  8. cout << "游戏说明";
  9. color(2);
  10. for(i=6;i<=22;i++)
  11. {
  12. for(j=20;j<=75;j++)
  13. {
  14. gotoxy(hout,j,i);
  15. if(i==6||i==22)cout << "=" ;
  16. else if(j==20||j==75)cout << "||";
  17. }
  18. }//游戏说明显示
  19. color(3);
  20. gotoxy(hout,25,8);
  21. cout << "1、不能穿墙,不能咬到自己" ;
  22. color(10);
  23. gotoxy(hout,25,11);
  24. cout << "2、用 ↑(W) ↓(S) ←(A) →(D)分别控制蛇的移动";
  25. color(14);
  26. gotoxy(hout,25,14);
  27. cout << "3、按任意键(除去ESC)暂停游戏,方向键继续";
  28. color(11);
  29. gotoxy(hout,25,17);
  30. cout << "4、ESC:自爆,游戏结束";
  31. color(4);
  32. getch();//按任意键返回主界面
  33. system("cls");
  34. cover (hout);
  35. }
  36. //游戏封面:蛇的形状
  37. void cover (HANDLE hout){
  38. gotoxy(hout,35,1);
  39. color(6);
  40. printf("/^\\/^\\");
  41. gotoxy(hout,34,2);
  42. printf("|_| o|");
  43. gotoxy(hout,33,2);
  44. color(2);
  45. printf("_");
  46. gotoxy(hout,25,3);
  47. color(12);
  48. printf("\\/");
  49. gotoxy(hout,31,3);
  50. color(2);
  51. printf("/");
  52. gotoxy(hout,37,3);
  53. color(6);
  54. printf("\\_/");
  55. gotoxy(hout,41,3);
  56. color(10);
  57. printf(" \\");
  58. gotoxy(hout,26,4);
  59. color(12);
  60. printf("\\____");
  61. gotoxy(hout,32,4);
  62. printf("_________");
  63. gotoxy(hout,31,4);
  64. color(2);
  65. printf("|");
  66. gotoxy(hout,43,4);
  67. color(10);
  68. printf("\\");
  69. gotoxy(hout,32,5);
  70. color(2);
  71. printf("\\_______");
  72. gotoxy(hout,44,5);
  73. color(10);
  74. printf("\\");
  75. gotoxy(hout,39,6);
  76. printf("| | \\");
  77. gotoxy(hout,38,7);
  78. printf("/ / \\");
  79. gotoxy(hout,37,8);
  80. printf("/ / \\ \\");
  81. gotoxy(hout,35,9);
  82. printf("/ / \\ \\");
  83. gotoxy(hout,34,10);
  84. printf(" / / \\ \\");
  85. gotoxy(hout,33,11);
  86. printf("/ / _----_ \\ \\");
  87. gotoxy(hout,32,12);
  88. printf("/ / _-~ ~-_ | |");
  89. gotoxy(hout,31,13);
  90. printf("( ( _-~ _--_ ~-_ _/ |");
  91. gotoxy(hout,32,14);
  92. printf("\\ ~-____-~ _-~ ~-_ ~-_-~ /");
  93. gotoxy(hout,33,15);
  94. printf("~-_ _-~ ~-_ _-~");
  95. gotoxy(hout,35,16);
  96. printf("~--____-~ ~-___-~");
  97. color(9);
  98. gotoxy(hout,43,18);
  99. color(11);
  100. cout << "贪吃蛇大作战";
  101. color(14);
  102. for(i=20;i<=26;i++){
  103. for(j=27;j<=74;j++)
  104. {
  105. gotoxy(hout,j,i);
  106. if(i==20||i==26)
  107. {
  108. cout << "-";
  109. }
  110. else if(j==27||j==74)
  111. {
  112. cout << "|";
  113. }
  114. }
  115. }
  116. color(12);//游戏选项,需要输入的内容
  117. gotoxy(hout,35,22);
  118. cout << "1.开始游戏";
  119. gotoxy(hout,55,22);
  120. cout << "2.游戏说明";
  121. gotoxy(hout,35,24);
  122. cout << "3.退出游戏";
  123. color(9);
  124. gotoxy(hout,framex+wide*2,framey+19);
  125. cout << "姓名:石佳成"; //可以改为你的姓名
  126. gotoxy(hout,framex+wide*2,framey+21);
  127. cout << "来自:悠悠点心圆科技集团";
  128. gotoxy(hout,framex+wide*2,framey+23);
  129. cout << "完成时间:2023年8月3日";//可以更改为现在创作时间
  130. gotoxy(hout,29,27);
  131. color(3);
  132. printf("做出你的选择:");
  133. color(14);
  134. int n;
  135. scanf("%d",&n);
  136. switch(n){
  137. case 1:
  138. system("cls");//清屏
  139. break;
  140. case 2:
  141. explation(hout);//开始游戏
  142. break;
  143. case 3:
  144. exit(0);//退出程序
  145. break;
  146. }
  147. }

如上代码块,我将游戏封面设为像cout一样的输出,这样会简单一点。顺便告诉你一下,“exit(0)”这个语句能退出程序,我不知道为什么,因为是在网上找的退出程序代码。有哪位大佬帮我解释解释一下?

第三步,设定游戏界面

我们先把这个蛇的结构体解决了。

  1. //定义蛇的结构体
  2. struct Snake{
  3. int x[100];
  4. int y[100];
  5. int speed;
  6. int length;
  7. int count;
  8. int tm1;//开始时间
  9. int tm2;//持续时间
  10. };

定义好了蛇,总觉得要一点什么东西。哦,还要一些食物,食物是需要移到随机位置,然后再判断有没有出界或者是在蛇身上,否则重新生成,我现在只定义一个事物的函数,以便以后使用。

  1. //定义食物的结构体
  2. struct Food{
  3. int x;
  4. int y;
  5. };

在游戏中,为了防止忘记键盘操作的方式,我在游戏界面又加了一点键盘使用说明。

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号