贪吃蛇的算法分析(3)

王朝java/jsp·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

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

www.chenshen.com

JinaShen@BenQ.com

August 10, 2003

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航