在网格上查找位置列表的算法

时间:2015-12-10 13:37:02

标签: algorithm

我正在网格上创建一个小型2D游戏(使用Javascript)。在这个游戏中,我有3种单位类型,比方说:

  • 绿色:单位拍摄范围为1个图块(可以攻击目标1个图块)
  • 橙色:具有2个图块的拍摄范围的单位
  • 蓝色:具有3个图块
  • 的镜头范围的单位

这是一个架构: grid game schema

黑色方块是目标。 灰色一个就是单位。

单位的运动是好的,我可以在我想要的时候在观察广场上移动。目标是固定的。

我的问题是: 如何根据单位颜色(范围1,2或3)找到单位能够拍摄的所有图块?

我的意思是:

  • 蓝色单位可以拍摄:蓝色,橙色和绿色瓷砖
  • 橙色单位可以拍摄:橙色和绿色瓷砖
  • 绿色单位可以拍摄:绿色瓷砖

我虽然有一个带有两个嵌套循环的丑陋解决方案但是,也许有一个已知算法可以做到这一点......

我有一个(x,y)位置的目标和单位

我看到了这一个Algorithm for finding spaces to attack target within move-attack area on a 2D grid game board但我的问题在我看来更简单:

你能帮助我吗?

2 个答案:

答案 0 :(得分:1)

这个怎么样?

boolean canShot(Unit unit, Target target){
    if ((unit.minimumShotDistance <= Math.abs(unit.position.x - target.position.x) && 
         unit.minimumShotDistance <= Math.abs(unit.position.y - target.position.y)){
        return true;
    }
    return false;
}

答案 1 :(得分:0)

根据单位图块的颜色,设置范围值= 1(绿色),2(橙色)或3(蓝色)。

现在,范围(x,y)中的所有切片都是这样的:

x = targetX - range to targetX + range
y = targetY - range to targetY + range
and (x,y) is within board limits

将提供您的单位可以拍摄的所有图块。

如果你想知道无论是从目前的位置,单位是否可以射击目标,检查单位的坐标(x,y)是否满足上述条件。