Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Taulukon tallennus QB:llä

Sivun loppuun

E.K.Virtanen [04.12.2004 22:46:18]

#

Joo, pitää korjata koneestani jotain kun ei hauilla tunnu löytyvän tänään mitään.

Eli tuo Map(125,125) pitäisi saada talletettua filuun niin että sen luku sieltä onnistuisi mahd. helposti.

Dim Map(125, 125) ' Dimmailua
Dim ReadedMap(20, 20) '
For i = 1 to 4000 ' Eli noin monta kertaa arvotaan esteelle paikka
x = int(rnd * 125 + 1)
y = int(rnd * 125 + 1)
w = int(rnd * 9 + 1) 'Arvotaan este.
Map(x, y) = w
Next

Ja lisäksi miten saa luettua sieltä tiedostosta 20*20 alueen tuohon ReadedMappiin? Rivin talletus/lukeminen onnistui mutta nyt löi tenkkapoota.

Gaxx [04.12.2004 23:04:32]

#

Itse käyttäisin tuossa tapauksessa PUT ja GET juttuja.

Elikkäs käytännössä:

'Teet kentästä oman muuttujatyypin
Type Map
   Map(125,125) As Integer
   MusicFile As String 'Voit laittaa mukaan kaikkee muutakin kenttään liittyvää...
End Type

Dim GameMap as Map

'// Käsittely
GameMap.Map(100,100) = 4

'// Sitten se talletus
Open "Save.dat" For Binary as #1
   Put #1, ,GameMap
Close #1

'// Ja lataus
Open "Save.dat" for Binary as #1
   Get #1, ,GameMap
Close #1

Ton pitäs toimii QB:ssä.

Putista ja getistä voit lukea
Tossa linkissä olis ollu kyllä ihan tarpeeks hyvät esimerkit, jos olisin tajunnu aikasemmin kattoo...

Antti Laaksonen [04.12.2004 23:45:44]

#

Jos taulukon koko pysyy samana, tallennuksen ja latauksen voi tosiaan hoitaa hyvin helposti Gaxxin mainitsemalla tavalla. Mutta hankalampaa on lukea osa taulukosta tiedostosta pienempään taulukkoon. Kerro vähän tarkemmin, mitä olet tekemässä, niin voidaan miettiä ensin muita toteutustapoja.

E.K.Virtanen [05.12.2004 14:38:29]

#

Joo, siis pelin alussa luodaan kartta tuohon taulukkoon ihan randomizella.

Idea on siis että aina kun aloittaa uuden pelin niin sellainen kartta luodaan mutta jos pelin savettaa niin pitäisi saada kartta talteen että kun savetettua peliä taas jatketaan niin olisi sama kartta taas käytössä.

Antti Laaksonen [05.12.2004 14:47:42]

#

Mitä, jos tallentaisit pelkästään satunnaislukugeneraattorin siemenluvun? Samalla siemenluvulla kartasta tulee aina samanlainen. Ennen kartan luomista lukee varmaan:

RANDOMIZE TIMER

Muuta koodia näin:

karttaid& = TIMER
RANDOMIZE karttaid&

Tallennuksessa riittää, että panet karttaid&:n talteen. Jos kartassa on liikkuvia hahmoja, niiden tiedot pitää toki tallentaa erikseen.

E.K.Virtanen [05.12.2004 15:10:58]

#

Njoo, onhan siinä liikkuvia tietoja. Vastustajat jne liikkuvat kartalla joka kierros vaikka niitä ei näkisikään.

Siis tuolla randomizella laitetaan puita, kiviä ja luolien "ulkoaukkoja". Tiet, kaupungit ja jokunen lampi tuupataan taulukkoon vasta sen jälkeen eli olisi mukavampaa jos saisi koko hoidon kerrallaan talteen.

Esim., kaupunkien ja lampien x,y:t arvotaan myös, tosin pienemmillä mahdollisuuksilla.

Vastustajat on helppo löytää taulukosta sitten kun ladattu kun niille on omat merkkinsä siellä.

Antti Laaksonen [05.12.2004 15:29:20]

#

Entä miksi kartasta luetaan vain pienempi osa takaisin? Voisiko sen lukea kokonaan?

E.K.Virtanen [05.12.2004 16:31:51]

#

Joo, tuo takaisin osittain luku ei olekaan niin tärkeää. Homman sain pelittämään hyvin kunhan muutin muutaman ascii merkin taulukosta toiseksi. Nämä aiheuttivat ongelmia taulukossa ja sen näyttämisessä.

Luulin ensin että 125*125 taulukko on jo liian iso qb:n käsiteltäväksi mitä käytäntöön tulee.

Siis niin että 125*125 taulukko tallennetaan kerrallaan ja luetaan kerrallaan.

Se että paljonko karttaa näytetään jnejne niin se saadaan muuttamalla i,ii ja tuota 125 kokoja mutta ne ei nyt ole olennaisia kait. =)
Niin, nyt teen niin että kun taulukkoon on niitä puita yms. arvottu niin puulla kun voi olla 2 eri väriä jotka siis myös arvotaan =)
Nyt talletan ne toiseen erilliseen taulukkoon ja kun ensin luen merkin Map(125,125) taulukosta niin luen myös värin MapC(125,125) taulukosta.

Koodi menee siis näin.

For i = 1 to 125
    For ii = 1 to 125
       Locate i, ii:Color MapC(i, ii):Print CHR$(Map(i, ii)
    Next
Next

E.K.Virtanen [06.12.2004 05:18:20]

#

Njoo, omien söhellysten jälkeen sain hyvän vastauksen tuolta qb newsista.

http://forum.qbasicnews.com/viewtopic.php?t=7463

Ossu vaan sen takia jos joku muukin vielä qb:n kanssa jotain tekee.

E.K.Virtanen [15.12.2004 11:08:41]

#

Memory overflowta pukkaa exeksi kääntäessä kun on noita (125,125) taulukoita pari ja miljoona muuta muuttujaa.

Taulukon tallennus onnistui hienosti tuolla Gaxxin mainitsemalla tavalla mutta nyt jumiuduin kuitenkin tuohon "osa lukemiseen". Eli miten filusta siis saa luettua vaikkapa 20*20 kokoisen alueen? Tuo 20*20 alue kun saattaa olla tilanteesta riippuen vaikka Taulukko(100-120, 70,90) osasta. Iteltä loppui ideat jos niitä nyt koskaan niin olikaan =)


Sivun alkuun

Vastaus

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

Tietoa sivustosta