Tuesday 22 February 2011

Miniversionhallintaa

Ei sillä että ottaisin vaikutteita CB-blogista, en yhtään, mutta olen itsekin viime päivinä leikitellyt versionhallinta-ajatuksella. En tosin sellaisella kuin yllämainitussa blogissa, ei, vaan sellaisessa johon voi automaagisesti upata versioita sorsista ja medioista, ja PHP-softa vääntää projektizipin korrektiin kansioon ja lisää julkiselle puolelle linkit korrektiin tiedostoon. Tälläinen yksinkertainen ohjelma jolla ylläpitää versioita ja jaella projektifiluja.

Lisäksi, Fairandcruelissa (ainakin juridisesti::) on kirjoittamani MERPG-tuotesivu :P siellä on myös kartta. Kannattaa käydä vilkaisemassa.

Sunday 20 February 2011

Se miten asiat olisi pitänyt tehdä

Kuten tunnettua, eilen turasin tuon MEMAPperin kanssa oikein urakalla. Tänään väsäsin aamurituaalien ohella vihkooni jonkun pienen, mutta järkevähkön suunnitelman ohjelman toiminnan pilkkomisesta. Ohjelma perustuisi kolmeen luokkaan, UI, Logiikka ja Säilö. Tämä ei ole mikään kovin monimutkainen pattern, mutta silti pitäisi helpottaa koodin ylläpitoa hieman. UI sisältää formin omeletteineen (hieno uudissana tuo omeletti :D) ja tapahtumakäsittelijöineen. Tapahtumakäsittelijäfunktioista kutsutaan sitten Logiikkaluokan metodeja, jolloin saadaan esim. tilen nappaaminen helpommaksi, kun tile napataan funktiossa void nappaa_tile(int x, int y,) sen sijaan että napattaisiin funktiossa void tileset_panel_mouseUp(Object sender, _winformsevent_ /*vai mikä hitto se olikaan nimeltään*/ e).

Eli Logiikkaluokka sisältää sen mitä ohjelma osaa tehdä. Datasäilöön taas tallennetaan mm. tarvittavat bittikartat, ohjelman tilaa ilmaisevat muuttujat ja sellainen. Ei mikään kovin monimutkainen rakenne, etten sanoisi.

Tämän tekstin kirjoitukseen meni muuten koko päivä. Älkää siis odottako mitään tulosta tänään. Civ ja hätäilyt ovat tappoa luovuudelle :D

Saturday 19 February 2011

OOP vs. Sutasten Kustu

Taas on tullut aika purkaa tunteita.

Ankaran googlailun ja Dream In Coden tutkailun jälkeen löysin lopulta tutoriaalin jota olen MEMAPperiin etsinyt koko edeltäneen viikon ajan: kuvapintatutoriaalin jommalle kummalle käytössä olevalle tavukoodiympäristölle (Java ja .NET). Tällä kertaa onnellinen tutoriaaliympäristö oli C#. Koska elämä ei ole koskaan liian helppoa, WPF-kirjastoihin tottuneelle lapselle lätkäistiin eteen WinForms-only - kirjastoja käyttävä tutoriaali. Noh, yleissivistystä kannattaa aina laajentaa ja toimivan tutoriaalin hyödyntäminen on aina fiksumpaa kuin tuloksettomalta vaikuttava kuuklailu.

Väänsin tutoriaalin pohjalta eilen harjoitusdemon, jossa sai hiirellä kääntää valkosia pikseleitä mustiksi piirtopinnalta, ja jonka formilla oli nappi josta painamalla piirtopinnalle liitettiin nuolikuva ja neljännes tästä nuolikuvasta. Sanoisin että demo toimi ihan mukavasti :P

Tänään, aamusella, aloitin sitten vakavissani toteuttamaan MEMAPperia C#ksi. Päivän saldoksi tuli 200 riviä logiikkaa ja formi täynnä omeletteja. Kaikki toteutettu yhden ja saman luokan sisään. Päivän kääntyessää kohti iltaa, alkoi olla jo hieman vaikeuksia erottaa että pitäisikö tilesetistä valittu tile piirtää nykyinen_tile_pintaan, nykyinen_tile_bmphen, nykyinen_tile_palkkiin, vai minne. Eikä koodi muuten toiminut enää :)

Tämä edustaa otsikossa mainituista koodaustavoista jälkimmäistä. Huomisen tultua minun pitäisi suunnitella joku järkevähkö pattern jolla erottaa formin toteutus ja syvempi ohjelmalogiikka omiksi luokikseen. Logiikkapuolelle voisi änkeä jonkun listan tai muun kokoelman joka sisältää tilesetin yksittäiset tilet, ja noista piirtoproseduureista voisi yrittää ottaa vielä enemmän selvää.

Njoo, huomisen juttuja. Nyt lopultakin tutimaan

Wednesday 16 February 2011

MEMAPper

Ilmoitusasiaa! MERPGn karttamoottori on suhteellisen valmis. Se osaa ladata säännönmukaisesti muodostettuja MEMAP-tiedostoja. Se osaa muistaakseni myös valittaa virheistä tiedostossa. Koodissa on tosin pari muistinkäyttöön liittyvää bugia, mutta ne selvinnevät jossain välissä.

