Projektipäiväkirja


Torstai 11.12. Kello 20:04

Tästä se sitten alkaa, ensimmäisen oman ohjelmaprojektini toteutus. Käsillä kaikki tarvittavat välineet: kalakirja, java-api, XEmacs ja projektisuunnitelmani, jota tosin pitäisi muuttaa hieman. Alkuperäinen ajatus sovelmasta ei onnistu, koska sovelma ei osaa lukea eikä kirjoittaa, joten high score -taulukon teko vaatisi kohtuuttomia ponnistuksia. Teen siis tavallisen sovelluksen. Säästän samalla aikaa, kun ei tarvitsekaan perehtyä sovelmien tekoon. Toinen hyvä puoli on, että voin käyttää swingiä awt:n sijaan. Vähän harmittaa silti, koska olisin halunnut esitellä peliäni myös muilla paikkakunnilla asuville tutuilleni, ja mahdollisesti myös järjestää jonkinmoista kilpailua parhaasta tuloksesta.

Perjantai 12.12. Kello 01:43

Pitäisi kai kohtapuoliin käydä nukkumaan. Innostuin koodaamisesta sen verran, että aika meni kuin siivillä. Edistystäkin tapahtui huomattavasti: loin tyhjästä luokat Pommi, Laukaus ja Peli (sekä Kuuntelija), ja pääsin hommassa jo niinkin pitkälle, että onnistuin tuhoamaan taivaalta tippuvia pommeja kliksauttamalla niitä hiirellä. Asia, jonka uskoin projektisuunnitelmaa tehdessäni olevan eräs kovimmista haasteistani - pommien ja tykinlaukausten keskinäinen kommunikointi - hoitui hienoisen apin selaamisen jälkeen varsin yksinkertaisesti. On sitä tosin vielä hiottava, mutta perusta alkaa olla kasassa.

Välillä käväisi jo mielessä, että tulinko valinneeksi peräti liian helpon aiheen. Tällä etenemisvauhdillahan projekti olisi valmis puolessa suunnitellusta ajasta. Toisaalta on mukavaa, ettei tarvitsekaan käyttää koko aikaa perusajatuksen höyläämiseen, vaan voi keskittyä siihen olennaiseen: tekemään pelistä sellaisen, että joku voisi jopa haluta sitä pelata. Sitäpaitsi lista ominaisuuksista, jota olen kaavaillut peliini ajan riittäessä lisääväni on lähes rajaton, joten tekemistä riittää.

Lauantai 13.12. Kello 03:26

Kellonajasta päätellen minussa täytyy olla jotain pahasti vialla. Aloitin koodaamisen perjantaina yhden maissa ja neljätoista tuntia hurahti rattoisasti (välissä tosin jokunen tauko, tehokasta koodausaikaa ehkä 12-13 tuntia). Mitäpä sitä nuori mies muutakaan perjantai-iltana tekisi?

Joka tapauksessa päivän koodaussessio lähti käyntiin hieman vaisummin kuin edellinen. Säikeeni eivät kommunikoineetkaan keskenään aivan niin hienosti kuin kuvittelin. Ensimmäinen ongelma oli, että pommeja iteroidessa ohjelma heitti poikkeuksen, jos iteroitavaan joukkoon tuli tällä välin lisää pommeja. Tämän kanssa tuskailin kauan, kunnes huomasin kirjasta kohdan, jossa kerrottiin, että kyseisessä tapauksessa kannattaa käyttää säieturvallista vector-luokkaa. Päänvaivaa aiheutti myös kaava, jolla pommi tuhoutuisi laukauksen myötä juuri oikeassa kohdassa. Piirtelin paljon geometrisia kuvia, kunnes tajusin selvääkin selvemmän ratkaisun. Ikävä kirjoitusvirhe kaavassa vei aikaa vielä reilusti lisää.

