Tillgängliga celler

Tillgängliga celler

> Programmering

Denna algoritm syftar till att hitta cellerna som en purjolök kan nå utgående från en given cell och antalet PM.

Detta resulterar i att en funktion tar en cell och ett tal som en parameter, och som returnerar en array av celler.

Om du får veta om funktionerna "getAccessibleCells" eller "getReachableCells", eller något annat liknande namn, kommer du nu att veta vad det är.

Använda sig av

Från det ögonblick du vill planera dina resor kommer denna funktion att vara väsentlig.

Att känna till cellerna dit du kan gå gör att du till exempel kan välja den cell där du kommer att drabbas av minst potentiell skada, eller att se var du kan flytta för att skada din motståndare.

Denna algoritm används särskilt i cache-cache-algoritmen (Le cache-cache).

Första metoderna

Princip

I sig är det ganska enkelt att implementera ett sätt att få cellerna tillgängliga. Den enklaste metoden är att testa avståndet till varje cell på kartan med getPathLength.

Men denna funktion har en hög driftskostnad. Så använd den på varje cell på kartan... Din driftförbrukning skulle skjuta i höjden.

En lite smartare lösning skulle vara att först hitta cellerna inom räckvidden av PM och sedan kontrollera att de är nåbara via getPathLength.

Om dessa två lösningar är genomförbara har de en driftskostnad som snabbt blir hög.

Om du är nybörjare och lösningen vi ska diskutera i det följande fortfarande verkar lite komplicerad, nöj dig gärna med dessa lösningar till en början. I början av spelet behöver du inte nödvändigtvis ha många beräkningar att göra, och på låg nivå har du inte en stor mängd MP. Så du har råd att använda dessa lösningar.

Problemet

Att få dina celler tillgängliga med dessa metoder kommer att vara problemfritt.

Men ett första problem uppstår när ditt antal PM ökar. Ju högre han klättrar, desto fler rutor blir det att testa, förstås. I värsta fall, om du kör igenom hela kartan med getPathLength, borde du få en räkning på ca 4 miljoner operationer, "bara".

Det räcker med att säga att detta avsevärt minskar de tillgängliga operationerna för andra algoritmer som Combos, eller Damage Map.

Och det är inte allt! Det finns ett annat problem: du är inte ensam i en kamp. Du kommer absolut behöva skaffa dina motståndares tillgängliga celler för att kunna skydda dig från deras attacker. Och om de olika purjolökarna börjar framkalla lökar är det ännu fler celler att beräkna.

Kort sagt, om du börjar vilja beräkna de tillgängliga cellerna i hela denna lilla värld med dessa metoder, kommer det att kosta dig mycket mer än en arm.

Därför använder vi en annan metod, mycket effektivare: Gå från granne till granne!

Grannmetoden

Förutsättningar

För det första, vad är en "granne"? En cells grannar är helt enkelt cellerna intill den. Och vi talar uppenbarligen om cellerna som har en gemensam sida, cellerna som ligger direkt bredvid dem, och inte de diagonalt.

Således har cellerna som finns i kartans hörn en enda granne. Celler på kanterna har två. Och alla andra har fyra.

Det första du behöver veta hur du gör är att hämta grannarna till en cell. Genom att använda funktionerna getCellX, getCellY och getCellFromXY, kan du enkelt bestämma dessa berömda grannar.

När du kan hämta en cells grannar måste du avgöra om den cellen är "framkomlig". Uppenbarligen, om cellen är ett hinder eller en purjolök är där, kommer din purjolök inte att kunna flytta på den.

För att veta detta behöver du funktionerna isObstacle, isEmptyCell, isLeek eller getCellContent.

Princip

Principen är faktiskt ganska enkel. Även om det inte nödvändigtvis är lätt att ställa in för en nybörjare inom programmering.

Din purjolök är därför på en cell, och den har ett visst antal MP att flytta. Cellen den är på är på avståndet 0 PM; Än så länge är allt bra...

Om din purjolök har 1 MP, vart kan den flytta sig? Tja, på de fria grannarna till hans startcell.

Tänk om han har 2 MP? Den kan därför röra sig 1 PM på de fria grannarna till sin startcell. Men också, för 2 PM, på de fria grannarna till startcellens fria grannar.

Och så vidare...

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