Mutta, nyt kun meillä on laturi olemassa, tarvitsemme jotain mikä tuottaa ladattavia tiedostoja. Eli lienee aika laajentaa MESDK:ta. MESDK:n ensimmäinen epävirallinen jäsenhän oli Yoolblogin ja D&W:n sisarblogi: merpgtarina.blogspot.com. Se ei tule ladattavaan MESDK:hon, toisin kuin MEMAPper - ohjelmasta alkava sovellusperhe. Kuten hienosta prologista ja nimestä voinee päätellä, tällä ohjelmalla pitäisi olla mahdollista ja helppoa toteuttaa MEMAP-tiedostoja. Toki noita karttoja voisi tehdä vaikka heksaeditorilla tai vaikka kasaamalla CB:hen kartankirjoitusskriptin joka kirjoittaa tarvittavan tiedoston. Olen vain liian vanha sellaisiin, ja tämä MESDK toimii loistavana harjoituksena tälläisestä SDK-riippuvaisesta projektista.

Minulla on tuosta MEMAPperista valmiina luonnoksenomainen Javakäyttöliittymä. Olen nyt puolentoista päivän ajan yrittänyt saada Javan kuvaluokista irti jotain järkevää tapaa toteuttaa piirtopinta. Jos en saa Javasta mitään irti, voisi .NET olla kivahko alusta jos sen piirtelyluokat eivät olisi vielä huonommin dokumentoidut. Kolmas vaihtoehto olisi käyttää SDLään perustuvaa piirtelyluokkaa ja opetella käyttämään vaikka wxWidgetsiä. Toimivuuden rinnalle C++-toteutuksessa tulisi sellainen ongelma, että ohjelman käyttötuntuma on vähintäänkin viritteliäs ja kokeellinen kun piirtopinnoille ja muille käyttöliittymäelementeille on omat ikkunansa. Lisäksi tuon toteutus saattaa olla, anteeksi ranskankieleni, vähintäänkin vituttavaa. Sanotaan että C++ on kiva ja erottaa pojat miehistä, mutta Kökkökeräystä hyödyntävät kielet ovat silti joissain asioissa paljon kivempia. Niillä kirjoitetut ohjelmat kaatuvat useimmiten järkevästi järkevin virheilmoituksin, toisin kuin eräällä_tietyllä kirjoitetut ohjelmat.

Njoo, saa nähdä mitä tuosta tulee.

Friday 11 February 2011

Tunne hulluus vasemmassa varpaassasi

Teinpä havainnon, kun lukee komentoriville kolme kertaa tiedoston sisällön ja sulkee ohjelman KOMENTORIVI-IKKUNAN RAKSISTA, se sulkeutui aivan kauniisti. SDL-ikkunasta suljettaessa taas se kaatui väkivaltaisesti.

Kun olin tarpeeksi koheltanut ja väsännyt, lausuin perkeleen ja päätin että kunnes keksin ratkaisun, julkaisen julkaisujen mukana selvät ohjeet: peliä ei saa sulkea SDL-ikkunasta vaan se on suljettava tämän rinnalla aukeavasta cmd-ikkunasta.

Jos tuo äskeinen kuulosti siltä kuin odotettavissa olisi jotain esittelyjulkaisuja, älkää unta nähkö :D Karttamoottori on tosiaan vielä alkutekijöissään. Tämä blogahdus on vain pientä tunteiden purkua :P Tähän MERPG-projektiin tullaan hajoilemaan vielä ja paljon

Ei tykkää, ei

Kirjoitin "virallisen" MEMAP-formaattispeksin ja loin mallitiedoston speksin pohjalta. Seuraavaksi piti luonnollisesti kirjoittaa laturi tälle tiedostolle.

C++:n standarditiedostokirjasto kuuluu pakko-tietää tason yleissivistykseen... ainakin tekstitiedostojen luvun ja kirjoituksen suhteen. Binääritiedostojen käsittelyä en laskenut siihen kastiin ennen tätä projektia. Nyt se piti kuitenkin opetella, koska mallitiedosto ja speksit olivat binääritiedosto-ajatuksen pohjalla.

Joka tapauksessa, tutustuin fstreamin read-metodiin. Teoriassa äärimmäisen helppo tapa napata tiedoston sisältö muistiin lukuina - käytäntö on aina tarua ihmeellisempää. Kasasin tuon latausfunktion luokan sisään MERPG-projuun, en lisännyt minkäänlaista kutsua koko luokkaan, käänsin ja ajoin. Ohjelma käynnistyi ja piirsi ruudulle mitä odotin, joten suljin ohjelman -> BÄNG! MEMAP.exe lakkasi toimimasta.

Väänsin ja käänsin koodia, kirjoitin sen uudestaan C:n tiedostofunktioin, ja silti se ei toiminut. Tuossa on uskoakseni jossain pieni bad pointer tai puskurinylitysbugi. Kun ehdin, voisin yrittää samaa toteutusta skriptitiedostona, koska C++:n virtaoperaattorit, joita käytetään tekstin lukemiseen, eivät pelaa vaarallisesti osoittimilla. Saa nähdä.