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.
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...
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.
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ä.
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.
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ä.
Entä miksi kartasta luetaan vain pienempi osa takaisin? Voisiko sen lukea kokonaan?
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
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.
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 =)
Aihe on jo aika vanha, joten et voi enää vastata siihen.