Joka tapauksessa sain säikeeni sellaiseen kuntoon, että pommit putoilivat oikein ja laukaukset tuhosivat juuri oikean pommin oikeassa kohdassa. Aikaa oli kuitenkin tuhraantunut, joten piristääkseni itseäni aloin viilata pelini ulkoasua. Loin valikkorivin asianmukaisine kuuntelijoineen, valikkorivin sekä yläpaneelin, johon ehdin vielä kyhätä pelikellosäikeen. Jostain syystä pommini eivät tosin enää näiden lisäysten jälkeen suostuneet putoilemaan, mutta sen vian selvityksen jätän seuraavalle kerralle. Toinen ihmetyksen aihe on, miksi taustaväri ei suostu vaihtumaan harmaasta tavoittelemakseni turkoosiksi. Muutos tapahtuu vasta, kun ikkunan reunasta vetää tai sen pienentää tai suurentaa. Käsittämätöntä, mutta ei onneksi pelin toiminnan kannalta kovin fataalia.

Joka tapauksessa seuraavalle päivälle on toimintasuunnitelma melko selvä: mainitsemani ongelmat ratkottuani ryhdyn viilaamaan pelattavuutta sellaiseksi, että peli on todella peli. Pistelaskussa ja high score -taulukossa on myös mukavasti tekemistä. Ja joskus pitäisi kommentoidakin, toistaiseksi en sitä ole pyhistä päätöksistäni huolimatta jaksanut tehdä.

Sunnuntai 14.12. Kello 13:26

En jaksanut yöllä kirjoittaa päiväkirjaa, joten paikataan se nyt. Aloitin eilen koodausurakan noin kello kahdelta päivällä ja lopetin noin puoli kolme yöllä. Väliin mahtui kuitenkin enemmän tai vähemmän säännöllisiä taukoja, joten tehokasta koodausaikaa oli ehkä 9-10 tuntia.

Aloitin ratkaisemalla edellisen päivän ongelmat. Taustaväriongelma ratkesi oikeastaan itsestään, kun tein koodiini erinäisiä muita muutoksia saadakseni pommit putoilemaan, enkä jaksanut pohtia sen syitä. Pommit taas alkoivat putoilemaan, kun siirsin säikeen luonnin main-metodiin. En ole vielä keksinyt, miten saisin luonnin toimimaan niin, että peli alkaisi vasta siinä vaiheessa, kun valitaan valikosta "aloita peli". Kyseessä ei kuitenkaan liene suurista suurin ongelma.

Sen sijaan olen törmännyt todelliseen probleemaan: kun pommeja tulee tarpeeksi näytölle, pelini alkaa heittää OutOfMemoryErroreita ja kaatuu! Muisti ei riitä, kun yhtäaikaa toiminnassa olevia säikeitä on tarpeeksi monta. Itse asiassa animaatio tökkii jo heti alussa. Peli hyytyy myös ennen pitkää, vaikka pommeja tulisi tasaisena virtana. Epäilen, että huolimatta siitä että pommin tuhouduttua sen säie muuttuu epäaktiiviseksi, kyseinen säie jää silti kuormittamaan muistia jotenkin. Olisi tarvis tietää enemmän säikeiden toiminnasta sekä siitä, miten kuormitusta voisi vähentää. Tämä on nähdäkseni viimeinen kriittinen ongelma: kun olen sen ratkaissut, kaikki muu on varsin helppoa.

Pelini on jo nyt sillä asteella, että sitä on ennen hyytymistä hauska pelata: pommivirta kasvaa tasaisesti, ampuminen lähelle kestää vähemmän aikaa kuin ampuminen kauas (kyseisen ominaisuuden toteutukseen olen varsin tyytyväinen), pistelaskuri rullaa ja alkeellinen tulostaulukkokin on jo nähtävissä. Tulostaulukkoa varten otin käyttöön vanhat nelosharjoituksessa tekemät Tulosrivi- ja Tulostaulukkoluokkani, joita muokkasin vähän. Lisäksi minun piti luoda Taulukko-luokka, joka luo mallin, jonka perusteella swing luo JTable-taulukon tulostaulukon tiedoista. Taulukon ulkonäössä ja esityksessä riittää viilaamista, mutta tiedot näkyvät oikein. Kaiken kaikkiaan olen todella tyytyväinen etenemiseeni: olen käyttänyt aikaa kolmisenkymmentä tuntia ja pelini on jo varsin hyvällä mallilla. Jos muistiongelma vielä ratkeaa nopeasti, voi alkuperäisestä ajankäyttöarviostani (100 tuntia) todennäköisesti ottaa huoletta ainakin pari-kolmekymmentä tuntia pois. Parempi näin päin.

