贪吃蛇c++代码详解(最浪漫的编程代码)

1贪吃蛇效果展示 前言:C语言初学者都是在控制台上开发一些小游戏什么,由于没有界面(比如图片、音乐,不能做出拥有自己风格的程序)学起来比较乏味,很难坚持下去。所以我在这里就教大家使用简单的图形化工具——easyx图形界面库,做一些好玩的,超丝滑的贪吃蛇 2背景知识 开发贪吃蛇小游戏,让初学者也能感受界面的魅力。做的不是很完善,希望大家可以自己动手完善它表白程序设计原理: 第一步,我们需要一张地图,…

1 贪吃蛇大作战实际效果展现

引言:C语言新手全是在操纵台子上开发一些小手机游戏哪些,因为沒有页面(例如照片、歌曲,不可以作出有着自身特点的程序流程)学起來较为枯燥,难以坚持到底。因此我在这就教大伙儿应用简易的图形界面专用工具——easyx用户界面库,做一些好玩儿的,超丝滑的贪吃蛇大作战

这么丝滑的蛇蛇你做过吗?四步即可完成C语言超丝滑贪吃蛇

2 环境专业知识

开发贪吃蛇小游戏,让新手也可以体会页面的风采。做的没有很健全,期待我们可以亲自动手健全它表白程序结构设计:

第一步,大家必须一张地形图,图形库复位的对话框是内置坐标的(左上方为0,0)。

第二步,大家必须一条蛇,这一条蛇由蛇头和蛇身构成(这儿大家复位三节蛇)。

第三步,大家必须食物,而且在蛇吞掉食物以后将蛇的身体拉长,并且再次形成一个食物。

第四步,蛇必须挪动,这应该是较难完成的(实现蛇身坐标的传值,除蛇头之外,每一节蛇的坐标全是以前蛇的上一次健身运动以前的坐标,有点儿绕~)。

第五步,大家必须能用电脑键盘操纵蛇的运作方位,这一会和蛇的挪动有一些联络。

第六步,蛇撞倒墙或是撞倒自身的身体便会身亡(分辨坐标是不是重叠就可以)。

3 不正确及决然计划方案

此系统应用Vs209 easyx开发。刚开始学习C语言或是没了解过easyx的小伙伴,取得编码以后毫无疑问有很多的不正确,这就是所说的给了源代码也不可以运作,因此配备自然环境和查询出错也是做为编程学习者,务必要熟练掌握的专业技能。有关常识的基本解读可收看栏目实例教程:

4. 话不多说上编码

4.1 库函数snake.h

大家把一些函数公式的申明,和结构体的概念放到库函数中:

#ifndef _SNAKE_H_
#define _SNAKE_H_
#include<graphics.h>
#include<conio.h>
#include<stdio.h>
#include<time.h>
#define WIN_WIDTH 640 //对话框高宽
#define WIN_HEIGHT 480
#define MAX_SNAKE 10000 //蛇的较大长度
enum DIR //蛇的方位
{
 UP,
 DOWN,
 LEFT,
 RIGHT,
};
//每一节蛇的位置信息
typedef struct _Pos
{
 int x;
 int y;
 DWORD color;
}Pos;
typedef struct Snake_tlg //蛇的结构体
{
 int num;
 int dir;//蛇的方向
 int score;//成绩
 int size;//蛇的间距和相对高度
 int speed;//挪动速率
 Pos coor[MAX_SNAKE];
}Snake;
typedef struct Food_tlg
{
 int x;
 int y;
 int r;
 int flag;
 DWORD color;
}Food;
//画眼睛函数公式
void DrawEye(int x, int y);
//复位数据信息
void GameInit();
//手机游戏的制作
void GameDraw();
//蛇的挪动
void SnakeMove();
//操纵方位
void KeyControl();
//吃食物
void EatFood();
//中止手机游戏 按空格符中止和再次
void stop();
//计时器
bool Timer(clock_t ms);
#endif

4.2 完成文档snake.cpp

OK,库函数一部分结束,下面进到snake.cpp编码撰写阶段。

#include\"snake.h\"
Snake snake;
Food food;
//画眼睛函数公式
void DrawEye(int x, int y)
{
 setfillcolor(WHITE);
 solidcircle(x, y, 3);
 setfillcolor(BLACK);
 solidcircle(x, y, 2);
}
void GameInit()
{
 srand(GetTickCount());
 //复位蛇
 snake.num = 10;
 snake.dir = RIGHT;
 snake.score = 0;
 snake.size = 10;
 snake.speed = 1;
 snake.coor[0].x = 20;
 snake.coor[0].y = 10;
 for (int i = 0; i < snake.num; i  )
 {
  snake.coor[i].color = GREEN;
 }
 //初始化食物
 food.x = rand() % (WIN_WIDTH - 10);
 food.y = rand() % (WIN_HEIGHT - 10);
 food.flag = 1;
 food.r = rand() % 3   2;
 food.color = RGB(rand() % 256, rand() % 256, rand() % 256);
}
void GameDraw()
{
 //设定背景色
 setbkcolor(RGB(191, 215, 215));
 cleardevice();
 //画蛇 
 for (int i = 0; i < snake.num; i  )
 {
  setfillcolor(snake.coor[i].color);
  solidcircle(snake.coor[i].x, snake.coor[i].y, snake.size / 2);
 }
 //画眼睛
 int eyewidth = 5;
 switch (snake.dir)
 {
 case UP:
 case DOWN:
  DrawEye(snake.coor[0].x - eyewidth, snake.coor[0].y);
  DrawEye(snake.coor[0].x   eyewidth, snake.coor[0].y);
  break;
 case LEFT:
 case RIGHT:
  DrawEye(snake.coor[0].x, snake.coor[0].y - eyewidth);
  DrawEye(snake.coor[0].x, snake.coor[0].y   eyewidth);
  break;
 }
 //画食物
 if (food.flag == 1)
 {
  setfillcolor(food.color);
  solidcircle(food.x, food.y, food.r);
 }
 //表明成绩
 char temp[20] = \"\";
 sprintf(temp, \"分数:%d\", snake.score);
 setbkmode(TRANSPARENT);
 outtextxy(20, 20, temp);
}
void SnakeMove()
{
 for (int i = snake.num - 1; i > 0; i--)//从最终一节蛇逐渐,每一节蛇都相当于前一节蛇的上一次坐标
 {
  snake.coor[i].x = snake.coor[i - 1].x;
  snake.coor[i].y = snake.coor[i - 1].y;
 }
 //依据方位挪动
 switch (snake.dir)
 {
 case UP:
  snake.coor[0].y -= snake.speed;
  if (snake.coor[0].y   10 <= 0)
  {
   snake.coor[0].y = WIN_HEIGHT;
  }
  break;
 case DOWN:
  snake.coor[0].y  = snake.speed;
  if (snake.coor[0].y - 10 >= WIN_HEIGHT)
  {
   snake.coor[0].y = 0;
  }
  break;
 case LEFT:
  snake.coor[0].x -= snake.speed;
  if (snake.coor[0].x   10 <= 0)
  {
   snake.coor[0].x = WIN_WIDTH;
  }
  break;
 case RIGHT:
  snake.coor[0].x  = snake.speed;
  if (snake.coor[0].x - 10 >= WIN_WIDTH)
  {
   snake.coor[0].x = 0;
  }
  break;
 }

}
void KeyControl()
{
 //应用win32API获得电脑键盘信息
 if (GetAsyncKeyState(VK_UP) && snake.dir != DOWN)
 {
  snake.dir = UP;
 }
 if (GetAsyncKeyState(VK_DOWN) && snake.dir != UP)
 {
  snake.dir = DOWN;
 }
 if (GetAsyncKeyState(VK_LEFT) && snake.dir != RIGHT)
 {
  snake.dir = LEFT;
 }
 if (GetAsyncKeyState(VK_RIGHT) && snake.dir != LEFT)
 {
  snake.dir = RIGHT;
 }
 //按A键加快,不按回应初始值
 if (GetAsyncKeyState(\'A\') && snake.speed == 1)
 {
  snake.speed = 5;
 }
 else if (snake.speed == 5)
 {
  snake.speed = 1;
 }
}
void EatFood()
{
 if (snake.coor[0].x >= food.x - food.r && snake.coor[0].x <= food.x   food.r &&
  snake.coor[0].y >= food.y - food.r && snake.coor[0].y <= food.y   food.r &&
  food.flag == 1)
 {
  snake.num  = 5;
  snake.score  = 10;
  food.flag = 0;
  //每一节的色调都需要复位
  for (int i = snake.num - 5; i < snake.num; i  )
  {
   snake.coor[i].color = food.color;
  }
 }
 if (food.flag == 0)
 {
  food.x = rand() % (WIN_WIDTH - 10);
  food.y = rand() % (WIN_HEIGHT - 10);
  food.flag = 1;
  food.r = rand() % 10   3;
  food.color = RGB(rand() % 256, rand() % 256, rand() % 256);
 }
}
void stop()
{
 if (_kbhit() && _getch() == 32)
 {
  while (getch() != 32);
 }
}
bool Timer(clock_t ms)
{
 static clock_t t = clock();
 if (clock() - t > ms)
 {
  t = clock();
  return true;
 }
 return false;
}

4.3 检测文档main.cpp

最终我们一起来测试一下吧

#include\"snake.h\"
int main()
{
 //建立一个图型对话框
 initgraph(WIN_WIDTH, WIN_HEIGHT);
 GameInit();
 BeginBatchDraw();//①
 while (1)
 {
  if(Timer(10))
  {
   SnakeMove();
  } 
  GameDraw();
  FlushBatchDraw();//②
  EatFood();
  KeyControl();
  stop();
 }
 EndBatchDraw();//③    ①②③为双缓存制图避免屏幕闪烁编码
 //关掉图型对话框
 closegraph();
 return 0;
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

(0)
上一篇 2022年5月11日 上午10:39
下一篇 2022年5月11日 上午10:40

相关推荐

  • 莫代尔安全裤怎么样(夏季莫代尔内裤性价比)

    喜庆热闹的春节还在许多人心中回味,此时已春回大地,寒意消散,轻薄的春装是这个季节时尚时尚最时尚的服饰。春季是过敏高发的季节,因而在服饰的选择上,除了轻薄也要注意选择天然舒适的面料,减少过敏瘙痒等问题的发生,尤其是贴身穿着的内裤,天然舒适轻薄,一样都不能少。 面料的材质有哪些?哪些面料制作的内裤既高档又舒适? 面料的材质有很多,棉、莫代尔、冰丝、竹纤维等等,其中棉质内裤安全性和吸湿性好,莫代尔内裤透…

    2022年10月21日
    430
  • 芦丹氏香水哪款好闻(公认最好闻的香水之一)

    今天是“深夜节目”之前小咔讲到了自己“走在街上都被人问到的香水”反响还是很不错的哦,其实对于香水来说很因人而异了,而且很多人甚至闻到的都不是自己认为的那个香调,所以小咔对于香水向来只有主观意识的安利,具体的话小咔还是建议你们去专柜闻一闻再决定入手不入手。 顺便教你们去专柜挑香的时候的一些小技巧▼ *千万不要以刚喷出来味道为准,大部分的香水都是具有前中后调的,你刚喷出来的一瞬间的前调其实比较容易消散…

    2022年9月30日
    500
  • 广播电台在线大全(中央人民广播电台在线收听)

    城市频率电台 北京87.6北京人民广播电台文艺台 北京88.2中国国际广播电台EasyFM 北京88.7中国国际广播电台 北京90.0中央人民广播电台第三套节目文艺调频 北京91.5中国国际广播电台EasyFM 北京96.6中央人民广播电台第二套节目经济频道 北京97.4北京人民广播电台音乐台 北京99.6中央人民广播电台第二套节目 北京101.8中央人民广播电台第四套节目民族广播 北京103.9…

    2022年5月3日
    1770
  • 电商网站设计模板,手把手教你如何设计电商网站

    人人都是产品经理社区推出产品经理培训课程,让BAT产品总监手把手带你学产品吧! 我认为电子商务网站中组成帮助中心的四个元素分别:搜索框、常规问题、自助服务、客服、新手指导。在分析其元素前,我们先详细分析一下帮助中心: 帮助中心的定位 帮助中心的定位是帮助用户解决直接解决问题。 帮助中心的用户 将用户分为有新用户和老用户,新用户点进来最可能需要一个新手指导; 老用户点进来可能需要咨询一般问题,比如修…

    2022年8月7日
    660
  • 创业计划书怎样写,大学生创业计划书模板

    现在想开公司的人越来越多,其中不乏有特别年轻的朋友也加入了这个大军,大家有创业点子是好事,但是想要拉投资,还需要写好创业计划书,那这短短的几页十几页怎么写才好,今天我们就来聊聊这块的内容。 计划书里要谈到几项? 一、说出你的团队结构,让对方了解项目的团队情况。介绍主团队的目的是向投资方表明,团队是最适合做这件事情的。 1.投资人最喜欢看到理想团队长什么样? 2.团队的亮点和不足在哪? 3.如基础很…

    2022年7月31日
    500
  • 公众号怎么一次发多篇文章, 这个方法你可以一试

    注册了微信公众号的人都知道,一天只有一次发表文章的机会,如果不懂一次编辑多篇共点击一次发送,那么一天就只能发送一篇单图文。 我经过多次试验,终于摸索出了一次可以发表多篇文章技巧在这分享给大家。 通过微信公众号官方平台登陆自己的公众号进入主页面,点击左侧管理下边的素材管理——进入素材管理后点击图二右侧的新建图文消息: ——编辑完第一篇完整的文章不要点保存或其他,直接继续点左侧的+新建消息: 于是就可…

    2022年8月29日
    1860
  • pdf格式的文件怎么修改,pdf修改文字大小内容方法

    我们日常在处理PDF文件的时候,通常需要接触各种PDF软件,有PDF阅读器、PDF编辑器、PDF转换器等等。那么这些PDF软件分别由什么作用,都是怎么操作的呢?下面主要以PDF修改需要用到的工具来详细说明。 由于PDF文件的类型有很多,在修改的时候所使用的软件也是不同的。针对常用的两种PDF类型文档(扫描型与文本型)分别进行演示说明。 对于文本型的PDF文件修改起来相对比较简单,一般我们都需要使用…

    2022年6月8日
    690
  • seo优化方法有哪些,快速上首页的五个方法

    快速提高百度收录新站的方法有哪些?相信大家都知道,做SEO最头疼的就是碰到新站,新站通常会很快的被百度收录首页,但是其他页面通常要过很长时间才能收录,有什么办法可以快速提高新站的收录? 一、填充网站内容,注意更新频率 首先,网站上线前请确保每个栏目下有6篇文章以上,这样可以给蜘蛛留一个好印象。很多站长习惯在网站备案下来后就直接绑定域名,然后在更新内容,建议大家最好还是不要这样做, 如果蜘蛛爬行到网…

    2022年10月4日
    510
  • 微信记录怎么彻底删除,永久清除微信聊天记录方法

    手机微信是我们在生活中使用很多应用,但是使用的时间越长,手机内部的数据越来越多,有时候删除一些聊天记录可以释放一定的手机内存空间。那有什么方法可以彻底删除微信聊天记录的呢?教你几招! 微信 方法一:删除微信应用 删除微信应用也就是彻底删除了微信在手机上的数据,微信中的聊天记录也就彻底被删除了。但是有一个缺点就是,删除了微信应用,当你重新下载回到手机中时,微信中的所有聊天记录都没了,不能单独彻底删除…

    2022年7月30日
    630
  • 格力不灭的手机梦

    对于当前的格力而言,要想在智能家居领域有所作为,格力要突破的显然不只是手机,而是要在整个智能家居生态建立自己的竞争优势。

    2022年9月19日
    470

发表回复

登录后才能评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信