Labirintust készítés?
Nem tudom, hogy ilyesmire gondolsz-e:
Egy egyszerű algoritmus:
Veszel egy páratlan oszlop és sor számú mátrixot. A külső kerülete mind fal, kivéve a ki és bejáratot valahol.
Utána sorban először felülről, aztán jobbról, alulról, majd balról:
Véletlen szerűen választasz egy páratlan számó sort/oszlopot és elkezdesz falat húzni addig, míg bele nem ütközöl a következő falba (előtte egy üres helyet hagysz). Ezt addig ismétled, míg már nem tudsz falat húzni sehova.
Kész a labirintus.
A #12:25 által vázolt módszer tényleg talán a legegyszerűbb és két fontos dolog biztosítható vele: Hogy csak egy bejárata és egy kijárata legyen (a létrehozása után két rést kell ütni a külső falon), illetve, hogy a bejárat mindenképpen összeköttetésben legyen a kijárattal. A megoldás színesíthető azzal, ha a fal „építés” közben irányt változtathat vagy megszakadhat, esetleg nemcsak a külső-, hanem a már felépített belső falakból is indulhatnak újabb falak. Ezzel persze már akkor érdemes foglalkozni, ha az alap-algoritmus meg van oldva.
A feladat szempontjából nyilván nem közömbös, hogy mit tekintesz labirintusnak. A kolléga nem mulasztotta el megjegyezni: „Ezt addig ismétled, míg már nem tudsz falat húzni sehova.” Ez biztosítja, hogy az egész terep egyetlen, falakkal felosztott folyosórendszer legyen. Erről azonban csak a feladat tényleges ismeretében jelenthető ki, hogy valóban követelmény-e. Miért ne maradhatnának nagy, üres „termek”, ahonnét több folyosó is indulhat? Ilyenkor a teljes telirajzolás helyett elég lehet valami százalékot elvárni.
De másfajta labirintus is lehetséges. Elképzelheted például bányaként, ahol egy tetszőleges tömbbe furkálsz folyosókat, nem törődve azzal, hogy a másiktól egyetlen fal, vagy száz egység választ-e el, vagy tekintheted szobák rendszerének, amelyeket a falak megnyitásával tehetsz bejárhatóvá. A kihívás mindkét esetben egyrészt a ki- és bejárat közötti átjárás biztosítása, másrészt az, hogy azért minél kevesebb átjáró maradjon. Én itt illemtudóan meghátrálok; Tippjeim esetleg lennének a megvalósításra, a bizonyítás viszont nem erős oldalam.
Éppenséggel nem ártott volna a programnyelvet meg a felhasználás elképzelt módját is közölnöd, mindenesetre itt néhány nyelven találsz néhány ötletet a labirintus általánosságban való előállítására:
Ha már szóba került a kézi rajzolás:
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
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!