Käytettävissä olevat solut

Käytettävissä olevat solut

> Ohjelmointi

Tämä algoritmi pyrkii löytämään solut, jotka purjo voi saavuttaa annetusta solusta ja PM-määrästä alkaen.

Tämä johtaa siihen, että funktio ottaa solun ja luvun parametriksi ja palauttaa solujoukon.

Jos sinulle kerrotaan "getAccessibleCells"- tai "getReachableCells"-funktioista tai mistä tahansa muusta vastaavasta nimestä, tiedät nyt, mikä se on.

Käytä

Tästä hetkestä lähtien, kun haluat suunnitella matkojasi, tämä toiminto on välttämätön.

Kun tiedät solut, joihin voit mennä, voit esimerkiksi valita solun, jossa kärsit vähiten mahdollisia vahinkoja, tai nähdä, minne voit siirtyä aiheuttamaan vahinkoa vastustajallesi.

Tätä algoritmia käytetään erityisesti Cache-cache-algoritmissa (Le cache-cache).

Ensimmäiset menetelmät

Periaate

Sinänsä on melko yksinkertaista toteuttaa tapa saada solut saataville. Yksinkertaisin tapa on testata etäisyys kartan jokaiseen soluun käyttämällä getPathLength.

Mutta tällä toiminnolla on korkeat käyttökustannukset. Joten käytä sitä kartan jokaisessa solussa... Toimintasi kulutus kasvaisi pilviin.

Hieman älykkäämpi ratkaisu olisi etsiä ensin solut PM:n alueelta ja tarkistaa sitten, että ne ovat tavoitettavissa getPathLength:n kautta.

Jos nämä kaksi ratkaisua ovat toteuttamiskelpoisia, niillä on nopeasti korkeat käyttökustannukset.

Jos olet aloittelija ja seuraavassa keskustelemamme ratkaisu vaikuttaa vielä hieman monimutkaiselta, voit tyytyä aluksi näihin ratkaisuihin. Pelin alussa sinulla ei välttämättä tarvitse tehdä paljon laskelmia, ja alhaisella tasolla sinulla ei ole paljon MP. Joten sinulla on varaa käyttää näitä ratkaisuja.

Ongelma

Solujen saaminen saataville näillä menetelmillä on vaivatonta.

Mutta ensimmäinen ongelma syntyy, kun PM-määräsi kasvaa. Mitä korkeammalle hän kiipeää, sitä enemmän ruutuja on tietysti testattavana. Pahimmassa tapauksessa, jos käyt läpi koko kartan getPathLength:lla, sinun pitäisi päätyä noin 4 miljoonan toimenpiteen laskuun, "vain".

Riittää, kun sanotaan, että tämä vähentää huomattavasti muiden algoritmien, kuten Yhdistelmät tai Vahinkokartta -toimintoja.

Eikä siinä vielä kaikki ! On toinenkin ongelma: et ole yksin taistelussa. Sinun on ehdottomasti hankittava vastustajiesi solut, jotta voit suojautua heidän hyökkäyksiltäsi. Ja jos erilaiset purjot alkavat kutsua sipuleita, on vielä enemmän laskettavia soluja.

Lyhyesti sanottuna, jos alat haluta laskea koko tämän pienen maailman saatavilla olevat solut näillä menetelmillä, se maksaa sinulle paljon enemmän kuin käsivarsi.

Siten käytämme toista menetelmää, paljon tehokkaampaa: Siirry naapurista naapuriin!

Naapurimenetelmä

Edellytykset

Ensinnäkin, mikä on "naapuri"? Solun naapurit ovat yksinkertaisesti sen viereisiä soluja. Ja me puhumme ilmeisesti soluista, joilla on yhteinen puoli, soluista, jotka ovat suoraan niiden vieressä, emme niistä vinosti.

Näin ollen kartan kulmissa olevilla soluilla on yksi naapuri. Reunoilla olevissa soluissa on kaksi. Ja kaikilla muilla on neljä.

Ensimmäinen asia, joka sinun on tiedettävä, on noutaa solun naapurit. Käyttämällä funktioita getCellX, getCellY ja getCellFromXY voit helposti määrittää nämä kuuluisat naapurit.

Kun voit hakea solun naapurit, sinun on määritettävä, onko kyseinen solu "kelpoinen". On selvää, että jos solu on este tai purjo on siellä, purjo ei voi liikkua sen päällä.

Tietääksesi tämän, tarvitset funktiot isObstacle, isEmptyCell, isLeek tai getCellContent.

Periaate

Periaate on itse asiassa melko yksinkertainen. Vaikka se ei välttämättä ole helppoa ohjelmoinnin aloittelijalle.

Purjosi on siksi solussa, ja sillä on tietty määrä MP siirrettävää. Solu, jossa se on tällä hetkellä, on etäisyydellä 0 PM; Toistaiseksi hyvin...

Jos purjossasi on 1 MP, minne se voi liikkua? No, hänen aloitussolunsa vapaille naapureille.

Entä jos hänellä on 2 MP? Siksi se voi liikkua 1 PM aloitussolunsa vapailla naapurilla. Mutta myös kello 2 PM aloitussolun vapaiden naapureiden naapureihin.

Ja niin edelleen...

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