游戏开发论坛

 找回密码
 立即注册
搜索
查看: 5816|回复: 17

[讨论] 呵呵呵呵呵呵呵呵

[复制链接]

23

主题

163

帖子

241

积分

中级会员

Rank: 3Rank: 3

积分
241
QQ
发表于 2006-1-20 20:32:00 | 显示全部楼层 |阅读模式
本帖最后由 pklinqi 于 2014-6-12 14:56 编辑

呵呵呵呵呵呵呵呵呵呵呵呵呵呵

227

主题

1793

帖子

1866

积分

金牌会员

Rank: 6Rank: 6

积分
1866
发表于 2006-1-20 20:58:00 | 显示全部楼层

Re:《高级战争》大家快来看

叫这个名字的游戏太多了……
你说的是哪个游戏?
哪个公式?

149

主题

4781

帖子

5094

积分

版主

Rank: 7Rank: 7Rank: 7

积分
5094
QQ
发表于 2006-1-20 21:53:00 | 显示全部楼层

Re:《高级战争》大家快来看

super pk....简称SP =.=

1

主题

14

帖子

14

积分

新手上路

Rank: 1

积分
14
发表于 2006-1-20 23:38:00 | 显示全部楼层

Re: 《高级战争》大家快来看

SLG中搜索某个角色可移动区域的算法
副标题:
作者:bb 文章来源:迷你手游 点击数:704 更新时间:2005-10-23




可根据地形的不同,以及角色能力的不同来判断可移动区域。例如骑士在平地上可以移动更大的范围。
代码如下:
/**
  * 搜索可走区域
  * @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*算法(以前有一位同事写过)。不过下次我会用递归算法来实现,速度更快,更简单。
差点忘记说明了以上得到的map数组怎么使用。这时一个记录了剩余移动力的数组。在显示可移动的区域的时候只要判断map里面的值是否为空,不为空就画出一个矩形,代表该区域可走。
/**
  * 走路
  * @param curX 当前位置 (x方向)
  * @param curY 当前位置 (y方向)
  * @param destX 目标位置(x方向)
  * @param destY 目标位置 (y方向)
  * @return 路径矢量
  */
public Vector scanPath(int curX, int curY, int destX, int destY){
  Vector vector = null;
  short dest[] = {
    (short)destX, (short)destY
  };
  if(curX == destX && curY == destY){
   vector = new Vector();
   vector.addElement((Object)dest);
   return vector;
  }
  byte byte0 = 0;
  byte byte1 = 0;
  byte byte2 = 0;
  byte byte3 = 0;
  if(destY > 0)
   byte0 = _mapped_terrains[destX][destY - 1];
  if(destY < _map_height - 1)
   byte1 = _mapped_terrains[destX][destY + 1];
  if(destX > 0)
   byte2 = _mapped_terrains[destX - 1][destY];
  if(destX < _map_width - 1)
   byte3 = _mapped_terrains[destX + 1][destY];
  int max = Math.max(Math.max((int)byte0, (int)byte1), Math.max((int)byte2, (int)byte3));
  if(max == byte0)
   vector = scanPath(curX, curY, destX, destY - 1);
  else
  if(max == byte1)
   vector = scanPath(curX, curY, destX, destY + 1);
  else
  if(max == byte2)
   vector = scanPath(curX, curY, destX - 1, destY);
  else
  if(max == byte3)
   vector = scanPath(curX, curY, destX + 1, destY);
  vector.addElement((Object)dest);
  return vector;
}
还记得上个帖子上函数中传入的map参数吗,实际上通过那个函数就可以得到一个map,然后应用于现在的找路算法中,也就是上面代码段看到的_mapped_terrains
还有两个陌生的变量就是 _map_height和_map_width ,这个很简单了,就是SLG地图中的长度和宽度。
呵呵,希望这些代码段对SLG的朋友有些帮助。

1

主题

14

帖子

14

积分

新手上路

Rank: 1

积分
14
发表于 2006-1-20 23:40:00 | 显示全部楼层

Re: 《高级战争》大家快来看

希望对你有帮助 [em13]

154

主题

4567

帖子

4579

积分

论坛元老

Rank: 8Rank: 8

积分
4579
QQ
发表于 2006-1-21 14:43:00 | 显示全部楼层

Re:《高级战争》大家快来看

高级战争,是有一堆小兵,坦克,飞机,战舰那个么

23

主题

163

帖子

241

积分

中级会员

Rank: 3Rank: 3

积分
241
QQ
 楼主| 发表于 2006-1-22 15:29:00 | 显示全部楼层

Re:《高级战争》大家快来看

GBA的高级战争,请大家帮帮忙啊!救急

227

主题

1793

帖子

1866

积分

金牌会员

Rank: 6Rank: 6

积分
1866
发表于 2006-1-22 17:43:00 | 显示全部楼层

Re:《高级战争》大家快来看

GBA的高级战争有两个
说ROM编号

154

主题

4567

帖子

4579

积分

论坛元老

Rank: 8Rank: 8

积分
4579
QQ
发表于 2006-1-22 23:57:00 | 显示全部楼层

Re:《高级战争》大家快来看

我玩的是AW2,画面挺不错的,游戏刚开始挺新鲜的。。。后期变成远程武器牵制+闪电突袭模式了,不好玩

23

主题

163

帖子

241

积分

中级会员

Rank: 3Rank: 3

积分
241
QQ
 楼主| 发表于 2006-1-23 10:49:00 | 显示全部楼层

Re:《高级战争》大家快来看

AW1,Advance Wars.gba不知道编号,是第一带。非2带
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-7-4 23:46

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表