C++贪吃蛇

动画链接

GitHub链接:https://github.com/yanpeng1314/Snake

  1 #include "Snake.h"
  2 
  3 int iScore = 0;
  4 int iGrade = 1;
  5 
  6 //蛇头蛇尾初始位置
  7 int x_head = 1, y_head = 3;
  8 int x_tail = 1, y_tail = 1;
  9 
 10 //地图坐标
 11 int i_Map = 1, j_Map = 1;
 12 
 13 //第二节初始位置
 14 int x_second = 1, y_second = 2;
 15 
 16 //初始化移动方向
 17 int towards1 = 2; //原来方向
 18 int towards2; //按键按下后的方向
 19 
 20 const int SIDE = 20;
 21 int Snake_Map[SIDE][SIDE] = { 0 };
 22 
 23 int Speed = 300;
 24 
 25 
 26 
 27 
 28 list<Snake_Position> LIST;
 29 Snake_Position snake;
 30 
 31 
 32 
 33 int main()
 34 {
 35     Init();
 36     srand((unsigned)time(NULL));
 37     char getKeyboard = 'd';        //从键盘读取的键值
 38     char getKeyboard_Vice = 'd';    //副本: 如果读取其他值,则保持原来键值
 39     while (1)
 40     {
 41         int isSendFood = 1; //1--不发送食物  0--发送食物  
 42         int iFood;
 43         int x = rand() % 18 + 1;
 44         int y = rand() % 18 + 1;
 45         setColor(6);
 46         HiddenCursor();
 47         GOTO(y, x);
 48         cout << "";
 49         if (Snake_Map[x][y] != 2)
 50             Snake_Map[x][y] = 3;
 51         else
 52             continue;
 53 
 54         while (isSendFood)
 55         {
 56             if (_kbhit())
 57                 getKeyboard = _getch();
 58             if (getKeyboard != 's' && getKeyboard != 'S' && getKeyboard != 'a' && getKeyboard != 'A' && getKeyboard != 'w' && getKeyboard != 'W' && getKeyboard != 'd' && getKeyboard != 'D')
 59                 getKeyboard = getKeyboard_Vice;
 60             switch (getKeyboard)
 61             {
 62             case 'W':
 63             case 'w':
 64                 towards2 = 4;
 65                 if ((towards1 + towards2) == 5)
 66                 {
 67                     getKeyboard = getKeyboard_Vice;
 68                     break;
 69                 }
 70                 towards1 = towards2; //如果现在方向合理,则保存方向到towards1
 71                 x_head -= 1;
 72 
 73                 isDead();
 74                 if (Snake_Map[x_head][y_head] == 3)  //吃到食物
 75                 {
 76                     isSendFood = 0;
 77                     iScore += 1;
 78                     snake.x_snake = x_head;
 79                     snake.y_snake = y_head;
 80                     LIST.push_front(snake);
 81                     Snake_Map[x_head][y_head] = 2;
 82 
 83                     setColor(7);
 84                     HiddenCursor();
 85                     GOTO(y_head, x_head);
 86                     cout << "";
 87 
 88                 }
 89                 else
 90                 {
 91                     snake.x_snake = x_head;
 92                     snake.y_snake = y_head;
 93                     LIST.push_front(snake);
 94                     Snake_Map[LIST.back().x_snake][LIST.back().y_snake] = 0;
 95 
 96                     setColor(7);
 97                     HiddenCursor();
 98                     GOTO(y_head, x_head);
 99                     cout << "";
100                     setColor(7);
101                     HiddenCursor();
102                     GOTO(LIST.back().y_snake, LIST.back().x_snake);
103                     cout << " ";
104 
105                     LIST.pop_back();
106                 }
107                 Snake_Map[x_head][y_head] = 2;
108                 Show_Score();
109                 Sleep(Speed);
110                 //Show_Snake();
111 
112                 getKeyboard_Vice = 'w';
113                 break;
114 
115             case 'S':
116             case 's':
117                 towards2 = 1;
118                 if ((towards1 + towards2) == 5)
119                 {
120                     getKeyboard = getKeyboard_Vice;
121                     break;
122                 }
123                 towards1 = towards2;
124                 x_head += 1;
125 
126                 isDead();
127                 if (Snake_Map[x_head][y_head] == 3)  //吃到食物
128                 {
129                     isSendFood = 0;
130                     iScore += 1;
131                     snake.x_snake = x_head;
132                     snake.y_snake = y_head;
133                     LIST.push_front(snake);
134                     Snake_Map[x_head][y_head] = 2;
135 
136 
137                     setColor(7);
138                     HiddenCursor();
139                     GOTO(y_head, x_head);
140                     cout << "";
141 
142 
143                 }
144                 else
145                 {
146                     snake.x_snake = x_head;
147                     snake.y_snake = y_head;
148                     LIST.push_front(snake);
149                     Snake_Map[LIST.back().x_snake][LIST.back().y_snake] = 0;
150                     setColor(7);
151                     HiddenCursor();
152                     GOTO(y_head, x_head);
153                     cout << "";
154                     setColor(7);
155                     HiddenCursor();
156                     GOTO(LIST.back().y_snake, LIST.back().x_snake);
157                     cout << " ";
158                     LIST.pop_back();
159 
160                 }
161                 Snake_Map[x_head][y_head] = 2;
162                 Show_Score();
163                 Sleep(Speed);
164                 //Show_Snake();
165 
166                 getKeyboard_Vice = 's';
167                 break;
168 
169             case 'A':
170             case 'a':
171                 towards2 = 3;
172                 if ((towards1 + towards2) == 5)
173                 {
174                     getKeyboard = getKeyboard_Vice;
175                     break;
176                 }
177                 towards1 = towards2;
178 
179                 y_head -= 1;
180 
181                 isDead();
182                 if (Snake_Map[x_head][y_head] == 3)  //吃到食物
183                 {
184                     isSendFood = 0;
185                     iScore += 1;
186                     snake.x_snake = x_head;
187                     snake.y_snake = y_head;
188                     LIST.push_front(snake);
189                     Snake_Map[x_head][y_head] = 2;
190                     setColor(7);
191                     HiddenCursor();
192                     GOTO(y_head, x_head);
193                     cout << "";
194 
195                 }
196                 else
197                 {
198                     snake.x_snake = x_head;
199                     snake.y_snake = y_head;
200                     LIST.push_front(snake);
201                     Snake_Map[LIST.back().x_snake][LIST.back().y_snake] = 0;
202                     setColor(7);
203                     HiddenCursor();
204                     GOTO(y_head, x_head);
205                     cout << "";
206                     setColor(7);
207                     HiddenCursor();
208                     GOTO(LIST.back().y_snake, LIST.back().x_snake);
209                     cout << " ";
210                     LIST.pop_back();
211 
212 
213                 }
214                 Snake_Map[x_head][y_head] = 2;
215                 Show_Score();
216                 Sleep(Speed);
217                 //Show_Snake();
218 
219                 getKeyboard_Vice = 'a';
220                 break;
221 
222             case 'D':
223             case 'd':
224                 towards2 = 2;
225                 if ((towards1 + towards2) == 5)
226                 {
227                     getKeyboard = getKeyboard_Vice;
228                     break;
229                 }
230                 towards1 = towards2;
231                 y_head += 1;
232 
233                 isDead();
234                 if (Snake_Map[x_head][y_head] == 3)  //吃到食物
235                 {
236                     isSendFood = 0;
237                     iScore += 1;
238                     snake.x_snake = x_head;
239                     snake.y_snake = y_head;
240                     LIST.push_front(snake);
241                     Snake_Map[x_head][y_head] = 2;
242                     setColor(7);
243                     HiddenCursor();
244                     GOTO(y_head, x_head);
245                     cout << "";
246 
247                 }
248                 else
249                 {
250                     snake.x_snake = x_head;
251                     snake.y_snake = y_head;
252                     LIST.push_front(snake);
253                     Snake_Map[LIST.back().x_snake][LIST.back().y_snake] = 0;
254                     setColor(7);
255                     HiddenCursor();
256                     GOTO(y_head, x_head);
257                     cout << "";
258                     setColor(7);
259                     HiddenCursor();
260                     GOTO(LIST.back().y_snake, LIST.back().x_snake);
261                     cout << " ";
262                     LIST.pop_back();
263 
264 
265                 }
266                 Snake_Map[x_head][y_head] = 2;
267                 Show_Score();
268                 Sleep(Speed);
269                 //Show_Snake();
270 
271                 getKeyboard_Vice = 'd';
272                 break;
273 
274             default:
275                 break;
276             }
277 
278         }
279     }
280 
281 
282     system("pause");
283     return 0;
284 }
285 
286 
287 void Init_Map()
288 {
289     for (int i = 0; i < SIDE; i++)
290     {
291         for (int j = 0; j < SIDE; j++)
292         {
293             if (i == 0 || i == SIDE - 1 || j == 0 || j == SIDE - 1)
294             {
295                 GOTO(i, j);
296                 cout << "";
297             }
298         }
299     }
300 }
301 
302 void Show_Snake()
303 {
304     for (int i = 1; i < SIDE - 1; i++)
305     {
306         for (int j = 1; j < SIDE - 1; j++)
307         {
308             if (Snake_Map[i][j] == 3)
309             {
310                 GOTO(j, i);
311                 cout << "";
312             }
313             if (Snake_Map[i][j] == 2)
314             {
315                 GOTO(j, i);
316                 cout << "";
317             }
318             if (Snake_Map[i][j] == 0)
319             {
320                 GOTO(j, i);
321                 cout << " ";
322             }
323         }
324     }
325 }
326 
327 void Init()
328 {
329     Init_Map();    //初始化显示地图
330     for (int i = 0; i < SIDE; i++)
331     {
332         for (int j = 0; j < SIDE; j++)
333         {
334             if (i == 0 || i == SIDE - 1 || j == 0 || j == SIDE - 1)
335                 Snake_Map[i][j] = 9;
336         }
337     }
338     //将蛇的初始三节坐标依次保存到LIST中
339     Snake_Map[1][1] = 2;
340     snake.x_snake = 1;
341     snake.y_snake = 1;
342     LIST.push_front(snake);
343 
344     Snake_Map[1][2] = 2;
345     snake.x_snake = 1;
346     snake.y_snake = 2;
347     LIST.push_front(snake);
348 
349     Snake_Map[1][3] = 2;
350     snake.x_snake = 1;
351     snake.y_snake = 3;
352     LIST.push_front(snake);
353 
354     Show_Snake();
355 }
356 
357 void isDead()
358 {
359     if (Snake_Map[x_head][y_head] == 9 || Snake_Map[x_head][y_head] == 2)  //死亡条件
360     {
361         system("cls");
362         cout << "你已经挂了, 游戏结束!" << endl;
363         Sleep(2000);
364         exit(-1);
365     }
366 }
367 
368 void Show_Score()
369 {
370     if (iScore == 5)
371     {
372         iGrade = 2;
373         Speed = 250;
374         //Sleep(2000);
375     }
376     if (iScore == 10)
377     {
378 
379         iGrade = 3;
380         Speed = 200;
381         //Sleep(2000);
382     }
383     if (iScore == 15)
384     {
385         setColor(4);
386         HiddenCursor();
387         GOTO(5, 5);
388         cout << "您已达到王者级别";
389         Sleep(5000);
390         exit(0);
391     }
392     setColor(4);
393     HiddenCursor();
394     GOTO(30, 8);
395     cout << "级别: " << iGrade;
396     GOTO(30, 12);
397     cout << "得分: " << iScore;
398 }
Main.cpp
 1 #include "Snake.h"
 2 using namespace std;
 3 
 4 
 5 void GOTO(int x, int y)
 6 {
 7     COORD wall{ 2 * x, y };
 8     SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), wall);
 9 }
