Algorithm 基于分片游戏的攻击范围描述算法

Algorithm 基于分片游戏的攻击范围描述算法,algorithm,Algorithm,我们目前正在开发一款基于平铺和回合的游戏。在我们的游戏中,有些角色可以从远处攻击其他人。然而,使用算法来描述攻击范围似乎有点困难。如下图所示,每个数字表示磁贴“0”与自身之间的范围 5 4 3 3 3 4 5 4 3 2 2 2 3 4 3 2 1 1 1 2 3 3 2 1 0 1 2 3 3 2 1 1 1 2 3 4 3 2 2 2 3 4 5 4 3 3 3 4 5 有可能实现这样的功能吗 int GetRange(常数网格和a、常数网格和b); 只需处理3种可能的情况: 当点位

我们目前正在开发一款基于平铺和回合的游戏。在我们的游戏中,有些角色可以从远处攻击其他人。然而,使用算法来描述攻击范围似乎有点困难。如下图所示,每个数字表示磁贴“0”与自身之间的范围

5 4 3 3 3 4 5 
4 3 2 2 2 3 4
3 2 1 1 1 2 3
3 2 1 0 1 2 3
3 2 1 1 1 2 3
4 3 2 2 2 3 4
5 4 3 3 3 4 5
有可能实现这样的功能吗


int GetRange(常数网格和a、常数网格和b);

只需处理3种可能的情况:

  • 当点位于同一水平线上时
  • 在同一条垂直线上
  • 所有其他情况
在C++中:

int GetRange(常数网格&a、常数网格&b){
int x=a.x-b.x,y=a.y-b.y;//获取x&y坐标的更改
如果(x==0)返回abs(y);
如果(y==0)返回abs(x);
否则返回(abs(x)+abs(y)-1);
}

只需处理3种可能的情况:

  • 当点位于同一水平线上时
  • 在同一条垂直线上
  • 所有其他情况
在C++中:

int GetRange(常数网格&a、常数网格&b){
int x=a.x-b.x,y=a.y-b.y;//获取x&y坐标的更改
如果(x==0)返回abs(y);
如果(y==0)返回abs(x);
否则返回(abs(x)+abs(y)-1);
}

范围是否仅限于此正方形,还是可以更大?如果是这样的话,你能提供一个更大的例子吗?@zapl,这不是欧几里德距离的运算wants@Vilx-,这个例子实际上已经足够大了,因为我们的游戏中没有太多瓷砖。因此,我们目前通过硬编码实现这些分幅:P@ronalchn如果OP想要精确的距离映射,则为true。四舍五入的欧几里德距离将非常相似,但范围是否仅限于此平方,或者它是否也可以更大?如果是这样的话,你能提供一个更大的例子吗?@zapl,这不是欧几里德距离的运算wants@Vilx-,这个例子实际上已经足够大了,因为我们的游戏中没有太多瓷砖。因此,我们目前通过硬编码实现这些分幅:P@ronalchn如果OP想要精确的距离映射,则为true。四舍五入的欧几里得距离将是非常相似的,虽然很好!这确实产生了OP所展示的结果。我只是想知道这是否也是更大范围所需要的。希望这篇文章能详细阐述。很好!这确实产生了OP所展示的结果。我只是想知道这是否也是更大范围所需要的。希望OP能详细说明。