Доступные ячейки

Доступные ячейки

> Программирование

Этот алгоритм направлен на поиск ячеек, до которых лук-порей может добраться, начиная с заданной ячейки и количества PM.

В результате функция принимает ячейку и число в качестве параметра и возвращает массив ячеек.

Если вам говорят о функциях «getAccessibleCells» или «getReachableCells» или о любом другом подобном имени, вы теперь будете знать, что это такое.

Использовать

С того момента, когда вы захотите спланировать свои поездки, эта функция будет иметь важное значение.

Знание клеток, в которые вы можете попасть, позволяет вам, например, выбрать клетку, в которой вы понесете наименьший потенциальный урон, или увидеть, куда вы можете двигаться, чтобы нанести урон противнику.

Этот алгоритм особенно используется в алгоритме Cache-cache (Le cache-cache).

Первые методы

Принцип

Само по себе довольно просто реализовать способ получения доступа к ячейкам. Самый простой способ — проверить расстояние до каждой ячейки на карте с помощью getPathLength.

Но эта функция имеет высокие эксплуатационные расходы. Так что используйте его на каждой ячейке карты... Ваше потребление операций резко возрастет.

Несколько более разумным решением было бы сначала найти ячейки в диапазоне PM, а затем проверить, что они доступны через getPathLength.

Если эти два решения осуществимы, их эксплуатационные расходы быстро становятся высокими.

Если вы новичок, и решение, которое мы собираемся обсудить ниже, все еще кажется немного сложным, сначала не стесняйтесь соглашаться на эти решения. В начале игры у вас не обязательно будет много вычислений, а на низком уровне у вас не будет большого количества MP. Таким образом, вы можете позволить себе использовать эти решения.

Проблема

Доступ к вашим клеткам с помощью этих методов будет без проблем.

Но первая проблема возникает, когда количество PM увеличивается. Чем выше он поднимется, тем, конечно, больше квадратов для проверки. В худшем случае, если вы пробежитесь по всей карте с помощью getPathLength, вы получите счет в около 4 миллионов операций, «всего».

Достаточно сказать, что это значительно сокращает количество операций, доступных для других алгоритмов, таких как Combos или Damage Map.

И это еще не все! Есть еще одна проблема: вы не одиноки в бою. Вам определенно нужно будет получить доступные ячейки ваших противников, чтобы иметь возможность защитить себя от их атак. А если разные луковицы начнут призывать луковицы, это еще больше ячеек для расчета.

Короче говоря, если вы захотите вычислить доступные ячейки всего этого мирка этими методами, это будет стоить вам гораздо больше, чем рука.

Таким образом, мы используем другой метод, гораздо более эффективный: Идти от соседа к соседу!

Соседний метод

Предпосылки

Во-первых, что такое «сосед»? Соседями ячейки являются просто соседние с ней ячейки. Причем речь явно идет о клетках, имеющих общую сторону, о клетках, которые находятся непосредственно рядом с ними, а не о тех, что по диагонали.

Таким образом, клетки, находящиеся в углах карты, имеют одного соседа. Ячейки по краям по две. А у всех остальных четыре.

Первое, что вам нужно знать, это извлекать соседей ячейки. Используя функции getCellX, getCellY и getCellFromXY, вы можете легко определить этих знаменитых соседей.

Как только вы сможете получить соседей ячейки, вам нужно определить, является ли эта ячейка «проходимой». Понятно, что если ячейка является препятствием или там находится лук-порей, ваш лук-порей не сможет двигаться по нему.

Чтобы это узнать, вам понадобятся функции isObstacle, isEmptyCell, isLeek или getCellContent.

Принцип

Принцип на самом деле довольно прост. Даже если это не обязательно легко настроить для новичка в программировании.

Таким образом, ваш лук-порей находится на клетке, и у него есть определенное количество 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 -Итерация" бор