Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: QB: QBasic ASCII pelin mapin lataus

Sivun loppuun

Tumpelo [10.05.2005 18:51:55]

#

Tätä on varmaan kysytty miljoonat kerrat mutta en haulla onnistunut löytämään vastausta (huonot hakusanat?) joten kysynpä kuitenkin.

Eli tossa oppaassa kerrotaan hyvin kuinka liikutaan ja sillee mut ei mainintaakaan siitä kuinka saisi helpoiten ladattua kartan. Tuskin ketään kiinostaa "random mapia" käyttää ja on hikinen homma itse laittaa tähän tyyliin: "map(1, 1) = 1, map (1, 2) = 2" jne. Lähinnä ajattelen että kuinka onnistuu pelikentän kokoisesta tekstitiedostosta lataamaan kentän, kun se on tekstitiedostoon laitettu ihan niillä merkeillä jotka pelaajalle tulisi näkyä.

hunajavohveli [10.05.2005 21:11:06]

#

Voit kokeilla näin aluksi ihan ASCII-muotoista tiedostoa:
Esim.

##################
#                #
#                #
#    ####  ##    #
#    #  #  #     #
#                #
##################

Ja lataus kutakuinkin:

OPEN "tiedosto" FOR INPUT AS #1
FOR y = 1 TO Korkeus
FOR x = 1 to Leveys
  INPUT #1, Map(x, y)
NEXT x
NEXT y
CLOSE #1

Tarkempaa tietoa annan opassarjan myöhemmissä osissa. Osa 3 muuten on jo lähestulkoon valmis.

Edit: Ja tuo INPUT-rivi tosiaan lukee koko seuraavan rivin, eli sitä ei voikaan käyttää ihan noin. Lue kaikki rivit ja erottele niistä sitten merkit x-akselille. Homma riippuu tietysti myös siitä, missä muodossa data on.

sqwiik [10.05.2005 21:38:54]

#

Muuten kuin hunajavohveli esitti, mutta lukeminen kannattaisia kait tehdä silloin tällä tavalla (eli luetaan binäärimuodossa, tavu kerrallaan):

DIM str AS STRING * 1
OPEN "tiedosto" FOR BINARY AS #1
  FOR y = 1 TO Korkeus: FOR x = 1 TO Leveys
    GET #1, str
    ' Rivinvaihtoa ei silti oteta karttaan mukaan.
    if str <> CHR$(13) THEN
      ' Näin mikäli Map on tekstimuotoinen
      Map(x, y) = str
    END IF
  NEXT x, y
CLOSE #1

hunajavohveli [10.05.2005 21:44:50]

#

Binäärimuoto on tosiaan parempi. Pistin äskeisen vähän turhan hätäillen. Binäärimuodon aion esitellä myös oppaissa.
Edit: Tiedostonkin pitää tosin olla binäärimuodossa, jos tuota sqwiikin koodia käyttää.

Tumpelo [11.05.2005 16:54:48]

#

Tein kuten sqwiik neuvoi mutta ei pelitä, jos laitan tarkalleen kuten neuvossa, tulee valitus "Type mishmatch" ja jos korvaan "Dim str as string * 1" tällä: "Dim str as integer" niin tulee valitus "bad record number"...

sqwiik [11.05.2005 18:08:41]

#

Johtuu siitä että STR on varattu sana... Toimii sitten kun vaihdat tuon muuttujan nimeä joksikin paremmaksi, esim.

DIM merkki AS STRING * 1
...
GET #1, merkki

hunajavohveli [11.05.2005 18:20:08]

#

Yksi virhe tuossa vielä on. Toinen parametri on kohta, josta luetaan, muuttuja annetaan kolmantena.

GET #1, , merkki

Eli jättämällä lukukohta tyhjäksi luetaan seuraavasta kohdasta.

eraggo [22.05.2005 16:17:11]

#

itelläkin on sama "pikku"ongelma tähän liittyen.. oon ottanut kentän (level1.txt) ja oon piirtänyt sen... okei.... alan liikkua ja meen kentän seinien läpi.. :F ja haluaisisin että näin _EI_ tapahtuisi.. joten pientä neuvoo mullekin kiits

hunajavohveli [22.05.2005 16:22:08]

#

Oletko lukenut tuota opassarjaani? Kannattaa toteuttaa niin, että lataat kentän vain taulukkoon ja piirrät taulukosta päin. Seinienkään läpi ei silloin pääse, jos tiedot tarkistetaan taulukosta.

eraggo [29.05.2005 19:54:47]

#

joo... nyt kaikki on kunnossa... tein juuri niinkuin sanoit hunajavohveli ja kiitos sulle :D


Sivun alkuun

Vastaus

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

Tietoa sivustosta