Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Tallentaminen ja lataaminen

Sivun loppuun

erakko- [19.06.2009 11:51:02]

#

Tässä tulikin hiljattain mietittyä miten tämä onnistuisi, siis peliä ajatellen. Ensiksi kysyn, että onko olemassa jotain valmista kirjastoa, tai muuten helppoa tapaa saada pelitilanne tallennettua ja myöhemmin ladattua ja jatkettua samasta pisteestä.

Jos tälläinen ei ole mahdollista, niin luulen että minun on vain tallennettava kaikki tarpeelliset pelin muuttujien arvot tiedostoon, ja ladatessa taas lukea tarvittavat tiedot sieltä ja antaa arvot niitä tarvitseville olioille ja muuttujille.

Mutta tässä tapauksessa tulee sitten ainakin omalle päälleni pieni pulma. Tokihan saan pelaajan arvoja, sekä vaikka senkin missä huoneessa ollaan, tai mitä pelin rakenteelle ei-niin-rutiinin omaisia tapahtumia on tapahtunut tallennettua helpostikkin, mutta tässä pelissä pelaajalla on 10 esineen inventaario, ja pelistä löytyy myös samalla periaatteella toimiva esinepankki. Inventaariossa olevat esineet ovat olioita, joista löytyy SDL_Surface pintoja ja useita muuttujia. Tosin SDL_Surface pinnat voisin pelkällä merkkijonolla, joka sisältää siis polun itse kuvalle, jonka avulla sitten pinta luodaan. Mutta siitä huolimatta näiden olioiden tallennus menisi hieman hankalaksi, jos siis tietoja tallennetaan tiedostoon riveittäin. Itse pelin olen tarkoituksella tehnyt "spawnaavaksi" joten esimerkiksi vihollisten tietoja ei ole tarpeellista tallentaa.

Myöskin haluaisin tietää, miten saisin jollain tapaa suojattua kyseisen tiedoston mihin kaikki tallennetaan, ettei sitä vain voi avata ja mennä muokkaamaan tietoja mieluisiksi. Jonkin sortin kryptaus kenties?

Antti Laaksonen [19.06.2009 12:47:24]

#

erakko- kirjoitti:

minun on vain tallennettava kaikki tarpeelliset pelin muuttujien arvot tiedostoon

Näin tallennus täytyy käytännössä tehdä.

erakko- kirjoitti:

pelaajalla on 10 esineen inventaario, ja pelistä löytyy myös samalla periaatteella toimiva esinepankki

Tässä voisi olla hyvä ratkaisu antaa jokaiselle esineelle tunnusnumero ja ilmaista niiden avulla pelaajan omistuksessa olevat esineet.

erakko- kirjoitti:

Myöskin haluaisin tietää, miten saisin jollain tapaa suojattua kyseisen tiedoston

Yksi tapa on tallentaa tiedot tavallisesti ja niiden lisäksi jokin tarkistusnumero, joka estää tietojen muuttamisen käsin.

Esimerkiksi jos tiedostoon täytyy tallentaa kolme lukua, tarkistusnumero voisi olla lukujen summan jakojäännös 17:llä. Nyt jos luvut ovat 15, 8 ja 32, tiedostoon tallennetaan luvut 15, 8, 32 ja 4 (15 + 8 + 32 = 55 ja 55 % 17 = 4). Tiedoston latauksessa tarkistetaan sitten, että tarkistusnumero on oikein. Jos joku muuttaa vaikkapa luvun 8 luvuksi 80, tarkistusnumero ei enää täsmää: 15 + 80 + 32 = 127 ja 127 % 17 = 8.

erakko- [21.06.2009 14:51:12]

#

Juu, sain aika mainiosti toimimaan kummankin, tallennuksen sekä lataamisen.

Mutta sitten tuosta suojaamisesta, tuo tapa voisi toimiakkin, mutta jos nyt oikein ymmärsin, eikös tämä tarkistusnumerokin ole vapaata riistaa samalla lailla kuin muutkin luvut? Eli jos vain tajuaa että tällä numerolla on jotain virkaa niin sitäkin kyllä älyää mennä muuttamaan. Tietysti joku joka ei nyt niin itse huijaamisesta tai muuten tietokoneista perusta jättää koko homman väliin mutta varmasti jotkut yrittävät.

Tiedoston muotokaan ei varmasti paljoa auta (kaikkein vähiten vielä Linuxilla), sillä tekstieditorillahan ne loppujen lopuksi saa helposti auki...

Antti Laaksonen [21.06.2009 15:20:30]

#

erakko- kirjoitti:

Eli jos vain tajuaa että tällä numerolla on jotain virkaa niin sitäkin kyllä älyää mennä muuttamaan.

Tämä on totta, mutta jos tiedosto on täynnä dataa ja jossain on mutkikkaalla kaavalla laskettu tarkistusnumero, ainakin 99,99 % huijausta yrittävistä joutuu antautumaan ylivoimaisen haasteen edessä.

Mikään tapa estää huijausta ei ole täysin luotettava, koska joku voi aina tutkia pelin konekielisestä koodista, miten peli lataa tallennetun tiedoston.

Blaze [21.06.2009 15:23:33]

#

Lisäksi kannattaa miettiä, mitä tapahtuu, jos joku menee muokkaamaan tallennustiedostojaan. Kenenkään henki ei oo vaarassa, kenenkään rahat ei oo vaarassa, kenenkään yksityiset tiedot ei oo vaarassa... hetkinen, missäs se ongelma nyt olikaan? En lähtis investoimaan kovin paljon resursseja johonkin, mikä ei oikeasti ole mikään ongelma.

erakko- [21.06.2009 15:41:17]

#

Blaze kirjoitti:

En lähtis investoimaan kovin paljon resursseja johonkin, mikä ei oikeasti ole mikään ongelma.

Niin, totta :S Noh, ehkä tämän sitten jättääkin myös osittain omantunnon asiaksi...

Grez [22.06.2009 23:34:01]

#

Tiedoston tarkistussumma voi olla myös sitä varten, että käyttäjä saa tiedon tahattomasti korruptoituneesta tiedosta.

Schedler [23.06.2009 13:31:41]

#

Kommenttina tarkastussummista: Mikäli tiedossa olevien tietojen eheys on sovellukselle tärkeää, kannattaa tarkistussummat unohtaa, ja käyttää näiden tilalla CRC-tarkastusta.

Tarkastussummien "tehokkuus" riippuu tiedostossa olevasta datasta; CRC on datasta riippumaton menetelmä. Soveliaan CRC:n laskentaan käytettävän polynomin voi valita sovelluksen tarpeiden mukaan.

Grez [23.06.2009 14:18:04]

#

Schedler kirjoitti:

kannattaa tarkistussummat unohtaa, ja käyttää näiden tilalla CRC-tarkastusta.

Mikäs se CRC sitten on jos ei tarkistussumma.

Ettei nyt tule sanomista, niin tarkennan vielä, että vaikka kaikki CRC:t onkin tarkistussummia, niin kaikki tarkistussummat ei toki ole CRC:itä.


Sivun alkuun

Vastaus

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

Tietoa sivustosta