当前位置: 首页 > 知识库问答 >
问题:

有没有一个有效的算法来计算哪些图块在二维网格中你的角色的设定步行距离内?

百里胜泫
2023-03-14

假设在20x20的二维网格上,角色位于位置(5,5)。

他能够在他的移动中走到4个瓷砖。然而,可能会有障碍物阻挡你的道路,比如一堵墙。

有没有什么有效/简单的方法可以准确计算出他可以走到哪些瓷砖上,而不必检查每一个可能的移动(例如,向上移动0并向右移动0,然后向上移动0并向右移动1 e.t.c)?

现在我在计算你可以带着这个可怕的东西走过的地方:

int playerx = GridPane.getRowIndex(button);
int playery = GridPane.getColumnIndex(button);
int position = playery*8+playerx;

for (int i = 0; i < 5; i++)
{
    for (int j = i-4; j < 5-i; j++)
    {
        try
        {
            int expectedCollumn  = playerx+j;
            int actualCollumn = ((position+i+j*8)-((position+i+j*8)%8))/8;
                if(expectedCollumn==actualCollumn)
                {
                    Button temp = (Button)gridPane.getChildren()
                                  .get(position+i+j*8);
                    if (!temp.getText().equals("W")  && 
                        !temp.getText().equals("P"))
                    {
                        temp.setText("T");
                    }
                }
                actualCollumn = ((position-i+j*8)-((position-i+j*8)%8))/8;
                if(expectedCollumn==actualCollumn)
                {
                    Button temp2 = (Button)
                    gridPane.getChildren().get(position-i+j*8);
                    if (!temp2.getText().equals("W") && 
                        !temp2.getText().equals("P"))
                    {
                        temp2.setText("T");
                    }
                }
        }
    }
}

然而,它显示,如果你能够走到墙的另一边,我不知道我将如何解决这个问题。

非常感谢。

共有2个答案

陶修洁
2023-03-14

感谢所有回答的人,但解决办法很简单

万一有人发现了这篇文章,并对它感兴趣,那只是一个简单的递归调用

void getReachableTiles(Tile current, Int stamina, List<Tile> visited, List<Tile> reachable) {
    if (stamina <= 0) return;

    List<Tile> neighbours = new List<>(current + up, current + left, ..)

    for (Tile t in neighbours) {
        if (!visited.contains(t)) {
            visited.append(t);
            if (!t.isWall()) {
                reachable.append(t);
                getReachableTiles(t, stamina - 1, visited, reachable);
            }
        }
    }
}
吴兴国
2023-03-14

对于路径查找,您应该弄清楚这是如何工作的:

https://en.wikipedia.org/wiki/Dijkstras_算法

然后转向A*或更有效的东西。

 类似资料:
  • 问题内容: 我对如何尽可能快地以numpy计算距离有疑问, 结果在以下时间: 虽然最后一个给出的是sqrt((VVm-VVs)^ 2 +(HHm-HHs)^ 2),而其他的给出的是(VVm-VVs)^ 2 +(HHm-HHs)^ 2,但这并不是很重要,因为否则在我的代码中,我将为每个i取R [i ,:]的最小值,而sqrt无论如何都不会影响最小值,(如果我对距离感兴趣,我只需取sqrt(value

  • 改变这个.. 对此..

  • 我要做的是找出在一个六角网格上,两点之间有多少个六边形。我试着在网上搜索一个公式,但我无法找到一个匹配类型的十六进制网格我正在使用。

  • 我想用Optaplanner解决VRP问题(添加一些内容)。在文档中,人们经常说,预先计算位置之间的距离,然后对每个位置使用

  • 我有一个六边形网格,就像图中的一样,我试图找到最简单的方法(也许是一个公式)来计算这个网格内两个六边形之间的距离。当然,我的网格的大小比这更大,但是当我们计算规则网格(有水平和垂直轴)中两个节点之间的距离时,我试图找到一个类似于欧几里得距离公式的公式。 我读了一些方法,但他们都说Y轴应该是60度,然后他们提供了一些公式(六角网格中瓷砖之间的曼哈顿距离)。是否有一种方法来计算距离使用“坐标系”相同,

  • 现在我有一个,那么有没有方法或类来计算这个字符串表达式并直接返回给我结果呢? 提前道谢!