10 
11 void setColor(int color)
12 {
13     SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), color);
14 }
15 
16 
17 void HiddenCursor()
18 {
19     CONSOLE_CURSOR_INFO info;
20     info.dwSize = 1;
21     info.bVisible = FALSE;
22     SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &info);
23 }
Snake.cpp
 1 #pragma once
 2 
 3 #include <iostream>
 4 #include <Windows.h>
 5 #include <time.h>
 6 #include <list>
 7 #include <conio.h>
 8 #include <stdio.h>
 9 #include <stdlib.h>
10 #include <stack>
11 
12 using namespace std;
13 
14 class Snake_Position
15 {
16 public:
17     int x_snake;
18     int y_snake;
19 };
20 
21 //系统函数
22 void setColor(int color);
23 void GOTO(int x, int y);
24 void HiddenCursor();
25 
26 //自定义函数
27 void Init_Map();
28 void Show_Snake();
29 void Init();
30 void isDead();
31 void Show_Score();
Snake.h

 

转载于:https://www.cnblogs.com/yan1314/articles/8454276.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/390196.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

10分钟腾讯云配置免费https

腾讯云免费证书申请地址&#xff1a; https://console.cloud.tencent... 填写相关信息 域名身份验证 文件验证 将fileauth.text 创建在网站访问根目录的 .well-known/pki-validation/目录使得 www.**.com/.well-known/pki-validation/fileauth.text 能够访问详情 等待5分钟左右…

