可访问的单元格

可访问的单元格

> 编程

该算法旨在从给定的单元格和 PM 的数量开始找到韭菜可以到达的单元格。

这导致一个函数将一个单元格和一个数字作为参数,并将返回一个单元格数组。

如果您听说过“getAccessibleCells”或“getReachableCells”函数或任何其他类似名称,您现在就会知道它是什么了。

## 使用

从您计划旅行的那一刻起,此功能就必不可少。

例如,了解您可以去的单元格可以让您选择您将受到的潜在伤害最小的单元格,或者查看您可以移动到哪里对对手造成伤害。

该算法主要用于 Cache-cache 算法 (Le cache-cache)。

第一种方法

### 原则

就其本身而言,实现一种使单元可访问的方法非常简单。最简单的方法是使用 getPathLength 测试到地图上每个单元格的距离。

但是这个功能有很高的运营成本。所以在地图的每个单元格上使用它......你的操作消耗会飙升。

一个稍微聪明的解决方案是首先找到 PM 范围内的单元格,然后检查它们是否可以通过 getPathLength 到达。

如果这两种解决方案可行,它们的运营成本会迅速变高。

如果您是初学者,而我们接下来要讨论的解决方案似乎仍然有些复杂,请先接受这些解决方案。 游戏开始时,你不一定会有很多计算,在低等级时,你不会有大量的MP。因此,您可以负担得起使用这些解决方案。

## 问题

通过这些方法可以轻松访问您的细胞。

但是,当您的 PM 数量增加时,就会出现第一个问题。当然,他爬得越高,要测试的方块就越多。在最坏的情况下,如果您使用 getPathLength 遍历整个地图,您最终应该“仅”得到大约 400 万次操作的账单。

可以说这大大减少了其他算法可用的操作,例如 CombosDamage Map

这还不是全部!还有一个问题:你不是一个人在战斗。 您绝对需要让对手的可访问单元能够保护自己免受他们的攻击。 如果各种韭菜开始召唤球茎,则需要计算更多的细胞。

简而言之,如果你开始想要用这些方法来计算这个小世界的所有可访问单元格,那将比你花费更多的钱。

因此,我们使用另一种方法,更有效:从邻居到邻居!

邻居方法

####先决条件

首先,什么是“邻居”? 单元格的邻居只是与它相邻的单元格。 我们显然是在谈论具有公共边的单元格,即紧挨着它们的单元格,而不是那些对角线的单元格。

因此,位于地图角落的单元格只有一个邻居。边缘的单元格有两个。其他人都有四个。

您需要知道如何做的第一件事是检索单元格的邻居。 通过使用函数 getCellXgetCellYgetCellFromXY,您可以轻松确定这些著名的邻居。

一旦可以检索单元格的邻居,就需要确定该单元格是否“可通过”。 显然,如果单元格是障碍物或韭菜在那里,你的韭菜将无法在其上移动。

要了解这一点,您将需要函数 isObstacleisEmptyCellisLeekgetCellContent

#### 原则

原理其实很简单。即使对于编程初学者来说也不一定容易设置。

因此,你的韭菜在一个单元格上,它有一定数量的 MP 可以移动。 它当前所在的小区距离为 0 PM;到目前为止,一切都很好...

如果你的韭菜有 1 MP,它可以移动到哪里?好吧,在他的起始牢房的自由邻居身上。

如果他有 2 MP 怎么办?因此,它可以在其起始单元格的空闲邻居上移动 1 PM。而且,对于 2 PM,在起始单元格的自由邻居的自由邻居上。

等等...

<img src="https://i.ibb.co/7jdzBZr/Tuto-Cell-Accessible-Iteration.gif" alt="Tuto-Cell-Accessible -迭代"bor