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