• 29 odgovora
  • 19.659 pregleda
Hajde da napravimo program za lavirint 28.05.2008. u 21:32 · pre 224 meseci #1
Hajde da napravimo program za lavirint.
Evo algoritma, ako neko ima bolji algoritam neka da predlog:

Lavirint se mora uraditi preko klasa zbog velikih zahteva.

Algoritam je sledeci:
Prvo se odredi koja stranica lavirinta sluzi kao ulaz u lavirint i na kom mestu u toj stranici, koja stranica sluzi kao izlaz i na kom mestu u toj stranici. Prvo se upise put resenja kroz ceo lavirint od ulaza do izlaza, sada se od ulaza prema izlazu dodaje nekoliko sporednih puteva koji idu skoro do izlaza i sa jedne i sa druge strane puta za resenje. Sada se dodaje nekoliko puteva koji idu od izlaza do skoro prema ulazu i sa jedne i sa druge strane od puta za resenje. Od sporednih puteva mogu ici neki kraci putevi da popune praznine na tom mestu. Pri cemu sporedni putevi nikako ne smeju da se ukrstaju sa glavnim putem. Za svako polje se mora definisati u nizu za sve cetiri linije koje sluze kao okviri oko polja: krozj koju liniju u polju je usao koji put, kroz koju liniju u polju je izasao koji put(glavni, sporedni). U polju kroz one linije kroz koje su usli/izasli putevi(presecene linije polja) nema crtica, a gde nisu usli putevi na te linije idu crtice. I to je to momci. Svako polje ima 4 crtice oko polja koje cine kvadrat. To je ceo algoritam. Da li vam je jasno?
Potpis
rgdrajko
Re: Hajde da napravimo program za lavirint 28.05.2008. u 21:49 · pre 224 meseci #2
ne nije mi jasno...

kako misli "program za lavirint"? mozda mislis na "program za generisanje lavirinta"? ako je ovo drugo onda znam o cemu se radi a i imam ideju kako bi to moglo (relativno) jednostavno da se uradi... ali aj neka se neko drugi javi da ne radim ja...
Potpis
rafforum.rs - Forum Računarskog Fakulteta
Re: Hajde da napravimo program za lavirint 28.05.2008. u 21:56 · pre 224 meseci #4
Da mislim na "program za generisanje lavirinta" ali ne slucajnog generisanja lavirinta jer to nije to, taj lavirint ispada bezveze, mozda nikada nisi video lavirinte u novinama koje sam crtao sa rapidografom. Dacu neki skenirani lavirint sada nemam sliku tog lavirinta.
Potpis
rgdrajko
Re: Hajde da napravimo program za lavirint 28.05.2008. u 22:03 · pre 224 meseci #6
Pa po nekoj teoriji, koja je veoma pametna i nisam je ja izmislio, slucajnost ne postoji, postoji samo namera. Prema tome moras ograniciti tu slucajnost sa nekom namerom, sa nekim usmerenjem, inace se obicno dobija glupost, to sam odavno shatio, jer slucajno generisanje skoro nikada ne daje dobar rezultat.
Potpis
rgdrajko
Re: Hajde da napravimo program za lavirint 28.05.2008. u 22:54 · pre 224 meseci #7
U pravu je Rajko (jeste, jeste, rekao sam to:D), ukoliko bi se random generisalo resavanje bi bilo suvise lako.

Citat:
goranvuc: Ne znam zašto imam jak osećaj da je naš Rajko to već uradio, pa nas izaziva ... ;)

Ili mu treba za nesto ;)
Potpis
Nebojsa Milanovic:
-Trumpa smatram vrhunskim predsednikom i voleo bih da živim u državi na čijem je on čelu
-Rusija ne laže, ne vodi osvajačke ratove
-Trump je svetla tačka u USA blatu
-Elon Musk, možda najpametniji i najtrezveniji Amerikanac
Re: Hajde da napravimo program za lavirint 28.05.2008. u 23:06 · pre 224 meseci #8
shad nisam mislio bas random vec da program u svakom trenutku (za odredjeni deo lavirinta) ima nekoliko opcija i da izbor vrsi nasumicno...

evo npr ovakav algoritam: http://www.freebasic.net/forum/viewtopic.php?t=3713
Code:

Start Stuff
1. Set-up maxe propeties As constants
2. Draw grid For the maze
3. Define types
4. Create variable types

