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