Maanantai 15.12. Kello 03:29

Taas tällainen kirjoitusaika. Sunnuntain ohjelmassa oli hieman muutakin kuin koodausta, jonka aloitin vasta puoli kuuden-kuuden maissa. Siitä lähtien jatkoinkin työskentelyä enemmän tai vähemmän tiiviisti koko ajan. Ajankäyttöön nähden päivän anti oli melko surkea. Eilen eteen tulleista ongelmasta muistiongelmaan sain hieman helpotusta, kun tajusin poistaa säikeiden lisäksi myös pommien ja laukausten luomat paneelit. Tällä hetkellä peli tökkii vielä jonkin verran, enkä tiedä mitä se sanoo, jos pistän pommeja tulemaan kerralla vielä enemmän kuin nyt, mutta nykyisellään peli on itse asiassa varsin pelattava. Vaikeusaste kasvaa juuri sopivasti, ja kahden minuutin jälkeen selviäminen alkaa jo olla varsin hikinen urakka. Jos palauttaisin työni jo tässä vaiheessa, voisi kolmonen olla realistinen arvosana, sen verran paljon olen jo saanut aikaiseksi. Mutta kuka nyt kolmoseen tyytyisi?

Toinen viimeksi mainitsemistani ongelmista, pelin aloittaminen, osoittautui käsittämättömän vaikeaksi. Kulutin siihen varmaan useamman tunnin, ja olen täysin lähtöruudussa. Ongelma on, että jos pommien pudottamisen eli käytännössä varsinaisen pelin aloittavaa lisaaPommi() -metodia kutsutaan jossain muualla kuin main-metodissa, se ei toimi. Uuden peli-ikkunan avaaminenkaan ei jostain syystä toiminut, vaan ikkuna näytti pelkkää harmaata, kunnes viisi pommia oli pudonnut kaupunkiin. Olisi mukavaa tietää, onko olemassa joku metodi, jolla saa main-metodin lykkäämään jonkin metodin suoritusta siihen asti, että jonkin muuttujan arvo vaihtuu tms. Jos en jotain mullistavaa pian keksi, jäänee aloittaminen toteuttamatta.

Taulukkoakin viilasin varmaan yhteensä ainakin pari-kolme tuntia. Nyt se näyttää suhteellisen hyvältä. Sellainen ominaisuus olisi vielä mukava saada, että aina pelatun pelin jälkeen taulukosta erottuisi selkeästi kyseisen pelin tulosrivi, esimerkiksi jollain kirkkaalla värillä. Kyseisen ominaisuuden toteutuksessa taitaa tosin olla useampiakin ongelmia, mutta ajattelin silti yrittää, kun aikaa kerran on. Muutenkaan tekeminen ei heti lopu: mm. jonkinnäköinen tykki olisi kiva saada, ja hiiren liikkeiden mukaan kääntyvää tykinputkeakin ajattelin yrittää (vaikka apin perusteella sellainen ei taida onnistua, ja jos jostain syystä onnistuisikin, olisi taas yksi säie lisää viemässä muistia...). Lisäksi ajattelin liittää peliini jotain ääniefektejä. Netistä löytyy varmasti jotain kivaa. Samoin olisi mukavaa saada nykyisten pommien ja laukausten tylsien yksiväristen ympyröiden tilalle hienoja kuvia, mutta muistiongelma on varmaan taas otettava huomioon(kuten myös äänten kanssa). Kaikki pommit tuhoavaa ydinlatausta ei liene kovin vaikea toteuttaa, joten sellaisen voisin tehdä. Lisäksi pitää kirjoittaa ohjesivu ja kommentit sekä siistiä koodia noin yleisesti(olen erilaisia juttuja kokeillessani jättänyt koodini melko retuperälle). Pelattavuuden lisäviilauskaan ei olisi pahitteeksi...se vaan ei ole kovin kivaa, koska pommeja ei kuitenkaan voi muistin menon pelossa lisätä hirvittävän suuria määriä. Noh, huomenna pidän joka tapauksessa taukoa koodaamisesta ja vietän pikkujoulua. Tervetullutta vaihtelua.

