Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: QB: Satunnaiskartat

mikeful [04.05.2003 19:37:12]

#

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.

Sami [04.05.2003 21:29:22]

#

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.

Sami [04.05.2003 21:32:04]

#

Kokeile googlettaa esimerkiksi hakusanalla "random dungeon generator source code" tai jotain sinnepäin

mikeful [05.05.2003 11:34:20]

#

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ä.

Antti Laaksonen [05.05.2003 19:05:03]

#

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.

mikeful [05.05.2003 20:55:58]

#

Jes! Tuostaha voisi kehitellä jotain.

Sami [05.05.2003 22:43:02]

#

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.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta