WormLink类
贪吃蛇是由一节一节组成的。因为它经常有一些节连成一条直线形成段,所以这是一种相对有效的方法来保存整个蛇。[X,Y]表示段头部的坐标,然后段的头部开始按照方向向后画若干节。(段的头尾和蛇的头尾不是一个概念)
下面代码段是WormLink中的段得属性:
// 段头部坐标 private int x, y; // 段长度 private int len; // 移动方向 private byte dir; |
下面重点介绍几个重要函数:
l public void decreaseLength()
这是从段的头部减少一格
// 首先段的总长度减少1 len--; switch (dir) { // 不同的方向左边的改变也不一样 case Worm.LEFT: x--; break; case Worm.RIGHT: x++; break; case Worm.UP: y--; break; case Worm.DOWN: y++; break; } |
l public boolean contains(int x, int y)
判断所给的坐标[x,y]是否包含在段中
switch (dir) { // 不同的方向判断的方法也不一样 case Worm.LEFT: return ((y == this.y) && ((x <= this.x) && (x >= getEndX()))); case Worm.RIGHT: return ((y == this.y) && ((x >= this.x) && (x <= getEndX()))); case Worm.UP: return ((x == this.x) && ((y <= this.y) && (y >= getEndY()))); case Worm.DOWN: return ((x == this.x) && ((y >= this.y) && (y <= getEndY()))); } |
l public int getEndX()
得到这一段的尾部x坐标(段方向指向的最后一格的坐标),当这段是蛇的头部段时,得到的是头部最前面的坐标。
// 不同的方向判断方法不一样 if (dir == Worm.LEFT) return x-len; if (dir == Worm.RIGHT) return x+len; return x; |
关于作者:
沈晨,高级程序员,SCJP
August 10, 2003