Kezdőoldal » Számítástechnika » Programozás » Útkereső algoritmus? (lent)

Útkereső algoritmus? (lent)

Figyelt kérdés
Szóval mindig is érdekelt a dolog (félre értés ne essék nem akarok játékot csinálni :D) , hogy működik ez. Akár egy egyszerű felülnézetes játékban ,ahol az MI elvezérli a tárgyat a célég a falakat kikerülgetve.Valaki egy a témában nem jártas ember számára eltudná magyarázni?:)
2012. aug. 13. 17:29
 1/7 anonim ***** válasza:
nem tudom más, hogy valósítja meg, de én flashban írtam egy zombis játékot. Ott úgy működtek a zombik, hogy folyamatosan nézték, a játékos pozícióját, és a saját pozíciójuk alapján eldöntötték, hogy merre kell menniük. Az akadályok kikerülését hittest-el oldottam meg, ekkor érzékelték, hogy ha egy akadályhoz értek, ekkora lefutott egy algoritmus ami megnézte, hogy merre irányult az előző lépés, és nem visszaléptek, hanem oldalra egyet. Nagyon sok helyen elakadtak, ezért úgy kellet kialakítani a pályát, hogy ne legyenek zsákutcák.
2012. aug. 13. 17:39
Hasznos számodra ez a válasz?
 2/7 anonim ***** válasza:
Itt mindent megtalálsz ami neked kell, kb az alapoktól: [link]
2012. aug. 13. 17:52
Hasznos számodra ez a válasz?
 3/7 A kérdező kommentje:

1. ez még mindig kicsit bonyolult :D

2. köszi megnézem :)

2012. aug. 13. 17:57
 4/7 anonim ***** válasza:

Annak idején írtam egy ilyen programot. Az a* algoritmust használtam fel. Egy viszonylag egyszerű algoritmus, viszont kicsit nehéz rajz nélkül elmagyarázni. Ezért inkább nézd meg a következő videót:


http://www.youtube.com/watch?v=Kw8AMmyc6vg



Ezzel a módszerrel a tárgy nem akadhat el, mert a számítógép előbb "fejben" megoldja, és csak amikor megtalálta a helyes utat indítsa el a tárgyat.

2012. aug. 13. 18:01
Hasznos számodra ez a válasz?
 5/7 A kérdező kommentje:
Te atya ég ez ilyen bonyolult?:D
2012. aug. 13. 18:06
 6/7 anonim ***** válasza:

Miért lenne bonyolult?

Na elpróbálom magyarázni akkor az a* algoritmust.


Van egy térképed. Ez legyen egy bazinagy mátrix. Az egyszerűség kedvéért csak függőleges meg vízszintes irányba lehet elmozdulni. A falakat jelölje -1 és a célt -2, a járható utat pedig -3 (tulajdonképpen mindegy mivel jelölöd). Elindulsz a start-ból. Első lépésként négy szomszédos négyzetre tudsz lépni, ha nincs melletted fal. Tulajdonképpen az összeset végigjárhatnád, de abban nincs semmi "intelligencia" és nem lenne heurisztikus keresés. A heurisztika azt jelenti, hogy van egy törvényed ami alapján ki tudod választani, hogy melyik a következő legjobb lépés, ami jelen esetben közelebb visz a célhoz. Szóval úgy járhatsz el, hogy kiszámolod egyesével, hogy még hány lépésed lenne (falon, tűzön, vizen át) ha az egyes szomszéd négyzetekre lépnél. Így mindegyik négyzet kap egy számot (ez a szám a videón a négyzetek jobb felső sarkában van). Ha ez megvan akkor a legkisebb értékkel rendelkező négyzeteket a fent leírtak alapján kiterjesztheted. A lényeg, hogy vigyázz nehogy falat akarjál kiterjeszteni.


Én c-ben írtam meg anno. Csináltam egy négyzet struktúrát. A mátrix elemei ilyen típusúak voltak. A struktúrának volt egy értéke ami jelölte, hogy az adott négyzet szerepe fal, cél, vagy járhatu út-e, mivel csak a járható utakat kell kiterjesztni. Továbbá még volt egy értéke, ami a kiterjesztés után, a céltól való távolságot tartalmazta.


Ezzel a magyarázattal tulajdonképpen csak egy rálátást akartam adni, hogy némi utánaolvasással meg tudd csinálni. Sok sikert.

2012. aug. 13. 18:43
Hasznos számodra ez a válasz?
 7/7 anonim ***** válasza:

Alapvetően ez elég egyszerű cucc.

Leírás és példa kód Pythonban: [link]

2012. aug. 13. 18:53
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!