Diskuze: Mapa aneb dungeon

Ostatní jazyky GameMaker GameMaker Mapa aneb dungeon

Avatar
Neaktivní uživatel:

(předem se omlouvám za provopisné chybi)Určitě jste někdy hráli nějákou dungeon hru(např.win-diablo1-2.android-pixel dungeon)a napadlo vás někdy že ta mapa je jiná než minule,a potom zase a do třetice taky,to bude tím že tato hra disponuje tkz.half-random map generation tzn že mapa se generuje náhodně ale dodržuje určitá pravidla a mně bi se to celkem hodilo,bohužel na celém youtube jsem nic nenašel tak se ptám tebe jestli nevíš jak to udělat

Editováno 25.2.2015 21:53
Odpovědět 25.2.2015 21:52
Neaktivní uživatelský účet
Avatar
Martin Vejvoda:

asi bych zkusil tohle: http://www.itnetwork.cz/…eho-bludiste
s tím, že bych upravoval vlastnosti "základů" (např. vynechání určitého směru, jejich pozice) a pak bych tam rozházel místnosti.

btw s tím pravopisem by si měl něco dělat. Co si asi pomyslí šéf firmy, když mu pošleš žádost o místo napsanou takhle?

Nahoru Odpovědět 25.2.2015 22:14
while (!asleep()) sheep++;
Avatar
Neaktivní uživatel:

Ahoj,

předně CHYBY!! nebudu do vícekrát opakovat, pokud tohle uvidím v dalším tvém vláknu nebudu reagovat.

Tvůj problém je vcelku komplexní, vzhledem k tvým předchozím vláknům bych dal ruce pryč.
Nicméně všechno jde a tento problém, byť složitý je krásný. :)

Předně si mapu rozděl na mřížku a definuj si základní "struktury". Následně for cyklem ve tvaru:

xx = 0;
yy = 0;

for(a=0 a<=((room_width div 32) * (room_height div 32)) a++)
  {
  // generační kód
  }

pro generaci použiješ proměnnou pro kontrolu zda generuješ a následné vygenerování náhodné předem definované struktury. Práci ti usnadní pokud si struktury budeš definovat v poznámkovém bloku a následně je načteš přes skript.
Kód z poznámkového bloku může vypadat např takto:

// Struktura: mistnost1
znak1 = oWall
znak0 = "free_place"

11111
10001
10001
10001
11111

Následně načteš soubor následovně:

  1. Řádky začínající "/" odstraníš (komenty)
  2. Řádky začínající znak se uloží do proměnných, definujících reprezentovaný objekt (free_place může být speciální typ, značící volné místo)
  3. V předešlém for cyklu si podle následujících řádků vygeneruješ odpovídající instance.

Místa ve kterých se může napojovat jedna místnost na druhou si můžeš označit např. 2 a pak náhodně vybrat jednu z dvojek z načítaného souboru a označit ji jako místo pro napojení.
Je dobré si někam uložit co jsi vlastně vygeneroval, protože chceš aby mezi dvěma místnostmi byla např. chodba.

Na škodu určitě není ani řešení za použití ds_ map, nicméně to je poněkud složitější, byť efektivnější řešení. Můžeš si také napsat knihovnu v C/C++. Pokud je java tvůj kamarád na gitu je zdroják pixel dungeonu ;)

Pokud bys chtěl detailnější informace napiš mi PM :)

Hodně zdaru

Nahoru Odpovědět 25.2.2015 22:24
Neaktivní uživatelský účet
Avatar
Odpovídá na Neaktivní uživatel
Neaktivní uživatel:

jo díky funguje to, a mimochodem to chybi je úmislně (taková malá ironie)

Nahoru Odpovědět 26.2.2015 15:12
Neaktivní uživatelský účet
Avatar
Odpovídá na Neaktivní uživatel
Neaktivní uživatel:

V tom případě zatrhni prosím moji odpověď jako akceptované řešení a ironii si prosím nech na jindy vypadá to velmi amatérsky. ;)

xx = 0;
yy = 0;
for(a=0 a<=((room_width div 32) * (room_height div 32)) a++)
  {
  //genereace
if (xx < room_width div 32)
  {
  xx += 32;
  }
else {if (yy < room_height div 32) {yy += 32; xx = 0;} else {break;}}
  }

Btw. co ti funguje? V odpověďi jsem nastínil pouze teoretické řešení.

Editováno 26.2.2015 16:36
Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
Nahoru Odpovědět 26.2.2015 16:33
Neaktivní uživatelský účet
Avatar
Neaktivní uživatel:

nevim jestli jsem tě pochopil ale uďelal jsem to tak že jsem jsem naprogramoval jsem ‘‘šablony‘‘ jednotlivích místností,funguje to tak že o.creator nejdřív zkontroluje jestli je na x = random
y = random dostatek místa a potom podle hodnoty global.roomgen(ran­dom(0-40)) vygeneruje dannou místnost(každá místnost má svoje číslo(např.0 je malá místnost s random itemem a 5 je místnost do L))potom se random vygeneruje otočení(0-90-180-360),nakonec se vše spojí chodbou...zní to složitě ale je to mnohem složitější :D

Nahoru Odpovědět 26.2.2015 20:54
Neaktivní uživatelský účet
Avatar
martinsakra
Redaktor
Avatar
Odpovídá na Neaktivní uživatel
martinsakra:

Na youtube by rozhodně pár věcí být mohlo stačí dobře hledat, ale minimálně tady určitě něco bude byl tu dokonce i machr na to a co si pamatuju byly tam docela pěkné výsledky, zkus se tu prohrabat.
Btw: diablo 1/2 nemá různé mapy,ale tu stejnou která je jen otočená ;) to je docela pěkný trik

Nahoru Odpovědět 26.2.2015 21:01
Democracy is two wolves and a lamb voting on what to have for lunch. Liberty is a well-armed lamb contesting the vote.
Avatar
Odpovídá na Neaktivní uživatel
Neaktivní uživatel:

Ahoj, zní to neprakticky a určitě je to ještě nepraktičtější XD

x = random, y= random?? wow
otáčení? wawawau

Netušil jsem, že umíš spojovat instance do celků, které pak můžeš otáčet a vytvořit funkční example. můžeš mi poslat link? Jsem velmi rozpačitý z toho, že zde pokládáš dotazy s pravopisem, za který by se styděl i Hus (a jeho nabodeníčka XD), pokládáš "primitivně" popsané problémy a pak použiješ tyto velmi advanced techniky. Jsem moc zvědavý na ukázku :)

Hodně zdaru :)

Nahoru Odpovědět 26.2.2015 21:17
Neaktivní uživatelský účet
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 8 zpráv z 8.