Tilgjengelige celler

Tilgjengelige celler

> Programmering

Denne algoritmen tar sikte på å finne cellene som en purre kan nå fra en gitt celle og antall PM.

Dette resulterer i at en funksjon tar en celle og et tall som en parameter, og som vil returnere en rekke celler.

Hvis du blir fortalt om funksjonene "getAccessibleCells" eller "getReachableCells", eller et annet lignende navn, vil du nå vite hva det er.

Bruk

Fra det øyeblikket du ønsker å planlegge turene dine, vil denne funksjonen være avgjørende.

Å kjenne til cellene hvor du kan gå, lar deg for eksempel velge cellen der du vil lide minst mulig skade, eller å se hvor du kan flytte for å påføre motstanderen din skade.

Denne algoritmen brukes spesielt i Cache-cache-algoritmen (Le cache-cache).

De første metodene

Prinsipp

I seg selv er det ganske enkelt å implementere en måte å få cellene tilgjengelige på. Den enkleste metoden er å teste avstanden til hver celle på kartet ved å bruke getPathLength.

Men denne funksjonen har høye driftskostnader. Så bruk det på hver celle på kartet... Driftsforbruket ditt vil skyte i været.

En litt smartere løsning ville være å først finne cellene innenfor rekkevidde av PM, og deretter sjekke at de er tilgjengelige via getPathLength.

Dersom disse to løsningene er gjennomførbare, har de en driftskostnad som raskt blir høy.

Hvis du er en nybegynner og løsningen vi skal diskutere i det følgende fortsatt virker litt komplisert, må du gjerne nøye deg med disse løsningene med det første. I begynnelsen av spillet vil du ikke nødvendigvis ha mange beregninger å gjøre, og på lavt nivå vil du ikke ha en stor mengde MP. Så du har råd til å bruke disse løsningene.

Problemet

Å få cellene dine tilgjengelige gjennom disse metodene vil være problemfritt.

Men et første problem oppstår når antallet PM øker. Jo høyere han klatrer, jo flere ruter blir det selvfølgelig å teste. I verste fall, hvis du kjører gjennom hele kartet med getPathLength, bør du ende opp med en regning på omtrent 4 millioner operasjoner, «bare».

Det er nok å si at dette i stor grad reduserer operasjonene som er tilgjengelige for andre algoritmer som Combos, eller Damage Map.

Og det er ikke alt! Det er et annet problem: Du er ikke alene i en kamp. Du vil definitivt trenge å få motstandernes tilgjengelige celler for å kunne beskytte deg mot angrepene deres. Og hvis de forskjellige purrene begynner å tilkalle løk, er det enda flere celler å beregne.

Kort sagt, hvis du begynner å ønske å beregne de tilgjengelige cellene i hele denne lille verden med disse metodene, vil det koste deg mye mer enn en arm.

Dermed bruker vi en annen metode, mye mer effektiv: Gå fra nabo til nabo!

Nabometoden

Forutsetninger

For det første, hva er en "nabo"? Naboene til en celle er ganske enkelt cellene ved siden av den. Og vi snakker åpenbart om cellene som har en felles side, cellene som er rett ved siden av dem, og ikke de diagonalt.

Dermed har cellene som er i hjørnene av kartet en enkelt nabo. Celler på kantene har to. Og alle de andre har fire.

Det første du må vite hvordan du gjør er å hente naboene til en celle. Ved å bruke funksjonene getCellX, getCellY og getCellFromXY, kan du enkelt finne disse kjente naboene.

Når du kan hente en celles naboer, må du finne ut om den cellen er "passbar". Det er klart, hvis cellen er en hindring eller en purre er der, vil purren din ikke kunne bevege seg på den.

For å vite dette trenger du funksjonene isObstacle, isEmptyCell, isLeek eller getCellContent.

Prinsipp

Prinsippet er egentlig ganske enkelt. Selv om det ikke nødvendigvis er enkelt å sette opp for en nybegynner innen programmering.

Purren din er derfor på en celle, og den har et visst antall MP å flytte. Cellen den er på er i en avstand på 0 PM; Så langt så bra...

Hvis purren din har 1 MP, hvor kan den flytte seg? Vel, på de ledige naboene til startcellen hans.

Hva om han har 2 MP? Den kan derfor bevege seg i 1 PM på de ledige naboene til startcellen. Men også, for 2 PM, på de frie naboene til de frie naboene til startcellen.

Og så videre...

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