Keskiviikko 17.12. Kello 05:30

Päiväkirjankirjoitusajat käyvät yhä vain järkyttävämmiksi. Itse asiassa herätessäni tiistaina kahdelta päätä jomotti sen verran, että valmistauduin viettämään krapulapäivää. Yllättäen särky hellitti kuitenkin pian ja pää alkoi tulvia ideoita koodauksen suhteen.

Päivä kului pieniä viilauksia tehdessä (ja piste-ennätyksiä rikkoessa). Tein muun muassa ohjedialogin, josta tuli varsin tyylikäs. Jostain syystä asettelun lukeminen suoraan html-tiedostosta kirjan neuvomalla tavalla ei kuitenkaan toiminut, joten jouduin kirjottamaan tekstin tageineen suoraan koodiin. Työlästä eikä kovin kauniin näköistä koodia, mutta toimii.

Noin puolen yön maissa tuskastuin pelini pätkimiseen ja päätin konsultoida vanhempien tieteenharjoittajien projektien loppuraportteja. Muistin, että Haaviston Mirje oli myös tehnyt pelin, jossa oli ruudulla samaan aikaan paljon liikettä. Kurkistin Mirjen koodia ja kas, ongelmani paljastui kaikessa yksinkertaisuudessaan: uusien säikeiden (ja paneelien) sijasta minun kannattaisikin käyttää vain yhtä! Tässä esitettynä tämä kuulostaa niin loogiselta, että väkisinkin rupeaa pohtimaan, miksen sitä aikaisemmin keksinyt.

Jostain syystä kuvittelin aikaisemmin, ettei toteutus onnistu vain yhden säikeen avulla. Nyt päätin kuitenkin yrittää. Tallensin vanhan pelini toiseen hakemistoon ja sen jälkeen laitoin kaikki uusiksi: tein uuden luokan pommipaneeli, johon ladoin aiemmin pelissä, pommissa ja laukauksessa sijaineita metodeita. Heitin kasan vanhoja ratkaisuja romukoppaan ja kehittelin lennossa uusia. Koodasin pitkään ilman kääntämistä, ja virheiden listakin oli sen mukainen. Monenlaista ongelmaa ilmeni, mutta vihdoin noin kymmenen minuuttia sitten sain ohjelmani siihen pisteeseen, että pommit putoilivat ja niitä pystyi tuhoamaan. Minkäänlaista pätkimistä ei ilmennyt. Animaatio oli täydellisen sulavaa. Palkitsevaa.

Mirjen koodista sain myös yksinkertaisen nerokkaan vinkin pelin aloittamisen toteuttamiseen: case-rakenne run-metodin sisällä hoitaa homman näppärästi. Säie on koko ajan aktiivinen, run-metodin suoritus vain riippuu pelin tilasta. Nerokasta. Kyseistä ratkaisua ei myöskään olisi voinut toteuttaa vanhalla menetelmälläni.

