Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem Ako vyriešiť tento problém s funkciou v JS [hra]

Nerozumiem, čo znamená, že to musí byť takto. Konkrétne, čo znamená "takto", lebo z toho kódu sa príliš pochopiť nedá. Ten kód a použité štruktúry sú dosť chaotické.

Čo je v premennej nblocks? Vidím, že sa pracuje vždy s nblocks[0]. Vyzerá to, že v nblocks sú bloky toho obvodu? Znamená to, že v nblocks[1] je ďalší obvod?

Čo je id v bloku? Identifikátor bloku to nebude, keďže v uvedenom príklade majú všetky 3 bloky id 13. Je to identifikátor obvodu? Všetky bloky v nblocks[0] majú id rovné 13?

Čo je damage? Prečo ju tu vôbec dávate, keď nesúvisí s problémom?

Direction je predpokladám ten "smer otočenia", správne?

Active je predpokladám, či je daný blok obvodu zapnutý alebo nie.

Sú tie bloky v nejakom poradí? V príklade vidím za sebou 2, 0, 4, takže teoreticky by to mohlo znamenať, že obvod ide zdola-vľavo, sprava-dole, zhora-vľavo - je to tak?

Ak sú tie bloky umiestnené v poradí, stačí len ísť od začiatku a aktivovať ich. Ak sú náhodne, tak si spravte funkciu napr. getElectricalBlock(x, y), ktorý vráti daný blok na danej pozícii, nech sa v tom kóde dá orientovať.

Pomenúvajte premenné rozumnejšie, takto sa v tom nedá vyznať. Názov funkcie abcd, to má byť čo. Hádam toggleElectricity by bol vhodnejší názov. Argument id, keď blok má svoje id, je tiež mätúci. Argument d (a premenná direction), to sa dá snáď pomenovať ako activate a hneď bude zrejmé, o čo ide.

Problém je ten, že vždy idete oboma smermi. Takže ak by boli vedľa seba 3 horizontálne čiary a začínate strednou, tak v prvom kroku aktivujete tú vľavo aj tú vpravo. V druhom kroku aktivujete z oboch strán tú strednú a to sa tam potom zacyklí. Buď si budete pamätať pozície (posielať si ich v ďalšom argumente), ktoré ste už aktivovali a tie budete ignorovať, alebo si budete posielať smer, ktorým elektrinu aktivujete.

Ja by som na to šiel pri náhodnom usporiadaní tých blokov tak, že by som mal funkciu, ktorá berie pozíciu políčka (x, y) a zdrojovú pozíciu elektriny v políčku (zhora, sprava, zdola, zľava) a podľa "smeru otočenia" na danej pozícii vráti ďalšiu pozíciu políčka a zdrojovú pozíciu elektriny, ktorú treba skontrolovať. Pre každý "smer otočenia" a zdrojovú pozíciu elektriny je jednoznačné, kam elektrina ide ďalej, takže netreba prehľadávať celý priestor. Ak sú k dispozícii len dané bloky, tak slučka sa dá spraviť iba taká, ktorá prechádza cez všetky bloky. Takže si stačí zapamätať pozíciu prvého bloku a prerušiť hľadanie v prípade, že sa elektrina dostane znova na tú istú pozíciu.

Pri usporiadanom poradí blokov by som šiel len postupne a aktivoval ich. Bolo by to oveľa jednoduchšie. Možno by stálo zvážiť usporiadať tie bloky.

Reakce na odpověď

1 Zadajte svou přezdívku:
2 Napište svou odpověď:
3 Pokud chcete dostat ban, zadejte libovolný text:

Zpět do poradny