Sub initmaze()
1. Set default info
2. Randomize starting square

Sub savemaze()
1. Open file
2. Write Data To file
3. Close file

Sub move(cellx,celly)
cellx And celly are coordinates For the current maze square
1. Create variable types
2. Check For possible directions
3. Pick Random direction
4. Calculate coordinates of wall To be broken If the wall Is there
5. Draw over the wall
6. Backtrack 1 cell If no direction Is possible
7. Change direction If no direction Is possible
8. Add the New cell's coordinates to the route array

Main Program
1. Call initmaze() To initalize the variables And arrays
2. A cheap counter For the production of the maze
3. Erase the marker
4. Call move(cellx,celly)
5. Exit For...next Loop
6. Call savemaze()
7. Wait For a Key press
Potpis
rafforum.rs - Forum Računarskog Fakulteta
Re: Hajde da napravimo program za lavirint 29.05.2008. u 16:35 · pre 224 meseci #9
Citat:
Shadowed: ..Ili mu treba za nesto ;)


Ne treba mi.

@ GoranVuc
Osecaj nikada ne vara, salim se naravno. Nisam uradio program za lavirint. Prepravio sam jedan strani program.

Citat:
Aleksandar Ružičić: shad nisam mislio bas random vec da program u svakom trenutku (za odredjeni deo lavirinta) ima nekoliko opcija i da izbor vrsi nasumicno...


Apsolutno si u pravu i hvala za link.

Evo primer Lavirinta.



[Ovu poruku je menjao rgdrajko dana 29.05.2008. u 22:24 GMT+1]
Potpis
rgdrajko
Re: Hajde da napravimo program za lavirint 29.05.2008. u 21:53 · pre 224 meseci #11
Mislim da bi trebalo precizno definisati sta se smatra dobrim a sta losim da bi se uopste moglo pristupiti problemu.
Potpis
Nebojsa Milanovic:
-Trumpa smatram vrhunskim predsednikom i voleo bih da živim u državi na čijem je on čelu
-Rusija ne laže, ne vodi osvajačke ratove
-Trump je svetla tačka u USA blatu
-Elon Musk, možda najpametniji i najtrezveniji Amerikanac
Re: Hajde da napravimo program za lavirint 29.05.2008. u 22:17 · pre 224 meseci #12
Ako je ovaj los kakvi su ti dobri :) ... stavi neku sliku ...
By the way ima i izreka sve sto je jednostavno je genijalno ... al ovde ocigledno ne vazi :)
U ovom lavirintu gore je fora da uvek kad mozes da biras skrenes levo (ako se krene iz donjeg desnog ugla) osim u zoni ulaza i izlaza , gde je obnuto.
Mozda je i to slucajno a mozda i postoji neka namera :)
poz
Potpis
HomePage http://www.eurora3d.com
Re: Hajde da napravimo program za lavirint 29.05.2008. u 22:34 · pre 224 meseci #13
Citat:
Shadowed: Mislim da bi trebalo precizno definisati sta se smatra dobrim a sta losim da bi se uopste moglo pristupiti problemu.


Ok sutra cu da skeniram jedan dobar koji sam nacrtao rapidografom.

Citat:
Eurora3D Team: U ovom lavirintu gore je fora da uvek kad mozes da biras skrenes levo (ako se krene iz donjeg desnog ugla) osim u zoni ulaza i izlaza , gde je obnuto.
Mozda je i to slucajno a mozda i postoji neka namera :)
poz


U pravu si, nisam to primetio.
Potpis
rgdrajko
Re: Hajde da napravimo program za lavirint 29.05.2008. u 22:35 · pre 224 meseci #14
Da ti napisem kako bi ja ovo radio.
Prvo mozemo da primetimo da je polje kvadratno i da su putanje iste sirine. Sto znaci da ovo mozemo da graficki pretstavimo kao mrezu (ili matricu , 2d niz).
Ja bi napravio formu sa kontrolama (moze button) sirine i visine kao sto je putanja , gde bi onaj koji koristi program mogao sam da oznaci putanju. Znaci caka je da mi smislimo put a program moze da izlupa random linije sa jednim jedinim uslovom , da nigde ne presece putanju.
Neznam kako bi ovo izgledalo kad se uradi al mi ja ovakav pristup nekako najprostiji

