开篇先说一句废话····
本旺名字叫萨摩耶,,Please 叫我旺财,,,哈哈,招财进宝嘛!

今天整理电脑的时候,发现之前学习过程中写了一个小游戏—贪吃蛇,这个游戏是我学习C语言时写的第一个小项目吧,想着打开玩玩呢······
感觉很有文艺范嘛·····

先简单说一下,贪吃蛇游戏,,,,,,,,,,谁都玩过,有的人甚至大神,可是到了我们学习编程的孩纸来讲,我们的仔细的了解游戏才能写出来呢,,,

先得分析一下吧
贪吃蛇游戏里只有两种东西------蛇和食物。

而蛇有哪些属性呢?蛇的长度(节数) 方向 每节蛇的坐标

//方向
enum CH {up=87,left=65,down=83,right=68
};
struct Coor{    //坐标int x;int y;
};
struct Snake{   //蛇int num;    //节数struct Coor xy[MAX];   //每节蛇的坐标char ch;
}snake;

食物呢? 坐标 标志(是否被吃)

struct Food {Coor ch;   //坐标int flag;  //标志  是否被蛇吃掉int grade; //成绩
}food;

接下来······· 既然定义了,,那就得先给蛇初始化一下嘛。。
初始化蛇

void InitGame() {//初始化界面initgraph(640,480);//初始化蛇snake.num = 3;snake.xy[2].x = 10;snake.xy[2].y = 10;snake.xy[1].x = 20;snake.xy[1].y = 10;snake.xy[0].x = 30;snake.xy[0].y = 10;snake.ch = right;//初始化食物food.flag = 0;food.grade = 0;}

初始化之后呢,先得在初始化界面里能显示蛇,,所以就有了绘画蛇了···
绘画蛇
而蛇在移动时,为了区分蛇头和蛇身,所以用不同的颜色来表示,蛇头只有一个,直接画,蛇身有好几节,用for循环来遍历,遍历多少就要用蛇结构体里 num 成员了。。。代码如下:

//绘画蛇
void DrawSnake() {for (int i = 0; i < snake.num; i++) {if (i==0) {    //蛇头为绿色setlinecolor(GREEN);setfillcolor(GREEN);fillroundrect(snake.xy[i].x, snake.xy[i].y, snake.xy[i].x + 10, snake.xy[i].y + 10, 10, 10);}else {        //蛇身为黄色setlinecolor(GREEN);setfillcolor(YELLOW);fillroundrect(snake.xy[i].x, snake.xy[i].y, snake.xy[i].x + 10, snake.xy[i].y + 10, 10, 10);}}}

绘画完,蛇在窗口显示了,接下来就是移动蛇了,,

移动蛇

在移动过程中呢,是先动蛇头还是先动蛇身呢?注意的是:编程里面,蛇的坐标是用数据储存的,而移动就是遍历这些数据,所以移动蛇就是先移动蛇身,在移动蛇头

怎么移动蛇呢??如图
且看代码

//蛇的移动
void MoveSnake() {//蛇身的移动   for (int i = snake.num-1; i >0;i--) {snake.xy[i].x = snake.xy[i-1].x;snake.xy[i].y = snake.xy[i-1].y;}//蛇头的移动switch (snake.ch) {case up:snake.xy[0].y -= 10;break;case down:snake.xy[0].y += 10;break; case left:snake.xy[0].x -= 10;break;case right:snake.xy[0].x += 10;break;};
}

在游戏中呢,蛇除了会移动,还要改变方向来找食物。。。

改变蛇的方向

其实就是改变蛇头的坐标嘛,然后让把坐标赋给蛇身,依次画出就改变方向了嘛,,

这会就要依靠输入来控制了,先定义一个move来储存键盘的输入,然后用多分支选择来改变蛇头的坐标就好了。。。。
代码如下:

//改变蛇的方向
void ChangeSnake() {char move;move = _getch();switch (move) {case 87:if (snake.ch != down)snake.ch = up; break;case 65:if (snake.ch != right)snake.ch = left; break;case 83:if (snake.ch != up)snake.ch = down; break;case 68:if (snake.ch != left)snake.ch = right; break;default: break;};
}

到这会,蛇就OK了,接下来就到了食物了,,,因为食物是随机出现的,就要用到随机数的产生了。。。。rand()函数。。而因为蛇在绘画中用10来表示蛇的每节蛇的长度,在移动时坐标都是能被10给整除,若想在之后的蛇吃食物的时候能成功的吃到食物,食物的坐标也要能被10整除,,,

事物的坐标获取到了,就要把食物画到窗口里了,,(和绘画蛇是一样的)
代码:

//获取食物的坐标
void CoorFood() {if (food.flag == 0) {food.ch.x = rand() % 64 * 10;food.ch.y = rand() % 48 * 10;}
}
//绘画食物
void DrawFood() {setlinecolor(RED);setfillcolor(RED);fillroundrect(food.ch.x, food.ch.y, food.ch.x + 10, food.ch.y + 10, 10, 10);food.flag = 1; //表示食物没有被吃
}

蛇和食物都完成了,接下来就是判断蛇要吃没吃到食物了,,怎么算是迟到了呢,,
当蛇头的坐标和食物的坐标相等了,是不时食物就被吃了

//蛇吃掉食物
void EatFood() {//当蛇头的坐标等于食物的坐标的时候,表示蛇吃掉食物if (snake.xy[0].x==food.ch.x && snake.xy[0].y==food.ch.y) {food.flag = 0;      //食物被吃snake.num++;        //蛇的节数加1food.grade += 10;   //成绩加10}
}

吃食物完成了,那么剩下最后一个条件了,就是蛇怎么就死了呢??
第一,蛇头碰到墙壁
第二,蛇头碰到自己,自己被吃了呢,,,

碰到墙壁: 只需要用if判断蛇头的坐标和墙壁的坐标的关系就可以了
碰到自己:就要使用for循环来遍历坐标,判断蛇头和蛇身的坐标是否相等

//游戏规则
void Rule() {char grade[100];sprintf_s(grade,"%d",food.grade);//蛇头碰到墙壁时,蛇死亡 --- 蛇头坐标等于墙壁坐标时,蛇死亡!if (snake.xy[0].x < 0 || snake.xy[0].x > 630 || snake.xy[0].y < 0 || snake.xy[0].y > 470) {outtextxy(145, 200, "分数:");outtextxy(250, 200, grade);outtextxy(140, 340, "你碰到了墙壁,已经死亡,游戏结束!!!按回车继续···");MessageBox(0, "贪食蛇,要命的就在一个“贪”字上。所以,有时候真的需要及时收手,不要逼人太甚。如果没有余地,就算你的手再快,面临的结局也是——崩盘。", "Warning", 0);getchar();main();}//蛇头碰到自己身体时,蛇死亡 --- 蛇头坐标等于蛇身坐标时,蛇死亡!for (int i = 1; i < snake.num;i++) {if (snake.xy[0].x == snake.xy[i].x && snake.xy[0].y == snake.xy[i].y) {outtextxy(145, 200, "分数:");outtextxy(250, 200, grade);outtextxy(140, 340, "你咬死了自己,已经死亡,游戏结束!!!按回车继续···");MessageBox(0, "人生如同贪食蛇,丝毫大意不得,除非你在风风雨雨中玩得累了,不想继续了,那好,干脆关机,洗洗睡吧。", "Warning", 0);getchar();main();}}//没有以上情况游戏继续
}

这是基本功能,读者也可以自行添加其他的功能,比如:分数排行榜,或者一些游戏的说明等等·········

写代码时搜索到的东西


现实中,我们何尝不是这样呢,,,,还有很好的一句话就是(贪吃蛇里),当我们还小的时候敢加速横冲直撞,等我们成长到一定程度之后,我们不在加速,不在“赌博”,,我们从最初的游戏体验到后来的功利心,也许这就是成长吧。。

终结语

希望这些代码可以帮助到你,
希望我们不要忘记自己的那份初心

EasyX中贪吃蛇小游戏·········有时候真的需要及时收手,不要逼人太甚。如果没有余地,就算你的手再快,面临的结局也是——崩盘。相关推荐

  1. 【精选】基于EasyX的贪吃蛇小游戏

    文章目录 前言 一.项目环境 1.Visual Studio 2019 2.EasyX 20200902 二.运行效果展示 0.加载游戏 1.主菜单 2.游戏设置 3.游戏说明 4.生存模式 5.无尽 ...

  2. Easyx图形库+C++做一个贪吃蛇小游戏 数据结构课程设计

    Easyx图形库+C++做一个贪吃蛇小游戏 数据结构课程设计 程序界面 ① 游戏开始界面(如下图): 显示游戏标题,提供"开始游戏"."游戏模式"和" ...

  3. 贪吃蛇小游戏 c++ easyx图形库实现

    贪吃蛇小游戏 c++ easyx图形库实现 实施思路 1.用上下左右键来控制方向 2.按enter键开始 暂停 3.通过随机函数来实现食物的随机出现 4.通过单链表来构造蛇 5.蛇撞墙    咬到自己 ...

  4. 还记得诺基亚手机上贪吃蛇小游戏吗?

    诺基亚手机上的经典游戏 1. 贪吃蛇 2. 跳跳球 3. 熊猫爬树 还有俄罗斯方块等经典游戏,我就不11介绍了,欢迎大家在评论区中写下自己童年记忆深刻的游戏吧,如果写下了,希望大家可以动手去找到相应的 ...

  5. JAVA版贪吃蛇小游戏

    这是一篇关于JAVA的贪吃蛇游戏,源代码的部分在下面正文中介绍,图片和音频的部分都放在百度云盘,需要的自行下载. 文章目录 开发环境 一.下载方法 二.运行效果展示 三.项目结构以及主程序入口 1.项 ...

  6. 学生学python编程---实现贪吃蛇小游戏+源码

    学生学python编程---实现贪吃蛇小游戏+源码 前言 主要设计 1.蛇的表示 2.蛇怎么移动? 3.玩家控制小蛇移动功能的实现 4.如何判定游戏结束? 应用知识点 1.python知识点 1.1 ...

  7. 【笔记】用vs2017 c语言写 贪吃蛇 小游戏

    目录 文章目录 前言 一.贪吃蛇游戏 设计逻辑 二.详细介绍 1.设置界面(界面大小,背景颜色) 2.设置贪吃蛇的身体并显示 3.使之能够移动并能够穿墙 4.添加食物并让蛇吃掉 5.设置背景音乐 完整 ...

  8. python简易贪吃蛇小游戏任务书含代码

    目  录 第一章 绪论 1.1 开发的背景 1.2 开发的目的 1.3 开发的意义 1.4 开发工具简介 第二章 需求分析 (1) 利用方向键来改变蛇的运行方向. (2) 在随机的地方产生食物. (3 ...

  9. Python实现贪吃蛇小游戏(双人模式)

    这篇文章主要为大家详细介绍了Python实现双人模式的贪吃蛇小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 简单用py写了一个贪吃蛇游戏,有单人.双人模式,比较简 ...

最新文章

  1. 几何画板画一个五边形内部的方法
  2. 蚂蚁上市后,马云不是最大赢家,竟是她!
  3. 《你的灯亮着么》五六篇
  4. Java基础:String类
  5. 前端开发中通过js设置cookie的一组方法
  6. 二维温度场matlab编程,二维温度场重建算法(价钱可议)
  7. Spring Boot笔记-接收RabbitMQ队列中的消息
  8. 【拉普拉斯机制代码实现demo】差分隐私代码实现系列(四)
  9. 理解 Java 的 GC 与 幽灵引用
  10. Django-manage.py
  11. python航空订票系统_航空订票系统 - 智慧点点的个人空间 - OSCHINA - 中文开源技术交流社区...
  12. 中国首档程序员真人秀,20位选手找bug做模型,结果一开场主办方就惨遭攻击
  13. Preempt_RT Linux技术文档(一)技术基础(中英文对照)
  14. 微信图片去除马赛克_微信怎么把图片加上马赛克_微信如何将照片打码的方法介绍_3DM手游...
  15. java隐藏手机号中间四位和隐藏邮箱
  16. ios html加载css样式,iOS加载HTML, CSS代码
  17. python机器学习快速入门
  18. Oracle中V$SESSION等各表的字段解释,Oracle官方解释
  19. JSR --- JAVA Java Specification Requests 意思是Java 规范提案
  20. 阿里巴巴暑期实习生 电面一轮

热门文章

  1. 互联网的商业模式中有三个层次
  2. 【python爬虫】爬取QQ空间说说
  3. 洛谷题目---P1936 水晶灯火灵
  4. 计算机性能和显卡的提升,电脑如何提高显卡性能?电脑提高显卡性能的图文教程...
  5. 基于ssm的拍卖系统
  6. 智慧健康服务平台解决方案
  7. 1985-2021年全国31省一二三产业就业人数/各省分产业就业人数数据(无缺失)
  8. 人类的情感需要与未来私人机器人助理
  9. matlab 内存拷贝_Matlab内存不足问题的解决
  10. 【JAVA】java性能分析之线程DUMP分析