web前端【第十一篇】jQuery属性相关操作

知识点总结 1、属性 属性&#xff08;如果你的选择器选出了多个对象&#xff0c;那么默认只会返回出第一个属性&#xff09;、 attr(属性名|属性值) - 一个参数是获取属性的值&#xff0c;两个参数是设置属性值 - 点击加载图片示例 re…

85. 最大矩形

85. 最大矩形 给定一个仅包含 0 和 1 、大小为 rows x cols 的二维二进制矩阵&#xff0c;找出只包含 1 的最大矩形&#xff0c;并返回其面积。 示例 1&#xff1a; 输入&#xff1a;matrix [[“1”,“0”,“1”,“0”,“0”],[“1”,“0”,“1”,“1”,“1”],[“1”,“1”…

html单行元素居中显示,多行元素居左显示

有很多的业务需要元素或者文字如果单行&#xff0c;居中显示&#xff0c;如果数据增多&#xff0c;居中显示代码&#xff08;直接复制到编辑器可用&#xff09;&#xff1a;<!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8&q…

怎样在减少数据中心成本的同时不牺牲性能?

2019独角兽企业重金招聘Python工程师标准>>> 导读虽然组织对数据中心提出了更高的要求&#xff0c;但IT管理人员确实有办法在严格的预算内展开工作。如今&#xff0c;组织认为即使性能预期不断提高&#xff0c;其数据中心预算也在缩减。尽管2018年IT支出总体预计增长…

