贪吃蛇系列开篇----设计智能贪吃蛇小游戏

来源:互联网 发布:万德数据库破解版 编辑:程序博客网 时间: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

3 0