Huomiseksi (tai siis täksi päiväksi) riittää mukavasti työsarkaa. Tällä hetkellä pelin pelattavuus ei ole vielä mistään kotoisin. Pommien putoamisen ajoitusta pitää viilata, ja laukaukseen pitää saada jollain konstilla mukaan lentoaikaominaisuus (yksi niistä harvoista asioista, joka oli helpompi toteuttaa vanhalla mallillani). Lisäksi jo mainitsemani pelin aloitus, ja myös kaikki muut vanhat hienot ratkaisuni, kuten pistepaneelin sälät ja parhaiden tulosten tallennus on pultattava mukaan uuteen versioon. Minulla on kuitenkin suhteellisen selvä käsitys kaikkien näiden vaiheiden toteutuksesta. Tästä eteenpäin koodaus käy kuin tanssi. Toivottavasti.

Torstai 18.12. Kello 04:08

Aikaisessa tänään. Noh, joka tapauksessa tänään (ja eilen) kaikki sujui tosiaan kuten viimeksi aavistelin, eli kuin tanssi. Pistepaneeli oli yksi niistä lukuisista asioista, joiden toteuttaminen tällä uudella systeemillä on huomattavasti helpompaa (itse asiassa poistin koko luokan ja siirsin sen olennaiset osat Pommipaneeliin). Ilahduttavasti myös vanhat ratkaisuni ohjeiden ja tulosten näyttämisestä tulivat mukaan lähes sellaisinaan. Nautinnollisinta oli kuitenkin pelin aloituksen tekeminen mainitsemallani switch-rakenteella: nyt peli-valikosta voi aloittaa pelin, lopettaa sen ja myös keskeyttää sen vaikkapa kännykkäpuhelun ajaksi ja jatkaa taas hetken päästä.

Nämä hienoudet tehtyäni päätin käydä seuraavaksi tulosten ilmoittamisen kimppuun, koska sain oivan idean siitä, miten tulostaulukon voisi toteuttaa niin, että aina pelatun pelin jälkeen kyseisen pelin tulos (top-kymppiin mahtuessaan) näkyisi eri värillä kuin muut. Ratkaisussani oli vain yksi mutta: en löytänyt mitään keinoa, jolla yhden taulukon rivin taustaväriä, sen solujen tekstin väriä tai yleensä mitään muuta kuin koko taulukon taustaväriä saisi muutettua. Kahlasin läpi apin ja java-tutoriaalin, tuloksetta. Olen varma, että minulta jäi jotain huomaamatta, ja ratkaisu olisi todellisuudessa ollut varsin yksinkertainen.

Joka tapauksessa päätin etsinnän tuloksettomuuteen tuskastuttuani tehdä asiat vaikeimman kautta. Toisin sanoen JTable romukoppaan ja tilalle JPanel, JLabelit ja GridBagLayout! Koodista tuli aika ilkeän näköistä, koska labeleita ei niiden vaihtelevien sisältöjen vuoksi voinut latoa yhdellä silmukalla, vaan silmukoita piti tehdä oma jokaiselle sarakkeelle. Mutta joka tapauksessa olen nyt erittäin tyytyväinen ratkaisuuni: JLabel-taulukon ulkoasusta saa mielestäni tyylikkäämmän kuin JTablen vastaavasta, ja lisäksi myös alkuperäinen ajatukseni onnistui juuri niin kuin pitikin, eli pelin jälkeen pelaajan rivi näkyy punaisella, muut mustalla. Lisäksi peli osaa hienosti ilmoittaa, päästiinkö top kymppiin tai tuliko peräti uusi ennätys.

Päivän viimeisenä asiana ryhdyin vielä hiomaan pelattavuutta kuntoon. Laukauksen lentoajan sain lopulta mukaan kohtuullisen näppärästi. Sen sijaan pommien putoamisnopeus muutoksineen on vielä työn alla. Pelattavuus pitäisi saada sellaiseksi, että koko ajan on kädet täynnä työtä, mutta toisaalta yli minuutin suorituksiinkin pitää olla mahdollisuus. Vaikeusasteen on kasvettava jatkuvasti (kunnes se on lopulta mahdoton), mutta ei liian nopeasti eikä hyppäyksittäin. Ongelma on, että mukana on niin monta satunnaista muuttujaa: pommin lähtöpaikka, pommin suunta, pommin nopeus, odotusaika ennen seuraavan pommin pudottamista ja odotusajan pieneneminen. Nämä pitäisi saada johonkin järkevään tasapainoon, ettei homma mene pelkäksi säkäpeliksi. Toisaalta peli on niin yksinkertainen, että satunnaisuudenkin on oltava mukana, jotta tuloksissa olisi edes jonkinlaista vaihtelua.

