贪吃蛇系列开篇----设计智能贪吃蛇小游戏
来源:互联网 发布:万德数据库破解版 编辑:程序博客网 时间:2024/06/05 19:53
问题描述:
贪吃蛇这个游戏已经是大家都非常熟悉的经典游戏了,我用简短的话概述一下,就是用户使用上、下、左、右四个方向键控制贪吃蛇的运动方向,保证蛇在既不撞墙,又不撞到自己身体的前提下,安全的吃到美味的食物。
起因:
当时无意中我看到了有人做了一个具有一定智能的贪吃蛇,虽然那个贪吃蛇还不够聪明,我当时的想法就是设计完成一个贪吃蛇游戏,让我做出来的这条蛇比我看到的那条更加的聪明。
首先必须要做的:
为了最终让我的蛇具有超高智力,我首先至少先要设计出一条蛇,这条蛇能够在用户输入上、下、左、右四个按键的指导下,吃到食物。
设计思路:
我们先来设计出一条蛇(因为这里我用的是C语言,面向过程,不是C++,面向对象的),所以接下来,我会把蛇的身体看成一个一个的结果,而不是对象。
第1步: 蛇是运动在地图范围内的,而地图是有一个一个坐标点构成的,我们先定义出坐标点的结构:(其中点的x表示行号,y表示列号,均从0开始)
struct Point{ int x; int y;};
PS:坐标系的建立,如图
第2步:在地图上面运动,肯定就会涉及到方向的问题,我们来定义一个方向(这里方向直接是枚举成他们对应的码值)
enum EmDir{ emDirUp = 72, emDirDown = 80, emDirLeft = 75, emDirRight = 77,};
第3步: 定义蛇的结构
struct Snake{ int nCount; //蛇身体的长度,即包含了多少个点 Point pt[SNAKE_MAX];//保存蛇身体所有的坐标位置 EmDir dir;//蛇当前的运动方向};
第4步: 蛇是干什么来了,它是来吃食物的,那我们来定义一下食物的结构
struct Food{ Point fpt;//食物的坐标 char isEat;//食物是否被吃的标记(因为C语言中没有bool,也没有自定义一个类型,这里用char一个字节表示)};
至此,贪吃蛇游戏所需要的关键的结构已经完成了
接下来,我们用文字描述一下,流程执行的过程
while (1){ while (在用户没有按方向键) { 1. 判断是否食物已经被吃掉了,如果是,产生新的食物; 2. 绘制食物到屏幕上; 3. 如果当前蛇头和食物位置重合,把食物标记为被吃了; 4. 根据蛇之前的运动位置,修改蛇身体的坐标; 5. 绘制出当前的蛇到屏幕上; 6. 进行少量的延时Sleep; 7. 判断蛇头是否撞墙或者是撞到了自己的身体; } 8.如果用户输入了改变自己的方向,如果没有沿用原来的方向}
根据以上的结构和思路,可以参看贪吃蛇系列专栏,按照顺序进行阅读,因为C语言是面向过程的,所以从main函数入口开始往后读代码,基本是没有问题的。专栏中后面一篇文章是接着前面一篇文章往后写的,一直都最后设计出了具有较高智能的贪吃蛇。
贪吃蛇系列专栏链接:
http://blog.csdn.net/column/details/15572.html
另外:在 《贪吃蛇系列终章—-贪吃蛇专家智能bug修复版》这篇文章中,会对整个贪吃蛇系列进行总结:
链接:
http://blog.csdn.net/yi_ming_he/article/details/71189902
- 贪吃蛇系列开篇----设计智能贪吃蛇小游戏
- 智能贪吃蛇设计算法
- 小游戏 贪吃蛇
- 贪吃蛇小游戏
- 贪吃蛇小游戏
- 贪吃蛇小游戏
- Applet贪吃蛇小游戏
- 贪吃蛇小游戏记录:
- 贪吃蛇小游戏笔记
- [小游戏]贪吃蛇
- 经典贪吃蛇小游戏
- 贪吃蛇小游戏~
- 【java】贪吃蛇小游戏
- 【java】贪吃蛇小游戏
- javascript贪吃蛇小游戏
- 贪吃蛇简单小游戏
- java贪吃蛇小游戏
- javascript贪吃蛇小游戏
- 欢迎使用CSDN-markdown编辑器
- [转载]Python2.x和Python3.x的区别
- Spark搭建过程(小白带所有安装包)
- SAP HANA SQL获取某字符串的位置
- Python27 34 35 36安装scipy
- 贪吃蛇系列开篇----设计智能贪吃蛇小游戏
- XMPP协议介绍【2017/05/13】
- 阿里云短信服务 java
- LeetCode-E- Palindrome Number
- ACM省赛赛后总结
- shell printf命令:格式化输出语句
- 一文搞懂HMM(隐马尔可夫模型)--转自博客园
- 杭电ACM2025:查找最大元素
- 利用堆栈实现后缀表达式求值