Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Kentän lataus (QB)

Dude [18.03.2007 12:23:54]

#

Miten sais merkkigrafiikkapeliin niin että tiedostosta voi larata kentän. Mä aion teherä jonku pelin.

Antti Laaksonen [18.03.2007 13:07:46]

#

Kenttä täytyy ensinnäkin olla jollain tavalla muistissa ohjelmassa. Yksinkertainen tapa on tehdä kaksiulotteinen taulukko, jonka jokaisessa kohdassa lukee, mitä kentässä on siinä kohdassa. Eri asioita voi merkitä vaikkapa kokonaisluvuilla: 1 tarkoittaa lattiaa, 2 seinää, 3 hirviötä, 4 aarretta jne., tai miten sitten päätätkin valita. Tämän jälkeen kentän voi ladata tiedostosta lukemalla tiedot tiedostosta taulukkoon ja kentän voi näyttää lukemalla tiedot taulukosta näytölle.

Kentän sisältävä tiedosto voisi näyttää tältä:

5 5
2 2 2 2 2
2 1 1 3 2
2 1 1 1 2
2 1 4 1 2
2 2 2 2 2

Ensimmäisellä rivillä lukee kentän leveys ja korkeus, ja seuraavilla riveillä ilmoitetaan, mitä kussakin kohdassa on.

Ohjelmassa vastaavasti määritellään näin:

DIM SHARED leveys%, korkeus%
DIM SHARED kentta%(50, 50)

Komento DIM määrittelee muuttujan tai taulukon, ja SHARED tarkoittaa, että muuttujaa tai taulukkoa voi käyttää suoraan aliohjelmissa ja funktioissa.

Nyt tiedostossa olevan kentän voi ladata seuraavalla aliohjelmalla:

SUB LataaKentta (tiedosto$)
   OPEN tiedosto$ FOR INPUT AS #1
   INPUT #1, leveys%, korkeus%
   FOR i% = 1 TO korkeus%
      FOR j% = 1 TO leveys%
         INPUT #1, kentta%(j%, i%)
      NEXT
   NEXT
   CLOSE #1
END SUB

Kentän sisältävän tiedoston nimi annetaan aliohjelmalle parametrina. Aluksi tiedostosta luetaan kentän leveys ja korkeus. Tämän jälkeen luetaan taulukkoon jokaisen kentän kohdan sisältö. Nyt on valittu niin, että taulukon ensimmäinen ulottuvuus tarkoittaa leveyttä ja toinen ulottuvuus korkeutta: yhtä hyvin indeksit voisi valita toisinpäin.

Kun kenttä on luettu taulukkoon, sen voi piirtää ruudulle näin:

SUB PiirraKentta
   merkit$ = " #HA"
   FOR i% = 1 TO korkeus%
      FOR j% = 1 TO leveys%
         LOCATE i%, j%
         PRINT MID$(merkit$, kentta%(j%, i%), 1)
      NEXT
   NEXT
END SUB

Merkkijono merkit$ sisältää jokaisen kentässä esiintyvän asian merkin. Siis lattia on välilyönti, seinä risuaita, hirviö H ja aarre A. Komento LOCATE määrittää, mihin näytön kohtaan seuraava merkki piirretään. Nyt taulukossa lukee, missä merkkijonon kohdassa piirrettävä merkki on, joten funktiolla MID$ saadaan selville jokaisen kohdan oikea merkki.

Aliohjelmia voi sitten kutsua tähän tapaan:

LataaKentta "kentta.txt"
PiirraKentta

Nämä aliohjelmat ovat vain esimerkkejä, mutta niissä olevat ideat ovat käytännössä toimivia. Erityisesti aliohjelmista puuttuu virheenkäsittely, joka on välttämätöntä, jos jonkun muun on tarkoitus muuttaa kenttiä, ja hyödyksi silloinkin, jos vain itse muuttaa kenttiä.

Dude [19.03.2007 16:10:03]

#

Kiitos vinkistä. Se peli on oppaista otettu. Siinähän liikutaan @-merkillä ja b ja D seuraa

Dude [20.03.2007 16:31:05]

#

Se toimi ku vähä muokkas PiirraKentta-aliohjelmaa. Tuolle olis kiva olla kenttäeditori. Ja vielä parempi olis hiirellä varustettu.

Vastaus

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

Tietoa sivustosta