2010. szept. 19.

Pathfinder

Már régen írtam ezt a kis programot, de akkor is nagyon büszke voltam rá.
A* algoritmussal egész gyorsan megadja egy szövegfájllal megadott labirintusban az S-betűtől az E betűig vezető utat. Tudom, vannak gyorsabb módszerek, de ez mindig tökéletes megoldást ad, már ha van egyáltalán valamilyen. A szövegfájlnak "téglalap alakúnak" kell lennie, tehát minden sorának azonos hosszúságúnak. (Másmilyennel nem teszteltem, nem is emlékszek már rá, hogy írtam-e bele valamit, hogy mit csináljon a "nem jó" fájlokkal, de most nem nézem meg. Legyen téglalap és jó lesz.) Ahol szóköz, vagy . vagy _ van, azt bejárható területnek veszi, ahol #, +, -, /, \, |, x, X, *, azt falnak. Kötelezően megadandó egy S és E betű, mint Start és End. Ez nem case-sensitive. A kimeneti fájlba a ^, v, > és < karakterekkel rajzolja be az utat. (Hát nem édes? :DxD)

Most került elő egy facebook-post révén, és sikeresen hozzátettem még egy képből ASCII és fordítva alakító progit.
Azok nem olyan szépek, de hamar készültek, rövidek, ideális körülmények között működnek. Csak hardcode-oltak a fájlnevek, de az mindegy, ha már úgyis nektek kell lefordítanotok.

Tudomásom szerint szabványos C++, binárist nem adok, aki le tudja fordítani, annak nem is kell, aki nem tudja, az ne is akarjon binárist. Lehet a forrásban gyönyörködni.
Csak a két segédprogramnak van függősége, az SFML, mert könnyű vele képeket kezelni. A főprogramnak nincs.

Pathfinder: http://pastebin.com/3M3TCGs8
png_to_text: http://pastebin.com/X8PDxSUd
text_to_png: http://pastebin.com/9QFKYYKK

3 megjegyzés:

  1. hú kicsi koromban mennyit szórakoztam ezzel. úgy is ellenőriztem, hogy ciklusban generált n darab akadályt, aztán megpróbált eljutni egyik sarokból a másikba és ezt sokszázszor, számolta hogy hányszor sikerül hányszor nem. pascal ofkoz, másban akkor még nem tudtam. aztán ha sikeresen eljutott akkor növeltem n-t. persze az algoritmus sima buta környezetpontozós volt, ha berandomolt egy olyan összefüggő falat, aminek már nem látta a szélét, akkor vagy megállt, vagy később elindult valamerre, hátha meg tudja kerülni.

    VálaszTörlés
  2. Hehe, most nézem, a pastebin a Name mezőben az én nevemet kérdezte, nem a prozséét... :D
    Most már mindegy, a forrásban úgyis ott van címestül.

    VálaszTörlés
  3. Ja, meg 132. sor PWNZ xD azt is későn vettem észre

    VálaszTörlés