Tuesday 29 March 2011

Kaakenlaasta...

Eilen Vallilassa oli Microsoftilta eräs tyyppi puhumassa MSP (Microsoft Student Partner) - ohjelmasta. Fiksuimmat jo arvannevat kuka kiinnostui esityksen sisällöstä sen verran että uskalsi lähettää sähköpostia aiheesta viisaammilleen :P

Tunnen muutamaltakin foorumilta väkeä joka ilmaisisi minulle nyt ettei kannata myydä sieluaan. Näille ilmoitan että hankkikaa elämä :P vaikka yli puolet siitä esityksestä olisi sitä kuuluisaa PRää, on MSP silti niin kivankuuloinen ohjelma että aloin sähköpostivaihdon. Tähän kuuluisaan ohjelmaan siis kuuluu mm. ilmaisia kursseja (joita ei välttämättä koulun puolella ikinä näe :S), ihmisten tapaaminen ja sentyyppinen.

Monday 28 March 2011

Arvatkaa missä mä oon!!!!!!!!!!!!1111

Oikein, tänään on tutustumispäivä. Kuten tiedätte, kouluni toimii kahdessa talossa Helsingissä. Viisaat ihmiset jossain ylemmillä kerroksilla ovat päättäneet erottaa tietskarinörtit ja kauppanörtit erikseen omiin taloihinsa. Me tietskarinörtit pääsimme kävelemään toiselle puolelle Helsinkiä :)

Aamuisen puheen perusteella on sanottava että suuret on suunnitelmat koulun johdolla. Työelämän edustajat, jotka tarvitsevat datanomikoodaria, voivat nyt kävellä taloon jossa on varmasti vain datanomeja. Lisäksi koulumme, tai talomme, on kuulemma suomen suurin vain datanomeihin keskittynyt laitos. Työpuoli myös arvostaa, rehtorin puheen mukaan, saamamme koulutuksen tasoa. Minua voi nimittää kyyniseksi poroksi tämän sanomisesta, mutta voimme vain toivoa että työpuolella on samanlainen käsitys meistä, kuin meillä heistä.

Jos jotain on tämän rakennuksen hyväksi sanottava, niin ruokailu toimii paljon paremmin kuin Pasilassa, jossa jonot yltävät pahimpina päivinä aulan puoliväliin. Sokkeloisuus on myös kiva lisä. Teoriassa rakennus rakentuu joka kerroksessa keskikäytävän ympärille, mutta vanhassa rakennuksessa on samanlaisia kivoja salakäytäviä ja yllätyksiä kuin rakkaassa yläasteessani, Viherissä. Viherin lapsena minua kyllä nauratti kun opettajat kertoivat että kyllä tämä sokkeluisuus tästä selviää, vaikka tämä onkin sokkeloisempi kuin Pasilan talo. Pasila on ällöttävän selkeä ja järjestelmällinen.

Sitten voisi siirtyä juhlasaliin kuuntelemaan puhetta. Nähdään taas.

Saturday 26 March 2011

Animoitu teksti animaatiosta

MEMAPPER on parhaillaan sellaisella tasolla että itse jaksaisin tehdä sillä karttoja MERPGiin. Hionnen sitä vielä muutaman Betan ajan, jotten olisi ainoa joka kehtaa koskea häneen, ja toteutan siihen hit-editorin päälle.

Koska olen laiska käyttöliittymäsuunnittelija, päätin uhrata tämän viikonlopun MERPG-moottorin hionnalle. Viikolla voin sitten hioa mapperia. Toteutin kasassa olleen moottorin käytännössä puhtaalta pöydältä uusiksi. Näyttölaiteabstraktio toimii käytännössä niin, että olio jonka halutaan piirtyvän ruudulle, lisätään add()-funktiolla näyttöabstraktion takana olevaan tietorakenteeseen, ja ruudunpäivitysfunktiossa piirtojono tulostetaan ruudulle.

MEMAP - rakenne oli helppo implementoida tähän piirtosysteemiin. Kun perittiin piirtosysteemin pohjana oleva kuvaluokka (joka sisältää piirrettävän pinnan ja koordinaatit), ja rakennettiin karttatoiminnallisuus sen päälle. Tämä on niitä olio-ohjelmoinnin kivuuksia, koska MEMAP-kartat ovat kuvia, voidaan karttaa käyttää kuin mitä tahansa muutakin kuvaa.

 Kun moottori oli samalla tasolla kuin vanha versio, aloin miettiä animaatiomoottoria. Jossain CB-shooterissa ei ole niin väliksi miltä grafiikka näyttää ja elääkö se, mutta suhtaudun MERPGiin keskivertoperfektionistisella asenteella, joten on ehdottoman tärkeää että grafiikkaa pystyy katselemaan kymmentä sekuntia kauemmin. Sitäpaitsi, MERPG on tribuutti pokemonpeleille, ja jo Pkmn Redissä oli animoitua grafiikkaa.