Ensi kerraksi jää edellä mainitun asian pähkäilyn lisäksi lähinnä hienosäätöä. Ääniefektit olisi kiva saada mukaan, niiden kimppuun käyn varmaan seuraavana. Graafisesti peli on minusta kohtuullisen tyydyttävä, joten animaatioita tai muita hienoja kuvia en välttämättä kaipaa. Kaikki pommit tuhoavien ydinpommien mukaantuominen lienee helppoa(olettaen, että apista löytyy hiiren oikean napin kuuntelija), mutta en tiedä, olisiko niillä loppupeleissä mitään pelillistä funktiota. Toisaalta se saattaisi tuoda peliin yhden taktisen elementin lisää, joten pistetään harkintaan.Tykin animaatiota en enää pohdi, vaikka sen viemistä resursseista ei enää tarvitsisikaan huolehtia. Tykki ei toisi mitään lisää itse peliin, ja koska en myöskään löytänyt apista keinoa kuunnella hiiren liikkeitä yhden ja saman komponentin päällä, annan suosiolla olla.

Viimeisenä odottaakin sitten koko projektin tylsin osuus: koodin siivous. Varsinkin muuttaessani vanhasta systeemistä tähän uuteen tein ja poistin muuttujia ja metodeita sellaista vauhtia, että jossain lojuu varmasti turhia. Lisäksi pitäisi pohtia, voisiko jotain ratkaisuistani toteuttaa paremmin/kauniimmin. Se on osa-alue, jonka yleensä skippaan, vaikka ei pitäisi. Jostain syystä vain ahdistaa yrittää korjata jotain, joka toimii. Ehkä jonkinlainen yleissilmäys on kuitenkin tarpeen. Myös importeissa on tarkistamisen varaa, .*-ratkaisut pitää saada sieltä pois. Se on onneksi helppoa, kun vain tarttuu toimeen. Ja sitten on vielä se dokumentointi, jota en ole edes aloittanut...huokaus.

Lauantai 20.12. Kello 01:48

Vähän inhimillisempi aika. Aloitin torstaisen vapaapäivän virkistämänä työt jo ennen puolta päivää. Heräsin kymmeneltä ja olin ajatellut mennä kahdeltatoista nukkumaan, mutta näin siinä taas kävi. Arviolta 12 tuntia päivästä hurahti iloisesti koneen ääressä.

Sain pelini tänään valmiiksi, ja ehdin jo kommentoidakin pari luokkaa, joten laskeskelin tässä urakkaan käytettyä aikaa. Laskutavasta riippuen summaksi tulee 80-90 tuntia. Täysin tarkkaa laskemaa on vaikea tehdä. Kone ja xemacs ovat olleet auki varmasti ainakin sen 90 tuntia, ehkä ylikin. Toisaalta koodaamiseni on välillä ollut vähemmän tehokasta: lehden luku, tunti. Syöminen, tunti. Kitaran soittelua ja yleistä palloilua, tunti. Joka tapauksessa en ole varmasti kovin väärässä jos arvioin, että kunhan vielä kommentoin loput luokkani ja viilaan ne muutenkin kuntoon sekä teen loppuraportin (huomisen urakka), on kokonaisajankäyttöni max se 100 tuntia, jonka alun perin budjetoinkin.

Alkuperäisen arvion perusteella olen siis pysynyt aikataulussa. Toisaalta siinä vaiheessa kun tein kyseisen arvion, ei minulla ollut hajuakaan siitä, mihin olin ryhtymässä. Sen sijaan itse työtä aloitellessani olin hyvin valmistautunut ja suunnitelmallinen, ja ensimmäisen illan jälkeen uskoinkin selviytyväni urakasta huomattavasti nopeammin.

