3.2数据结构设计 节:一条蛇可以看成有许多正方形的“小格子”拼凑成,我把它称作节。节是蛇身上最小的单位。 内容来自论文无忧网 www.paper51.com
段:当许多节连成一条直线,我称它为段。贪吃蛇只有一段,如果它拐弯就变成两段。 paper51.com 链表:用来保存每一段的状态,链表的元素单位是段。且链表的最后一个元素表示蛇的头部段。 http://www.paper51.com 坐标系:MIDP中的坐标以左上角那点为(0,0),向右则x递增,向下则y递增。 paper51.com
这里讲解数据结构类中主要属性,其他方法将在后面讲解。 http://www.paper51.com 这里用一个SnakeLink类来表示一个蛇身体节点对象: copyright paper51.com public class SnakeLink { 内容来自论文无忧网 www.paper51.com private int x, y;//坐标 copyright paper51.com private int len;//长度 http://www.paper51.com private byte dir;//方向 copyright paper51.com private SnakeLink() { http://www.paper51.com } copyright paper51.com …… 内容来自www.paper51.com } copyright paper51.com
这里用SnakePit类来表示一个蛇对象的基本游戏属性: copyright paper51.com public class SnakePit extends Canvasimplements Runnable { copyright paper51.com //蛇的食物 paper51.com
private SnakeFood myFood; copyright paper51.com //当前蛇对象 paper51.com
private Snake mySnake; http://www.paper51.com //结束标志 内容来自www.paper51.com private boolean gameOver =false; 内容来自www.paper51.com //暂停标志 内容来自论文无忧网 www.paper51.com private boolean gamePaused =false; 内容来自www.paper51.com //重来标志 内容来自www.paper51.com private boolean gameRestart= false; 内容来自www.paper51.com //重画标志 内容来自www.paper51.com private boolean forceRedraw= true; 内容来自论文无忧网 www.paper51.com //退出游戏标志 copyright paper51.com
private booleangameDestroyed = false; http://www.paper51.com
//当前得分 copyright paper51.com
private int score = 0; 内容来自论文无忧网 www.paper51.com //当前等级 http://www.paper51.com private int level = 5; http://www.paper51.com //吃到多少食物 http://www.paper51.com private int foodEaten = 0; http://www.paper51.com
//当前屏幕象素宽 内容来自论文无忧网 www.paper51.com private int width; paper51.com //当前屏幕象素高 copyright paper51.com private int height; 内容来自www.paper51.com //音效对象 paper51.com private Player audioPlayer; 内容来自论文无忧网 www.paper51.com //音效对象 copyright paper51.com private Player tonePlayer; paper51.com //一个屏幕单元格宽 http://www.paper51.com static int CellWidth; copyright paper51.com //一个屏幕单元格高 copyright paper51.com static int CellHeight; paper51.com //初始蛇位置 paper51.com private static final intSTART_POS = 3; copyright paper51.com
//重画时间 内容来自www.paper51.com private static final intDEFAULT_WAIT = 400; paper51.com //最高难度 内容来自www.paper51.com static final byte MAX_LEVELS= 10; paper51.com
//食物颜色 内容来自www.paper51.com
static final intFOOD_COLOUR = 0x0000ff00; 内容来自www.paper51.com //文字颜色 http://www.paper51.com static final intTEXT_COLOUR = 0x00ff0000; http://www.paper51.com //擦除颜色 http://www.paper51.com static final intERASE_COLOUR = 0x00ffffff; paper51.com //蛇节点颜色 copyright paper51.com static final intDRAW_COLOUR = 0x00000000; 内容来自论文无忧网 www.paper51.com //一个单元大小 内容来自www.paper51.com public static final int CELL_SIZE = 5; paper51.com …… paper51.com
} paper51.com 最后一条蛇对象由Snake类将以上两个类又机组织在一起在游戏中使用。 paper51.com public class Snake { copyright paper51.com //方向常量 paper51.com public final static byteDOWN = 2; copyright paper51.com public final static byteLEFT = 4; 内容来自论文无忧网 www.paper51.com public final static byteRIGHT = 6; paper51.com public final static byte UP = 8; 内容来自www.paper51.com
// 蛇头当前方向 copyright paper51.com private bytecurrentDirection; 内容来自www.paper51.com // 用一个链表来存储蛇节点 内容来自论文无忧网 www.paper51.com
private Vector worm = newVector(5, 2); copyright paper51.com //是否需要更新 内容来自论文无忧网 www.paper51.com private boolean needUpdate; copyright paper51.com
//是否移动后更新 paper51.com private booleanmoveOnNextUpdate; 内容来自论文无忧网 www.paper51.com
//是否已经吃到食物 copyright paper51.com private boolean hasEaten; 内容来自www.paper51.com
…… 内容来自论文无忧网 www.paper51.com } paper51.com
同时蛇吃的食物对象数据结构用SnakeFood类来表示如下: 内容来自www.paper51.com public class SnakeFood { copyright paper51.com //当前食物所在的单元X坐标 内容来自论文无忧网 www.paper51.com private int cellX; 内容来自www.paper51.com //当前食物所在的单元Y坐标 paper51.com private int cellY; copyright paper51.com
...... copyright paper51.com } http://www.paper51.com |