ITPub博客

首页 > 应用开发 > IT综合 > 贪吃蛇的算法分析(3) (转)

贪吃蛇的算法分析(3) (转)

原创 IT综合 作者:amyz 时间:2007-11-13 13:02:12 0 删除 编辑
贪吃蛇的算法分析(3) (转)[@more@]

WormLink类XML:namespace prefix = o ns = "urn:schemas-microsoft-com:Office:office" />

贪吃蛇是由一节一节组成的。因为它经常有一些节连成一条直线形成段,所以这是一种相对有效的方法来保存整个蛇。[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

to:JinaShen@BenQ.com">JinaShen@BenQ.com

2003" Day="10" Month="8">August 10, 2003



来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/10752019/viewspace-982173/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
  • 博文量
    3982
  • 访问量
    7898948