Työn eteneminen ei pysähtynyt missään vaiheessa, enkä kertaakaan törmännyt ongelmaan, johon en olisi löytänyt apua netistä. Pahin hidaste oli ehdottomasti järjetön oivallukseni ryhtyä tekemään monisäikeistä sovellusta. Jos olisin tajunnut heti alussa, että yksi säie riittää, olisin säästäny varmasti suolaiset 15-20 tuntia. Muita pahempia suunnitteluvirheitä ei ollut, joskin monet asiat olisi varmasti voinut toteuttaa yksinkertaisemmin, tyylikkäämmin, paremmin ja vähemmällä työllä.

Positiivisiakin syitä hitauteen löytyy. Olen koko urakan ajan ollut käsittämättömän innostunut siitä mitä teen ja halunnut jatkuvasti oppia uutta, jopa sellaistakin mitä en kyseisessä projektissa tarvitse. Toisaalta myös lisäsin peliini käytännössä kaikki projektisuunnitelmassa mainitsemat lisäominaisuudet (ehkä tykin animointia lukuunottamatta) ja vielä paljon enemmänkin. Jokainen luokka on täynnä pieniä yksityiskohtia, joista olen tavattoman ylpeä.

Takaisin tähän päivään, joka oli kerrassaan erinomainen. Ei mikään, ei sitten kerrassaan mikään mennyt pieleen. Olin listannut edellisen kerran päätteeksi loput asiat, joita pitäisi tehdä. Lopputoimien lisäksi näitä oli neljä: pelattavuus oli saatava kuntoon, ydinpommi lisättävä, ääniefektit lisättävä ja animoitu ammus lisättävä. Noin kello 21:00 kaikki nämä ominaisuudet toimivat kuin unelma. Eniten säätämistä oli ääniefekteissä, joita en meinannut saada toimimaan sitten millään. Onneksi löysin Sunin java-tutoriaalista varsin hyödylliset ohjeet. Viimeinen kompastuskivi oli, että kokeilemani äänitiedosto oli väärää tyyppiä, eikä suostunut soimaan. Tiedoston vaihto ratkaisi pulman. Nyt äänet ovat kunnossa, sillä löysin mielestäni varsin tymäköitä äänitiedostoja osoitteesta http://www.freeaudioclips.com. Suosittelen paikkaa lämpimästi.

Joka tapauksessa peli oli siis valmis yhdeksältä. Koska virtaa riitti, aloitin saman tien kommentoinnin ja koodin siivouksen. Sain hoideltua kaksi pahinta luokkaa, Pelin ja Pommipaneelin. Ensin mainitun 397 riviä tuntuvat jo paljolta, jälkimmäisessä koodia onkin sitten hulppeat 975 riviä. Kannattaa tosin huomata, että määrät selittyvät paljolti pyrkimykselläni siistiin koodiin ja tarkkaan kommentointiin: ennen kuin aloitin kommentoinnin pommipaneelissa oli rivejä vajaat 500! Rivejä tuli lisää paitsi kommenteista myös importeista, jotka laitoin kuntoon sekä lukuisista selkeyden vuoksi jätetyistä tyhjistä riveistä ja pitkille riveille tehdyistä rivinvaihdoista. Nopeasti laskettuna täysin kommentoimattomia luokkia ovat ainakin Kaupunki, Ohjekehys, Pommi, Laukaus ja ParhaatTulokset, mutta ne ovat kaikki melkomoisen pieniä, eikä niistä tule yhteensäkään edes puolta pommipaneelin rivimäärästä. Lisäksi Tulosrivin ja Tulostaulukon kommentteja on rukattava jonkin verran, ainakin jälkimmäisen, koska tein siihen erinäisiä muutoksia viritellessäni rivin värjäystä. Importit on myös laitettava kuntoon kaikista.

