网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.使用JSF(Java Server Faces)开.
.怎样使用Junit Framework进行单元.
.wait()和notify()的简单调用程序.
.Java深入:在Eclipse中如何利用M.
.EJB 自管理的事务.
.Java 的 finalize()用途何在.
.百分之百纯Java(TM)--名词解释.
.TrustedApplet的制作和运行.
.用SQLJ开发数据库(3).
.Java中鲜为人知的缺点(中).
.为什么要学习Java,成为Java程序.
.使用JavaMail实现收发电子邮件功.
.如何在Java应用程序中播放声音文.
.Struts入门经验(二).
.原创-Effective java学习笔记3:用.
.J2ME的体系结构.
.Thinking in Java (the 2nd edit.
.JDBC基础教程之连接.
.程序分享:从UDDI注册中心查询服.
.java api混排算法.

基于Binary Heap的A*算法

发表日期:2008-1-5


--------------代码来源于网络-----------------------

最近比较空闲,研究了一下手机游戏中的寻路算法

小地图中,解决的方式就不说了,怎么解决都差不多,假如地图比较大,就要好好考虑了

gameloft的彩虹六号里面的寻路算法就很经典,但据说他们是发明了一种专利算法,具体的我就不知道了~但我估计应该是在地图里面设置了一些路点之类的标志。。。。。

我今天贴的代码完全是别人的代码,我也没改动,也没有测试过内存占用,紧紧提供给大家一个大体思路,各位兄弟具体使用时肯定还需要修改的。尤其对于内存资源比较紧张的手机来说,A*算法的改进绝对值得各位好好研究

相关资料:

A*寻路算法(For 初学者)

在A*寻路中使用二*堆

Enjoy:)

--------------------------source code----------------------------------------------

/**
* AStar pathfinding algorithm
*/
public class AStar {
private Square[][] squares;

public static final byte WALL = 0x1, BLANK = 0x0;

public static final byte WALL_MASK = (byte) 0xf;

public static final byte OPEN_MASK = (byte) 0x80;

public static final byte CLOSED_MASK = (byte) 0x40;

private byte[][] map;

private Square lStart;

private Square lEnd;

private static final byte ORTHOGONAL_COST = 1;

byte height;

byte width;

// Binary Heap
public Square[] heapTree;

public int heapSize;

boolean first = true;

void updateMap(byte[][] mapMatrix) {
  if (map != null) {
   map = null;
   releaseFind();
  } else {
   lStart = new Square((byte) 0, (byte) 0, (byte) 0, (byte) 0);
   lEnd = new Square((byte) 0, (byte) 0, (byte) 0, (byte) 0);

   heapTree = new Square[height * width + 1];
   squares = new Square[height][width];
  }
  map = mapMatrix;
}

public void releaseFind() {
  int i, j;
  for (i = 0; i < height; i++) {
   for (j = 0; j < width; j++) {
    squares[i][j] = null;
   }
  }

  for (i = 0; i < heapTree.length; i++) {
   heapTree[i] = null;
  }
}

public Square findPath(byte sy, byte sx, byte ey, byte ex, boolean canfly) {
  lStart.X = sx;
  lStart.Y = sy;
  lEnd.X = ex;
  lEnd.Y = ey;
  if (canfly) {
   Square sqr, last;
   last = lStart;
   int sign;
   if (ex != sx) {
    sign = (ex - sx) / Math.abs(ex - sx);
    for (byte i = (byte) (sx + sign); i != ex; i += sign) {
     sqr = new Square(sy, i, (byte) 0, (byte) 0);
     sqr.parent = last;
     last = sqr;
    }
   }
   if (ey != sy) {
    sign = (ey - sy) / Math.abs(ey - sy);
    for (byte i = (byte) (sy); i != ey; i += sign) {
     sqr = new Square(i, ex, (byte) 0, (byte) 0);
     sqr.parent = last;
     last = sqr;
    }
   }
   lEnd.parent = last;
   return lEnd;
  }


上一篇:构建N840手机应用开发环境 人气:594
下一篇:候捷谈Java反射机制 人气:2076
浏览全部Java的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