Células acessíveis

células acessíveis

> Programação

Este algoritmo visa encontrar as células que um alho-poró pode alcançar a partir de uma determinada célula e número de PM.

Isso resulta em uma função que recebe uma célula e um número como parâmetro e que retornará uma matriz de células.

Se você for informado sobre as funções "getAccessibleCells" ou "getReachableCells", ou qualquer outro nome semelhante, agora você saberá o que é.

Usar

A partir do momento que você deseja planejar suas viagens, esta função será essencial.

Conhecer as células para onde você pode ir permite, por exemplo, escolher a célula onde sofrerá o menor dano potencial ou ver para onde você pode se mover para infligir danos ao seu oponente.

Este algoritmo é usado principalmente no algoritmo Cache-cache (Le cache-cache).

Primeiros métodos

Princípio

Por si só, é bastante simples implementar uma maneira de tornar as células acessíveis. O método mais simples é testar a distância para cada célula no mapa usando getPathLength.

Mas esta função tem um alto custo operacional. Portanto, use-o em todas as células do mapa... Seu consumo de operação dispararia.

Uma solução um pouco mais inteligente seria primeiro encontrar as células dentro do alcance de PM e, em seguida, verificar se elas podem ser acessadas por meio de getPathLength.

Se essas duas soluções forem viáveis, elas têm um custo operacional que rapidamente se torna alto.

Se você é iniciante e a solução que discutiremos a seguir ainda parece um pouco complicada, fique à vontade para se contentar com essas soluções primeiro. No início do jogo, você não terá necessariamente muitos cálculos a fazer e, em nível baixo, não terá uma grande quantidade de MP. Portanto, você pode se dar ao luxo de usar essas soluções.

O problema

Tornar suas células acessíveis por meio desses métodos será descomplicado.

Mas um primeiro problema surge quando seu número de PM aumenta. Quanto mais alto ele subir, mais quadrados haverá para testar, é claro. Na pior das hipóteses, se você percorrer todo o mapa com getPathLength, deverá acabar com uma conta de cerca de 4 milhões de operações, "apenas".

Basta dizer que isso reduz bastante as operações disponíveis para outros algoritmos, como Combos ou o Mapa de dano.

E isso não é tudo ! Há outro problema: você não está sozinho em uma luta. Você definitivamente precisará obter as células acessíveis de seus oponentes para poder se proteger de seus ataques. E se os vários alhos-porós começarem a invocar bulbos, haverá ainda mais células para calcular.

Resumindo, se você começar a querer calcular as células acessíveis de todo esse mundinho com esses métodos, vai te custar muito mais que um braço.

Assim, utilizamos outro método, muito mais eficaz: Vá de vizinho em vizinho!

Método vizinho

Pré-requisitos

Primeiro, o que é um "próximo"? Os vizinhos de uma célula são simplesmente as células adjacentes a ela. E obviamente estamos falando das células que têm um lado comum, as células que estão diretamente próximas a elas, e não as que estão na diagonal.

Assim, as células que estão nos cantos do mapa possuem um único vizinho. As células nas bordas têm dois. E todos os outros têm quatro.

A primeira coisa que você precisa saber fazer é recuperar os vizinhos de uma célula. Usando as funções getCellX, getCellY e getCellFromXY, você pode facilmente determinar esses famosos vizinhos.

Depois de recuperar os vizinhos de uma célula, você precisa determinar se essa célula é "aceitável". Claramente, se a célula for um obstáculo ou se houver um alho-poró, seu alho-poró não será capaz de se mover sobre ela.

Para saber isso, você precisará das funções isObstacle, isEmptyCell, isLeek ou getCellContent.

Princípio

O princípio é realmente bastante simples. Mesmo que não seja necessariamente fácil de configurar para um iniciante em programação.

Seu alho-poró está, portanto, em uma célula e tem um certo número de MP para mover. A célula em que está atualmente está a uma distância de 0 PM; Até agora tudo bem...

Se o seu alho-poró tiver 1 MP, para onde ele pode se mover? Bem, nos vizinhos livres de sua cela inicial.

E se ele tiver 2 MP? Ele pode, portanto, se mover por 1 PM nos vizinhos livres de sua célula inicial. Mas também, para 2 PM, nos vizinhos livres dos vizinhos livres da célula inicial.

E assim por diante...

<img src="https://i.ibb.co/7jdzBZr/Tuto-Cell-Accessible-Iteration.gif" alt="Tuto-Cell-Accessible -Iteração" bor