Silti urakkaa on yhteensä jäljellä tuskin paria kolmea tuntia pidempään. Sen jälkeen ajattelin väsätä saman tien loppuraportin, kun kaikki projektin herättämät ajatukset ovat vielä kirkkaana mielessä. Olen sopinut - koodauksesta riippumattomista syistä - pysytteleväni Espoossa maanantaihin asti, joten ehdin tehdä kaikki rästiin jääneet hommat. Loppuraportin jälkeen voisin laittaa portfolion kuntoon, sen jälkeen päivittää kotisivuni...tekemistä riittää juuri sopivasti vielä pariksi päiväksi. Mukavaa olla kerrankin ajoissa. Sitten voikin huoletta pitää kahden viikon joululoman ja palailla Espooseen vasta vähän ennen loppudemoja. Ainoa asia, jonka jätän suosiolla loman jälkeiselle ajalle on luokkakaavion kasaaminen Poseidonilla, koska en jaksa lähteä koululle. Mutta nyt tutimaan, johan tässä menee koko yö kirjoitellessa.

Sunnuntai 21.12.2003 Kello 01:24

Projektipäiväkirjan viimeinen luku. Päivä meni suhteellisen leppoisissa tunnelmissa, uhrasin koodille vain muutaman tunnin. Siinä ajassa sain kirjoitettua loput kommentit. Lopuksi laskin kirjoitetut koodirivit. Sain summaksi 2532. Kuulostaa huikealta summalta, mutta ennen dokumentointia rivejä oli kasassa ehkä vajaat 1500. Nyt koodi on huippusiistiä, eri rivinvaihtoja on mahdollisimman paljon, ja kommentointi on myös jokaisessa luokassa varsin tarkkaa.

Kommentoinnin lisäksi laitoin luokkien importit kuntoon ja paikoin siistin hieman koodiani. Siirsinpä pommin liikuttamisesta vastaavan metodinkin pommipaneelista pommiin, jossa oli sen luonteva paikka. Siellä se oli alunperin ollutkin, kunnes toista ongelmaa etsiessäni tulin sen siirtäneeksi. En onnistunut edes möhlimään mitään siirtoa tehdessäni.

Lisäksi käytin aikaani pelin pelaamiseen, paitsi koska se on hauskaa myös etsiäkseni mahdollisia virheitä. Kyseistä toimintaa pitää varmaan harrastaa lisää, sillä pelattuani muutaman pelin onnistuinkin löytämään bugin: näytölle ilmestyi ArithmeticExceptioneita. Syy oli nollalla jako. Omasta mielestäni sen ei pitänyt olla mahdollista kyseisessä kohdassa, sillä olin jo sen estänyt, mutta lisäsin kuitenkin tuplavarmistuksen, jonka jälkee poikkeuksia ei ole enää kuulunut. Koska olen testannut peliäni käsittämättömän paljon, ja se kuitenkin on pohjimmiltaan aika yksinkertainen, en pysty keksimään missä enää voisi olla virheitä. Jatkan silti varmuuden vuoksi pelin pelaamista. Se on siis kuitenkin onneksi aika kivaa. Miellyttävästi en ole tainnut vielä kertaakaan onnistunut saamaan samaa pistemäärää kahta kertaa nykyisessä versiossani.

Joululomani alkaa maanantaina, joten minulla on vielä päivä aikaa. Sen aikana minulla on tarkoitus saada loppuraportti poseidonilla tehtyä luokkakaaviota vaille valmiiksi, mikä ei liene mahdoton urakka. Lisäksi työstän portfoliota niin paljon kuin ehdin, ja jos sen jälkeen vielä jää aikaa, otan käsittelyyn nettisivuni. Joka tapauksessa projektipäiväkirjanpitoni päättyy näillä näkymin tähän (ellen sitten löydä joitain ratkaisevia bugeja, joista pitäisi mainita). Piste.

| Sivun alkuun || Loppuraportin pääsivulle || Portfolioni pääsivulle |


Copyright © Juho Makkonen
jomakko2 (@) cc.hut.fi
http://www.hut.fi/~jomakko2/