Mutta miten tämä animaatiomoottori olisi syytä toteuttaa? Aluksi mietitään sitä miten animaatiot toteutaan. No tietysti samoin kuin Coolbasicissa: iskemällä animaatio.bmp:hen framet vieri viereen. Koodin puolella taas meillä voisi olla rakenne, josta ännännen framen saa ulos tarvittaessa, ja joku osoitin joka annetaan piirtosysteemille. Tämä osoitin, ja muutenkin vaihtuvan kuvan automaattinen toteutus piirtosysteemille, on vähän jännä. Piirtosysteemi odottaa saavansa piirtojonoon SDL_Surface - pointterin, joten kääntäjä ei tykänne jos sinne laitetaankin pointteri SDL_Surface - pointteriin.

Toki animaatioluokan voisi toteuttaa niin, että sen muuttuva surfacepointteri on täysin julkinen. Tämä kusee hieman kapsulointiperiaatteita nilkoille, mutta ei voi mitään. Taide vaatii välillä pelättyjäkin näkökulmia :)

Ei kun oikeasti, jos surfacen saisi julkisesta getteristä, voisi animaationpiirto ollakin aika helppo läpihuutojuttu. Vielä oikeammin, jos kaikki piirtokelpoinen toimisi näin, saataisiin piirtorituaaleja optimoitua, kun ei tarvittaisi enää erillisiä rituaaleja animaatioille ja staattisille kuville.

Tutkinpa :P

Friday 18 March 2011

Häppi pörttei

Tämäkin blogi on jo vuoden vanha, niin se aika rientää.

Viime ajat ovat pyörineet lähinnä koulun ja MERPGin ympärillä. Tämä on tekosyyni siihen että D&W vaikuttaa jälleen hautausmaalta, siinä missä yoolblogin päivitystahti on keskivertoa. Koulu syö, yllättäen, isoja osia arkipäivistä ja MERPG-projekti on sen verran massiivinen yhdelle koodarille että kaikki vapaa-aika kuluu sen kanssa, enkä minä osaa kirjoittaa "Kemiantunti meni nopeasti, siellä esiteltiin että tältä näyttää jaksollinen järjestelmä. Ruokana taas oli riisiä." - tyyppisiä tekstejä.

Kevät tulee, jos joku ei sitä ole huomannut. Tämänpäiväinen lämpötila, 6 celsiusta, sulattanee jatkuessaan lumet erittäin tehokkaasti, jolloin viimeistään ensikuussa saisi pyörän ulos. Keväthuollon jälkeen pääsisi uuden, hienon pokkarin kanssa pidempien matkojen taa nappaamaan kuvia.

Ensi kertaan

Tuesday 15 March 2011

tai sitten ei

Viime postissa spekuloitu ongelma olikin olematon, FileInputStreamin read()-metodi ulosti oikeaa dataa.

Toteutin viikonloppuna MEMAPperin melko pitkälle. Ohjelma osasi ladata tilesetin, luoda ja ladata kartan, ja lisäksi tallentaa muokatun kartan. Hiirenkäsittely oli melko heikkoa, ja suuri ongelma oli että ladattu tilesetti piirtyi peilikuvana (ja näin ollen kartalle tallennettiin eri tilet kuin piirrettiin).

Systeemityökurssin hengessä listaan nyt asiat joiden on oltava kunnossa ennen seuraavaa testijulkaisua fairandcruelissa:

Hiirenkäsittelyn on toimittava
Tilesetin on piirryttävä korrektisti
Swing-tiedostonvalintaikkunoille on mietittävä jotain vaihtoehtoa
Kartan ulottuvuuksia pitää pystyä säätämään
Kartta pitää pystyä poistamaan muistista
Lisäksi hitkerros-editorin on oltava edes jollain tasolla toteutettu

Tilesetti toimii muistaakseni jo, ja hiireenkin olen jo perehtynyt. Tiedostonvalintaikkunaa kysyn huomenna opettajalta, ja hitkerros-editorinkin aloittanen huomenna. Loput jäänevät viikonlopulle.

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.