Olen yrittänyt väsätä Nethack/ADOM tyylistä peliä, mutta en osaa tehdä satunnaisia luolastoja tekevää systeemiä. Osaisiko kukaan autaa? Myös muunlaiset satunnaiskartat kiinostaa.
Tällaiseen tarvitsee aika hel****n pitkää koodia, mutta esimerkiksi alkuun sitä voisi yrittää koota erilaisista toisiinsa sopivista paloista ja käyttää sitä satunnaisluolaston luojaa vasta sitten, jos onnistuu kehittämään sellaisen.
Kokeile googlettaa esimerkiksi hakusanalla "random dungeon generator source code" tai jotain sinnepäin
En yritä tehdä karttoja paloista vaan yritän aluksi koodia, jossa pelialue on iso taulukko ja jokaisella ruudulla on arvo 0-2.
0=seinää
1=lattiaa
2=ovi
eli huone, jossa on ovi voisi näyttää tältä:
0000
0110
0020
lainaus:
Kokeile googlettaa esimerkiksi hakusanalla "random dungeon generator source code" tai jotain sinnepäin
Etsitty on, mutta sivuja löytyy aiheen vierestä liian paljon. Yksi C++ koodi löytyi, mutta en osaa oikeastaan yhtään lukea sitä. Eli ei paljon hyötyä.
Randomillakin voi tulla ihan hyviä tuloksia, jos seiniä ja lattiaa luodaan sopivassa suhteessa. Jos kartasta haluaa paremman, se kannattaa tämän jälkeen käydä läpi älykkäämmällä algoritmilla, joka yhdistää vierekkäin olevat seinät ja laittaa ovia sopiviin paikkoihin. Tämä voi olla kyllä vaikeampi tehdä.
Seuraavanlainen kartta muodostui pelkillä satunnaisluvuilla kun vähän testailin:
######################################## ## # # # ## # # ## # # # # #### # ### ### # # # # # ## # # ## # ### #### # ## # # # ### ### ## ## # # ### # # #### # ## # ## # # # # ## # # # # # # # ## ## # # # #### # ## # ## # # # # # ## # # # # # # # # ## # ## ### # # ## # # # # # # ## # # # # ### ## # # # # ## ### # ## # ## ## # # # # # ## ## ## # ## ## # ## # # # # # # ## # ## ## # # # ## # # # # ## # ## ## # ## # # ## # #### # ## # # ## # ## # # # ## # # ## # ## # # # # # # # ########################################
Ja tuon kartan muodostanut koodi on tässä:
DIM leveys AS INTEGER, korkeus AS INTEGER, maara AS INTEGER leveys = 40 'kartan leveys korkeus = 20 'kartan korkeus maara = 40 * 20 'käytäväalueiden määrä DIM kartta(leveys * korkeus) AS STRING * 1 'täytetään kartta seinillä FOR i = 0 TO leveys * korkeus kartta(i) = "#" NEXT RANDOMIZE TIMER 'arvotaan maara kappaletta lattiapaloja FOR i = 0 TO maara 'arvotaan, kunnes pala ei osu reunaan DO arpa = INT(RND * leveys * korkeus) LOOP UNTIL arpa > leveys AND arpa < leveys * (korkeus - 1) AND arpa MOD leveys <> 0 AND (arpa + 1) MOD leveys <> 0 'määritetään pala lattiaksi kartta(arpa) = " " NEXT 'piirretään kartta CLS FOR i = 0 TO leveys * korkeus - 1 PRINT kartta(i); IF (i + 1) MOD leveys = 0 THEN PRINT NEXT
edit: Tein ohjelmalla suuremman kartan.
Jes! Tuostaha voisi kehitellä jotain.
Itse väsäilin semmoisen reilun 100 rivisen koodin, joka luo muutaman huoneen ja yhdistelee niitä käytävillä. Ongelmana on se, että se ei yhdistä kaikkia huoneita, vaan saattaa jättää huoneita ilman käytävää ja lisäksi se on melko hidas systeemi.
Aihe on jo aika vanha, joten et voi enää vastata siihen.