首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在网格中查找位置列表的算法

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

Stack Overflow用户
提问于 2015-12-10 13:37:01
回答 2查看 373关注 0票数 1

我正在网格上创建一个小的2D游戏(带有Javascript)。在这个游戏里,我有三种单元类型,比如说:

  • 绿色:射程为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,但在我看来,我的问题似乎更简单:

你能帮帮我吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-10 14:14:24

那这个呢?

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2015-12-10 14:52:15

根据单位瓷砖的颜色,设定值为range=1(绿色)、2(橙色)或3(蓝色)。

现在,范围(x,y)的所有瓷砖都是这样的:

代码语言:javascript
复制
x = targetX - range to targetX + range
y = targetY - range to targetY + range
and (x,y) is within board limits

会给出你所在单位可以射击的所有瓷砖。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34203339

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档