WEB开发网
开发学院WEB开发Jsp SLG中搜索某个角色可移动区域的算法 阅读

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

 2008-01-05 08:52:12 来源:WEB开发网   
核心提示:可根据地形的不同,以及角色能力的不同来判定可移动区域,SLG中搜索某个角色可移动区域的算法,例如骑士在平地上可以移动更大的范围,代码如下: /** * 搜索可走区域 * @param map 当前地图表 * @param row 行 * @param col 列 * @param locomotivity 该

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

代码如下:

 /**
  * 搜索可走区域
  * @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*算法(以前有一位同事写过)。不过下次我会用递归算法来实现,速度更快,更简单。


Tags:SLG 搜索 某个

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接