Friday 11 March 2011

Ongelmia elon tiellä

Tänään oli produktiivinen ohjelmointitunti. Muiden miettiessä miten perustason luokkia konstruktoidaan, minä keskustelin opettajan kanssa MEMAPper-projektissa tehdyistä ratkaisuista. Kävi ilmi pari asiaa, koska Java ei tunne lukutyyppiä unsigned byte, ja javan tavut liikkuvat väliä -127...127, on CB/C++-apeilla kirjoitetut ja 0...255 - alueen tavuilla täytetyt karttatiedostot vaikeita lukea javan puolella. Jos pudottaa tuen CB:llä kirjoitetuille dummy-karttatiedostoille, ja luo C++lla sellaisen käyttäen signed charia (sama arvoalue kuin Javan byte), voisi tilanne olla helppo pelastaa. Toinen vaihtoehto olisi käyttää inttejä tavujen tilalla, mutta se nostaisi karttatiedostojen koot nelinkertaisiksi (sehän onkin suuri menetys jos ~25 tavun tiedostoista tuleekin 100 tavuisia), ja c++:n ja Javan tiedostorajapinnat eivät muistaakseni ota binääritiedostoista vastaan mitään tavua suurempaa.

MEMAP-kartat voisi myös toteuttaa tekstitiedostoin, mutta siinä on purkkaisa tuoksu jos iskee tekstitiedostoon raa'asti char-taulukoita/stringejä. XML-muoto taas olisi käyttäjäystävällinen (kaikkihan ovat säätäneet AoE3:n yksinpelikaupunkien leveleitä notepadillä ylöspäin :)), ja Java tarjoaa opettajan mukaan (en ole ehtinyt tarkastaa) luokat XML:n lukemiseen ja kirjoittamiseen. XML-idea taas kusee C++:n puolella. Googlettelulla siitäkin voisi selvitä.

Miten aion reagoida näihin ongelmiin, kysytte varmaan. Noh, ensi töikseni voisin kirjoittaa Javaksi demon joka tulostaa dummykartan sisällön. Jos se mätsää kartan oikean sisällön kanssa, olen iloinen. Jos ei mätsää, kokeilen ensin signed char/byte - ratkaisua, minkä jälkeen kokeilen inttejä. Sen jälkeen, jos ei vieläkään toimi, toteutan C++:lle xMEMAP-laturin, joka lataa tekstimuotoisia karttoja. Viimeinen vaihtoehto on XML.

1 comment:

  1. Ei ole ongelmaa, FileInputStream ulostaa oikean datan

    ReplyDelete