【问题标题】:Algorithm to find positions list on a grid在网格上查找位置列表的算法
【发布时间】:2016-03-16 04:10:37
【问题描述】:

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

  • 绿色:射击范围为 1 格的单位(他们可以攻击周围 1 格的目标)
  • 橙色:射程为 2 格的单位
  • 蓝色:射程为 3 格的单位

这是一个架构:

黑色方块是目标。 灰色是单位。

单位的移动是好的,我可以在任何时候移动。目标是固定的。

我的问题是: 如何根据单位颜色(范围 1,2 或 3)找到单位可以射击的所有图块?

我的意思是:

  • 蓝色单位可以从以下位置射击:蓝色、橙色和绿色瓷砖
  • 橙色单位可以从以下位置射击:橙色和绿色瓷砖
  • 绿色单位可以从以下位置射击:绿色瓷砖

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

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

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

你能帮帮我吗?

【问题讨论】:

  • 将坐标系的原点(即点(0,0))设置为黑色方块的位置,问题就变得简单了。
  • 从目标端看问题;)
  • 7x7 的嵌套循环没有什么真正的问题。在任何机器上使用任何语言的任何方法都可能花费不到一毫秒的时间。

标签: algorithm


【解决方案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;
}

【讨论】:

    【解决方案2】:

    根据单元格的颜色,设置范围值=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)是否满足上述条件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多