写贪吃蛇的主要难点在于控制转向和自动移动,控制转向可以用switch语句控制,但要特别注意的是当蛇本身在向左走时右转向键是无效的,需要多些一个函数进行判断。
写自动移动的函数的时候只需要对蛇头和蛇尾两个点进行输出移动就可以的,其他的点只需改变坐标的值,而不用从新输出。

#include<windows.h>
#include<time.h>
#include<stdlib.h>
#include<conio.h>
#include<iostream>
#include<vector>
using namespace std;#define N 24       //定义长和宽
int apple[2];      //标记苹果的坐标
static int grade=0;//记录成绩
class snake        //记录蛇的坐标
{
public:int x;int y;
};
snake last;       //标记蛇尾的坐标
vector<snake>snakes;//存放蛇的每一个点
void gotoxy(int x, int y)//改变位置的函数
{COORD pos;pos.X = 2 * x;pos.Y = y;SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);
}
void color(int a)//改变颜色的函数
{SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), a);
}
void inte_screen()   //初始化并打印屏幕
{int screen[N][N];for (int i=0; i < N; ++i){for (int j=0; j < N; ++j){if (i == 0 || j == 0 || i==N-1 || j == N - 1)screen[i][j] = 0;else screen[i][j] = 1;}}color(11);for (int i = 0; i < N; ++i){for (int j = 0; j < N; ++j){if (screen[i][j] == 0)cout << "□";else cout << "■";}cout << endl;}
}
void inte_snake()      //初始化蛇
{snake one;color(14);for (int i = 0; i < 3; ++i){one.x = N / 2;one.y = N / 2 - i;snakes.push_back(one);gotoxy(one.x, one.y);cout << "★";}
}
int* inte_apple()    //随机产生苹果
{while (1){int f = 0;  srand((unsigned)time(NULL));apple[0] = 1 + rand() % (N - 2);apple[1] = 1 + rand() % (N - 2);for (auto it = snakes.begin(); it != snakes.end(); ++it)//防止苹果出现在蛇上if (apple[0] == it->x&&apple[1] == it->y)f = 1;if (f == 0){gotoxy(apple[0], apple[1]);color(12);cout << "●";break;}}return apple;
}
void move(char ch)  //蛇移动
{last.x = snakes.rbegin()->x;   //蛇尾向前进一步last.y = snakes.rbegin()->y;gotoxy(snakes.rbegin()->x, snakes.rbegin()->y);   color(11);cout << "■";   for (auto it1 = snakes.rbegin(); it1 != snakes.rend()-1; ++it1)//将蛇上的其他点向前进一{if ((it1 + 1)->x == it1->x){if ((it1 + 1)->y > it1->y)it1->y++;else it1->y--;}else{if ((it1 + 1)->x > it1->x)it1->x++;else it1->x--;}}auto it2 = snakes.begin();  //获取蛇头的位置并控制转向color(14);switch (ch){case 'w':it2->y--; gotoxy(it2->x, it2->y); cout << "★"; break;case 's':it2->y++; gotoxy(it2->x, it2->y); cout << "★"; break;case 'a':it2->x--; gotoxy(it2->x, it2->y); cout << "★"; break;case 'd':it2->x++; gotoxy(it2->x, it2->y); cout << "★"; break;}Sleep(400-5*grade);
}
bool judge_grade(int* apple)  //判断蛇是否咬到苹果得分
{if (snakes.begin()->x == apple[0] && snakes.begin()->y == apple[1]){grade++;snakes.push_back(last);gotoxy(last.x, last.y);color(14);cout << "★";return true;}else return false;
}
void judge_swerve(char ch)//判断是否应该转向
{auto it4 = snakes.begin();switch (ch){case 'w':if ((it4 + 1)->x == it4->x && (it4 + 1)->y < it4->y)move('s');else move('w');break;case 's':if ((it4 + 1)->x == it4->x && (it4 + 1)->y > it4->y)move('w'); else move('s');break;case 'a':if ((it4 + 1)->y == it4->y && (it4 + 1)->x < it4->x)move('d');else move('a');break;case 'd':if ((it4 + 1)->y == it4->y && (it4 + 1)->x > it4->x)move('a');else move('d');break;}
}
bool judge_lose()//判断是否失败
{if (snakes.begin()->x == 0 || snakes.begin()->y == 0 || snakes.begin()->x == N - 1 || snakes.begin()->y == N - 1)return true;for (auto it5 = snakes.begin()+1; it5 != snakes.end(); ++it5){if (snakes.begin()->x == it5->x&&snakes.begin()->y == it5->y)return true;}return false;
}
int main()
{inte_screen();//初始化屏幕inte_snake();//初始化蛇gotoxy(N + 4, 1);cout << "欢迎来到贪吃蛇";gotoxy(N + 4, 2);cout << "输入w,a,s,d移动";char ch = 'p';//标记转向的字符int f = 0;while (1){if (f == 0)//当上一个苹果被吃后再生成新的苹果{inte_apple();f = 1;}if (_kbhit())//判断是否按下键{gotoxy(0, N + 2);ch = _getche();}switch (ch)  //进行转向{case 'w':judge_swerve(ch); break;case 's':judge_swerve(ch); break;case 'a':judge_swerve(ch); break;case 'd':judge_swerve(ch); break;default: break;}if (judge_grade(apple))//如果成功吃掉苹果将f置零从而产生新的苹果{f = 0;}gotoxy(N + 4, 3);cout << "得分:" << " " << grade;if (judge_lose())//判断是否失败,若失败打印GAMEOVER!!!{gotoxy(0, N + 4);cout << "game over!!!";break;}}
}

c++实现经典游戏——贪吃蛇相关推荐

  1. c++实现经典游戏贪吃蛇(超详解)

    经典版: 要求: 1碰到四周和自身游戏结束: 2迟到食物蛇身增长: 3食物吃得越多游戏越快: 4通过w,a,s,d可控制蛇头的方向: 5蛇身颜色不一致. 源码(需要easy-x) // 贪吃蛇.cpp ...

  2. 【Unity实现经典游戏--贪吃蛇】

    作为一个将来想从事游戏行业的人来说,从一些经典游戏来学习Unity是最好不过的了,在这里我就介绍一下这次做的贪吃蛇. 贪吃蛇制作教学 详细的可以从上面链接进去学习,素材也从上方链接中取得.如果只是想了 ...

  3. 经典游戏---贪吃蛇从C++代码实现

    1.   题目描述 小时候都玩过贪吃蛇这个经典的小游戏,在我们的普通手机里似乎都是必备的.它伴随着我们的童年,经历了好多好多时光.它带给我们了许多的乐趣. 学习了c++这门编程语言后,我就想着能不能把 ...

  4. python经典教程游戏软件_手把手带领大家用Python来做经典游戏 — 贪吃蛇

    从头到尾,从无到有,逐步分析每一个环节的实现,旨在让大家真正搞清楚"如何用python做贪吃蛇". 课程内容: 基本逻辑 游戏逻辑 第一步.初始框架 第二步.绘制格子 第三步 ...

  5. 99行不用指针 c语言贪食蛇,小白99行C代码编写经典游戏贪吃蛇(多关版本)

    文章目录 前言 一.实现原理 1.地图打印 2.蛇身运动 3.方向键操控 4.四种判定 5.函数工具 二.游戏试玩 1.编译环境 2.源代码 三.代码详解 1.游戏配置部分(第1~31行) 2.游戏主 ...

  6. 手起刀落-一起来写经典的贪吃蛇游戏

    回味 小时候玩的经典贪吃蛇游戏我们印象仍然深刻,谋划了几天,小时候喜欢玩的游戏,长大了终于有能力把他做出来(从来都没有通关过,不知道自己写的程序,是不是能通关了...),好了,闲话不多谈,先来看一下效 ...

  7. C#winform 经典小游戏贪吃蛇V1.0(一)

    关于V1.0   为什么我给这个版本定义为V1.0嘞,因为在这个版本中仅仅实现了蛇的自动行进,按键对蛇的行进方向的操作和吃掉食物蛇身的增长等操作. 但是任何事情都必须一步一步来,当我们完成这个乞丐版的 ...

  8. Java经典小游戏——贪吃蛇简单实现(附源码)

    文章目录 一.使用知识 二.使用工具 三.开发过程 3.1素材准备 3.2 开发过程 3.2.1 创建项目 3.2.2 页面设计 3.23 画蛇 3.24创建蛇的食物 3.2.5增加蛇的存活状态 3. ...

  9. Python制作当年第一款手机游戏-贪吃蛇游戏(练习)

    前言: 文章利用Python pygame做一个贪吃蛇的小游戏而且讲清楚每一段代码是用来干嘛的. 据说是贪吃蛇游戏是1976年,Gremlin公司推出的经典街机游戏,那我们今天用Python制作的这个 ...

最新文章

  1. SAP QM初阶之明明存在检验计划但是生成的检验批取不到?
  2. 噪声与平滑滤波(MATLAB)
  3. Android7.0 PowerManagerService亮灭屏分析(一)
  4. gtk 控件内存回收_咱们从头到尾说一次 Java 垃圾回收
  5. spring的Bean属性
  6. Arduino 控制超声波测距模块
  7. TailwindCSS v3.0 正式发布!一大波新特性来袭!
  8. java executor 异步_Java并发编程11-异步执行框架Executor
  9. 【持久化框架】Mybatis与Hibernate的详细对比
  10. 展讯SC9820E驱动配置之LCD配置
  11. 云计算概念及发展历程
  12. Ubuntu 14.04 Wine的安裝
  13. 计算机保研个人简介,保研个人简历模板
  14. java常见的异种类_JCA - 自然 - BlogJava
  15. 无线技术之争谁将胜出 WiFi、蓝牙还是NFC
  16. D语言和Go语言有前途吗?
  17. arcgis使用arcpy计算土地利用LUCC变化转移矩阵、马尔科夫模型变化表,最好用的方法TabulateArea实现两期数据变化统计
  18. 燕山大学数据结构与算法课程实践——ISBN号识别系统的设计与开发
  19. Pyecharts绘制日历热力图
  20. PCB Layout设计规范-通用篇

热门文章

  1. 转帖:CCIE一年后的心语
  2. 敏锐嗅出商机,她瞄准花卉市场的空白,将花店开出名气
  3. ffmpeg视频中提取语音
  4. GSMA公布MWC20巴塞罗那最新进展
  5. Android学习之登陆界面设计(一)前后期准备以及相关配置
  6. glib linux,[转载]linux下glib.h的介绍
  7. python图形编程基础知识_AI-图像基础知识-01|python基础教程|python入门|python教程
  8. Mongo数据库的操作
  9. 金纳米颗粒上装载DNA四面体|金核(75-100nm左右)sio2壳层(3-5nm)产品描述/信息/详情
  10. Word如何从目录后加页码