赛普拉斯 12864_如何使用赛普拉斯自动化辅助功能测试

赛普拉斯 12864In my previous post, I covered how to add screenshot testing in Cypress to ensure components dont unintentionally change over time. 在上一篇文章中 &#xff0c;我介绍了如何在赛普拉斯中添加屏幕截图测试&#xff0c;以确保组件不会随时间变化。 Now…

Android App 的主角:Activity

Android App 程序主要由4种类型组成&#xff1a; 1.Activity&#xff08;活动&#xff09;&#xff1a;主要负责屏幕显示画面&#xff0c;并处理与用户的互动。每个Android App至少都会有一个Activity&#xff0c;在程序一启动时显示主画面供用户操作。 2.Service&#xff08;后…

通过构建Paint App学习React Hooks

According to people in the know, React Hooks are hot, hot, hot. In this article, we follow Christian Jensens 14-part tutorial to find out about the basics of this new feature of React. Follow along to find out more! 据知情人士称&#xff0c;React Hooks很热&…

Npoi导出excel整理(附源码)

前些日子做了一个简单的winform程序&#xff0c;需要导出的功能&#xff0c;刚开始省事直接使用微软的组件&#xff0c;但是导出之后发现效率极其低下&#xff0c;绝对像web那样使用npoi组件&#xff0c;因此简单的进行了整理&#xff0c;包括直接根据DataTable导出excel及Data…

入库成本与目标成本对比报表中我学到的东西

1、SQL方面&#xff1a; &#xff08;1&#xff09;、用DECODE函数解决除数为零的情况 具体语法&#xff1a; DECODE&#xff08;参数&#xff0c;0&#xff0c;1&#xff0c;参数&#xff09; ->DECODE(TAB1.A8&#xff0c;0&#xff0c;1&#xff0c;TAB1.A8) &#xff08…

