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

本文详细介绍了贪吃蛇游戏中蛇身段落的实现方法,包括如何通过保存蛇身段的头部坐标、长度及移动方向来高效管理蛇的身体。文中还提供了关键函数的代码示例,如调整蛇身长度与检测坐标是否位于蛇身上的具体实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

贪吃蛇的算法分析(3) (转)[@more@]

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

贪吃蛇是由一节一节组成的。因为它经常有一些节连成一条直线形成段,所以这是一种相对有效的方法来保存整个蛇。[X,Y]表示段头部的坐标,然后段的头部开始按照方向向后画若干节。(段的头尾和蛇的头尾不是一个概念)

下面代码段是WormLink中的段得属性:

  // 段头部坐标

  private int x, y;

  // 段长度

   private int len;

  // 移动方向

  private byte dir;

下面重点介绍几个重要函数

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;  }

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())));

  }

public int getEndX()

得到这一段的尾部x坐标(段方向指向的最后一格的坐标),当这段是蛇的头部段时,得到的是头部最前面的坐标。

  // 不同的方向判断方法不一样

if (dir == Worm.LEFT)

    return x-len;

  if (dir == Worm.RIGHT)

    return x+len;

  return x;

 

关于作者:

沈晨,高级程序员,SCJP

www.chenshen.com

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

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



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

转载于:http://blog.itpub.net/10752043/viewspace-960866/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值