Da i normalno treba da iscrta okvir ...
Potpis
HomePage http://www.eurora3d.com
Re: Hajde da napravimo program za lavirint 29.05.2008. u 22:53 · pre 224 meseci #15
Da dodam :)
Onaj koji unosi putanju moze da unese i par laznih putanja da lavirint ne izgleda totalno haoticno. Mislim da bi to i otezalo resavanje.
Ovo su neke moje ideje sa programerske tacke gledista .... a u ovu tematiku se uopste ne razumem :)
Potpis
HomePage http://www.eurora3d.com
Re: Hajde da napravimo program za lavirint 29.05.2008. u 23:34 · pre 224 meseci #17
OK, to je primer, al' mislio sam na definisanje toga sta znaci dobar a sta los, tj. izreceno recima, kao pravila.
Potpis
Nebojsa Milanovic:
-Trumpa smatram vrhunskim predsednikom i voleo bih da živim u državi na čijem je on čelu
-Rusija ne laže, ne vodi osvajačke ratove
-Trump je svetla tačka u USA blatu
-Elon Musk, možda najpametniji i najtrezveniji Amerikanac
Re: Hajde da napravimo program za lavirint 30.05.2008. u 01:01 · pre 224 meseci #18
Pa ovako: svaki dobar lavirint ima plan kako ce putevi ici po lavirintu , pri cemu mora da ima sto manje slepih puteva od 1 polja, kao sto ima gornji lavirint(lavirint iscrtan rukom nema ni jedan slepi put od 1 polja), mora da se snalazi i prilagodjava situaciji pri kreiranju puteva kroz lavirint. Znaci uz glavni put ili resenje ima vise sporednih puteva koji pokusavaju da zbune resavaca i da mu otezaju pronalazak resenja, ako su sporedni putevi providni, resavac veoma lako pronadje put kroz lavirint. Znaci u 2d matrici se definisu i zapisuju putevi tj. kroz koje su "kapije" u kvadratnom polju usli putevi ili put. Iscrtavanje je posle toga veoma lako sa grafickom komandom Line iscrtati lavirint, po potrebi i zelji se ovakav lavirint veoma lako moze pretvoriti u igru.
Potpis
rgdrajko
Re: Hajde da napravimo program za lavirint 30.05.2008. u 19:37 · pre 224 meseci #19
Pa bolji je onaj gore lavirint... Ako se krene iz IZLAZA ima vise razlicitih mogucnosti, dok kod ovog dole ima samo jedna... A i put se lako uocava bez razmisljanja ( ne mislim na to sto je sad iscrtan... ).

Ovo gore sa random je bilo bolje, a ako hotjesh da nema PUTA OD JEDNOG POLJA jednostavno to definishi da proveri koliko polja ima put, i ako ima 1 da ga ukloni, tj da prodje neki drugi kroz to polje...

Definishi 2 GLAVNA puta koja ce se RACHVATI, koja ce kretati iz ULAZA i IZLAZA ( kako bi bio lavirint i ako se krene iz IZLAZA x) ).
Kad put bude "krenuo" nek se krecu oba u isto vreme ( kako bi se "sreli" priblizno kod sredine ( mozes definisati tachku SPAJANJA, tj mesto gde ce se spojiti ) ).
Nek bude random da odluci da li ce ici levo, desno ili pravo.
Stavi da preko random odlucuje da li ce se racvati ili ne ( ovde mozes dodati da proveri da li ima samo 1 polje ili vise ).

Moze se osmisliti i kontrolisanje TEZINE lavirinta tako sto ce se smanjiti sansa za racvanjem, kako bi bilo manje razlicitih puteva, ili da se poveca sansa da put ne skrece, tj da ima vecu sansu da ide pravo ( 1:1:2 = Levo:Desno:Pravo ).


To je moje misljenje... Nadam se da sam pomogao. Pozzz
Re: Hajde da napravimo program za lavirint 30.05.2008. u 21:54 · pre 224 meseci #20
Slazem se sa svim sto si naveo. Mora postojati logicki zakljucak u kom ce smeru ici, tj. u smeru prema izlazu a mora postojati i random kretanje. Najbolje je preko random da utvrdjuje da li ce uzeti logicki zakljucak koji ga uvek vodi u smeru prema izlazu ili ce iskoristiti random(npr 0=random kretanje, 1=logicko kretanje). Sto se vise priblizava izlazu sve manje koristiti opciju random(dodati i ovo ogranicenje).
Potpis
rgdrajko
Odgovori
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme