网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
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,移动开发
本月文章推荐
.Test of the Java Skill(2).
.Java初学者容易混淆的几个问题.
.equals与“==”操作符的比较.
.我的Java培训与学习之路.
.PHP4调用JavaBean的摸索(续).
.用Servlets实现Web方式的文件下载.
.Java与JavaScript的通信lixiaolo.
.JFC/Swing活学活用JLabel文字魔法.
.阴阳历算法(转).
.配置JDK / JAVA.
.应用:Tomcat5配置Mysql JDBC数据.
.实例讲解:Java中的SOAP技术.
.有选择地显示预加载内容提高网站.
.AOP如何与J2EE实行高效的无缝结合.
.J2EE 1.4 的新特性完全展播.
.程序员的七大武器.
.用JVM工具接口创建调试和分析代理.
.JAVA:Filter编码器.
.java操作mssql2000的小例子.
.慎防恶意的JavaApplet.

SLG中搜索某个角色可移动区域的算法

发表日期:2008-1-5


可根据地形的不同,以及角色能力的不同来判定可移动区域。例如骑士在平地上可以移动更大的范围。

代码如下:

 /**
  * 搜索可走区域
  * @param map 当前地图表
  * @param row 行
  * @param col 列
  * @param locomotivity 该角色的默认移动力
  * @param direction 方向
  */
 public void scanMovableArea(byte map[][], int row, int col, int locomotivity, int direction){
  if(locomotivity > map[row][col])
   map[row][col] = (byte)locomotivity;
  else
   return;
  
  /** 向上判定 **/
  if(direction != 1){
   int loco1 = locomotivity - mapEXPendLocomotivity(row, col - 1);
   if(loco1 >=0)
    scanMovableArea(map, row, col - 1, loco1, 2);
  }
  
  /** 向下判定 **/
  if(direction != 2){
   int loco2 = locomotivity - mapExpendLocomotivity(row, col + 1);
   if(loco2 >= 0)
    scanMovableArea(map, row, col + 1, loco2, 1);
  }
  
  /** 向左判定 **/
  if(direction != 4){
   int loco3 = locomotivity - mapExpendLocomotivity(row - 1, col);
   if(loco3 >= 0)
    scanMovableArea(map, row - 1, col, loco3, 8);
  }
  
  /** 向右判定 **/
  if(direction != 8){
   int loco4 = locomotivity - mapExpendLocomotivity(row + 1, col);
   if(loco4 >= 0)
    scanMovableArea(map, row + 1, col, loco4, 4);
  }
 }

----------------------------------------------

 /**
  * 地形对移动力的消耗
  * @param row 行
  * @param col 列
  * @return 移动力消耗值
  */

public int mapExpendLocomotivity(int row, int col){

   //这里我就不一一实现了,有爱好的朋友可以自己扩展这个方法。

   //下面给个伪代码

   //假如是草地

  if(gameMap[row][col] == GAME_MAP_GRASS){

    //假如是士兵


   if(type == SOLIDER){
    return 1;
    }
  }

   //超出边界

  if(row < 0 col < 0 row > gameWidth col > gameHeight)

  {

      return 1000;

  }

  //具体的情况各位朋友可以根据自己的游戏来设计。

}

找到可以移动的区域后,就可以确定要移动的具体位置。这时候又要涉及到找路算法了。对于与A*算法(以前有一位同事写过)。不过下次我会用递归算法来实现,速度更快,更简单。


上一篇:Nokia开发者平台Series60介绍 人气:874
下一篇:看例子练apache commons之lang篇 人气:1333
浏览全部Java的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