【小摘抄】关于C++11下 string各类用法(持续更新)

http://blog.csdn.net/autocyz/article/details/42391155 提供了最简单的详解 下列对本人近期开发中的一些心得体会进行摘抄 1.string按照字符进行截取 示例代码&#xff1a; string teststring "#12313#kajlkfdsa";//通讯消息示例&#xff0c;结合string的内置函数…

【VMware vSAN 6.6】5.5.Update Manager:vSAN硬件服务器解决方案

目录 1. 简介 1.1.适用于HCI的企业级存储2. 体系结构 2.1.带有本地存储的服务器2.2.存储控制器虚拟系统套装的缺点2.3.vSAN在vSphere Hypervisor中自带2.4.集群类型2.5.硬件部署选项3. 启用vSAN 3.1.启用vSAN3.2.轻松安装3.3.主动测试4. 可用性 4.1.对象和组件安置4.2.重新构建…

32位JDK和64位JDK

32位和64位系统在计算机领域中常常提及&#xff0c;但是仍然很多人不知道32位和64位的区别&#xff0c;所以本人在网上整理了一些资料&#xff0c;并希望可以与大家一起分享。对于32位和64位之分&#xff0c;本文将分别从处理器&#xff0c;操作系统&#xff0c;JVM进行讲解。 …

中小企业如何选择OA协同办公产品?最全的对比都在这里了

对于中小企业来说&#xff0c;传统的OA 产品&#xff0c;如泛微、蓝凌、致远、华天动力等存在价格高、使用成本高、二次开发难等特点&#xff0c;并不适合企业的协同管理。 国内OA市场也出现了一批轻便、低价的OA产品&#xff0c;本文针对以下几款适合中小企业的OA产品在功能、…

Elasticsearch学习(2)—— 常见术语

为什么80%的码农都做不了架构师&#xff1f;>>> cluster (集群)&#xff1a;一个或多个拥有同一个集群名称的节点组成了一个集群。每个集群都会自动选出一个主节点&#xff0c;如果该主节点故障&#xff0c;则集群会自动选出新的主节点来替换故障节点。 node (节点…

IntelliJ IDEA 运行 Maven 项目

1.官方文档说IntelliJ IDEA已经自身集成了maven&#xff0c;则不用劳心去下载maven 2.导入一个程序&#xff0c;看是否是maven程序的关键在于工程之中有没有pom.xml这个文件&#xff0c;比如这里 3.为这个工程配置好服务器3.1 点击“Edit Configurations”3.2 进入Run/Debug C…

资深老鸟整理,Java接口自动化测试总结,从0到1自动化...

这几年接口自动化变得越来越热门&#xff0c;相对比于UI自动化&#xff0c;接口自动化有一些优势 1&#xff09;运行比UI更稳定&#xff0c;让BUG更容易定位 2&#xff09;UI自动化维护成本太高&#xff0c;接口相对低一些 接口测试其实有很多方式&#xff0c;主要有两种&…

pdf 字体和图片抽取

2019独角兽企业重金招聘Python工程师标准>>> #安装mutoos sudo apt-get install mupdf-tools #抽取字体 mutool extract LTN20180531052_C.pdf 转载于:https://my.oschina.net/colin86/blog/1842412

扫盲丨关于区块链你需要了解的所有概念

扫盲丨关于区块链你需要了解的所有概念 如今存储信息的方式有什么问题&#xff1f; 目前&#xff0c;支配我们生活的数据大部分都储存在一个地方&#xff0c;不论是在私人服务器、云、图书馆或档案馆的纸上。大多数情况下这很好&#xff0c;但这也容易受到攻击。 最近有消息称&…

SpringBoot环境切换

2019独角兽企业重金招聘Python工程师标准>>> 1.在application.yml中配置&#xff0c;如果java -jar banke-boot-bd-api-0.0.1-SNAPSHOT.jar&#xff0c;那么就是已application-test作为启动的配置文件启动 spring: profiles: active: test 2.如果java -jar banke-bo…