LOPPURAPORTTI
1. Ohjelman kuvaus
1.1. YleiskuvausÖtökkämatikka on matematiikkaohjelma, joka on tarkoitettu lapsille noin kolmivuotiaasta ylöspäin. Pääasiallisina kohderyhmänä ja testihenkilöinä ovat omat lapset (iät koodin kirjoittamisen aikaan 3v 10kk ja 1v 10kk). Ohjelman ajatuksena on visualisoida yksinkertaisia laskutoimituksia, opettaa laskemaan lukumääriä, tutustuttaa yhteenlaskun perusteisiin ja palkita käyttäjää hauskoilla animaatioilla. Pääpaino on laskujen ratkaisemisessa, animaatiot ovat bonusta.1.2. AlkudialogiAlun dialogissa valitaan taso mahdollisimman helposti niin että lapsi osaa sen itsekin tehdä. Tätä projektia varten tasoja tehdään kaksi: Kuinka monta ja Laske yhteen. Ohjelma on kuitenkin suunniteltu niin, että myöhemmin on mahdollista lisätä uusia tasoja lapsen ymmärryksen ja taitojen kehittyessä.
Peliin asetettavat oletusarvot ovat samat kummallakin tasolla, mutta niitä voi aikuinen säätää myöhemmin:
1.3. Taso 1. Kuinka montaTasolla 1 lasketaan, montako ötökkää näkee kuvassa. Numerolaatikoiden väri muuttuu tummemmaksi aina hiiren kursorin ollessa laatikon kohdalla. Laatikot ovat isoja jotta lapsi osuu niihin helposti. Jos käyttäjä valitsee väärän vaihtoehdon, numerolaatikon väri muuttuu punaiseksi. Samantien saa yrittää toista vaihtoehtoa. Kun lapsi valitsee oikean vaihtoehdon, numerolaatikosta tulee kirkkaan vihreä ja ötökät lähtevät ryömimään kohti ruudun ylälaitaa. Kun kaikki ötökät ovat poistuneet näkyvistä, siirrytään seuraavaan laskutoimitukseen. Ötököiden koko skaalautuu määrän mukaan.
1.4. Taso 2. Laske yhteenToisella tasolla toiminta on periaatteessa sama kuin ensimmäisessä, mutta tarkoitus olisi oppia tuntemaan samalla myös numeroita ja ymmärtää yhteenlaskun perusteet. Lapsi voi edelleen halutessaan laskea vain näkyvissä olevia ötököitä ja vastata siihen, mutta yläpuolen laskupaneelissa näkyy lasku ja keskiosan Ötökkäpaneelissa ötököitä on kahdessa ryhmässä eroteltuna sen mukaan, minkä verran ötököitä mihinkin numeroon kuuluu. Eri numeroiden ötökät myös skaalautuvat sen mukaan, kuinka monta ötökkää numeroon kuuluu. Esim. laskussa 7 + 3 numeroon 7 kuuluvat ötökät ovat pienempiä kuin numeroon 3 kuuluvat. Visuaaliset palautteet toimivat samoin kuin ensimmäisellä tasolla, lopun oikeasta vastauksesta tulee samanlainen animaatio.
1.5 Loppuvalikko![]() Kuva 4. Loppuvalikko, jossa käyttäjä on vastannut oikein 3/5 kysymykseen. Valikosta voi aloittaa kumman tahansa tason tai sulkea ohjelman. Kun maksimimäärä vuoroja on täynnä, loppuvalikko näyttää tuloksen numeerisesti ja visuaalisesti. Ötökän ilme muuttuu tuloksen mukaan ja siinä on viisi eri vaihtoehtoa. Ilmeet on testattu kolmivuotiaalla, joka ymmärsi kaikki hyvin - jopa keskimmäisen ilmeen, joka oli "vähän hyvin mutta vähän huonosti". Käyttäjä voi valita, kummalla tasolla jatkaa vai lopettaako pelin kokonaan.
1.6 Menu ja AsetuksetÖtökkämatikan pääikkunan menuvalikossa Peli on neljä toimintoa, jotka on ajateltu aikuisen käytettäväksi. Toiminnot ovat menussa, koska nappia lapsi voisi helposti klikata vahingossa (ja siitä tulee heti huutoa vanhemmalle: "Äitii, mistä tän saa pois?"). Menusta on vaikeampi valita vahingossa toimintoja.
Asetuksissa voidaan säätää ötököiden minimin, maksimin ja vuorojen maksimimäärän. Jos käyttäjä valitsee minimin, joka on yhtä suuri tai suurempi kuin maksimi, hän saa virheilmoituksen. Tällöin ohjelma pitää valitun maksimin paikoillaan ja valitsee uuden minimin, joka on maksimi - 5. Pelin minimin minimi on 1 (tulos ei voi olla 0 koska silloin ei olisi ruudulle piirtyviä ötököitä) ja maksimin maksimi on 30. Vuorojen maksimimäärä kertoo, miten monen laskutoimituksen päästä näytetään tulos. Vuorojen maksimin maksimi on 30.
2. Tekninen toteutus
2.1 Toteutusympäristö ja käytetyt Javan luokatOhjelma on koodattu Java Developer Kit versiolla 1.6.0.11, koodieditorina on ollut Eclipse 3.4.1 ja kehitysympäristönä vuorotellen Windows XP (kotikone) ja Linux (T-talon tietokoneluokka Paniikki). Suurin osa grafiikasta on piirretty Adobe Illustrator CS3 -vektorigrafiikan piirto-ohjelmalla, osaan on myös käytetty Gimp- ja Adobe PhotoShop CS3 kuvankäsittelyohjelmia.Graafinen käyttöliittymä on toteutettu Swingillä. Javan valmiita luokkia on käytetty paketeista java.io ja java.util , graafisia käyttöliittymäluokkia paketeista java.awt, javax.swing ja javax.imageio.
2.2 Ohjelmoinnin pääperiaatteetOhjelma on koodattu niin, että olen lähtenyt liikkeelle ensin peruslogiikasta ja sitten lisännyt siihen monimutkaisempaa asiaa ympärille:
2.3 Luokkien hierarkiaKoodi on jaoteltu olio-ohjelmoinnin periaatteiden mukaisesti erillisiin luokkiin, joita on yhteensä 15. Sisäluokkia on 11, ne ovat lähinnä kuuntelijoita ja erikseen määriteltyjä paneeleita. Luokat ovat kaikki samassa paketissa, mutta ne voidaan jakaa kolmeen osaan: pelimatematiikkaan ja pelin pyörimiseen liittyvät luokat, apuluokat sekä graafiseen käyttöliittymään ja animaatioon liittyvät luokat.Ohjelman matemaattinen runko on luokassa Matikka, luokkaan Peli liittyy erilaisia pelin pyörittämiseen tarvittavia metodeita. Pelitesti pyörittää tekstipohjaista peliä testaustarkoituksia varten. Apuluokkia on kolme: Kuuntelija, Kuvamuunnokset ja Värit. Näistä Kuuntelija määrittelee nappien yhteisen toiminnallisuuden Vastauspaneelissa, Alku- ja Loppudialogissa. Tämän lisäksi napeilla on omat kuuntelijansa jotka määrittelevät tarkemman toiminnallisuuden. Kuvamuunnokset muuntaa laskuissa ja vastauksissa käytettävät numerot ja merkit kuviksi sekä muuttaa loppuarvosanan sitä vastaavaksi ilmeeksi. Loput luokat liittyvät graafiseen käyttöliittymään. Luokka Ötökkäpaneeli on osa graafista käyttöliittymää, mutta samalla se myös ohjaa yhdessä luokan Ötökkä kanssa ötököiden satunnaista sijoittelua ja animaation toimintaa.
2.4 Luokat ja niiden toiminta  2.4.1 Pelilogiikkaan liittyvät luokatMatikka - Asettaa ötököiden maksimi- ja minimimäärän, arpoo käytetyt satunnaisluvut laskua ja sen tulosta varten ja tarkistaa käyttäjän arvauksen oikeellisuuden. Tässä versiossa lasketaan ainoastaan positiivisilla kokonaisluvuilla, koska ohjelman kohderyhmä koostuu alle kouluikäisistä. Peli - Luokkaan talletetaan valittu taso, vuorojen ja oikeiden tulosten määrä. Luokka lopettaa pelin vuorojen tultua maksimiin ja antaa arvosanan riippuen oikeiden tulosten määrästä.   2.4.2 Varsinaiset GUI-luokat, myös graafisen pelin logiikkaaIkkuna - Periytyy luokasta JFrame. Piirtää graafisen käyttöliittymän perusosat paikoilleen. Luokassa määritellään menuvalikon toiminta ja luodaan uusi lasku metodilla, joka päivittää Laskupaneelin (tarvittaessa), Vastauspaneelin ja Ötökkäpaneelin. Luokka sisältää päämetodin, josta koko ohjelma ajetaan. Alkudialogi - Periytyy luokasta JDialog. Alkudialogi määrittelee alussa näytettävän tasonvalintadialogin. Loppudialogi - Periytyy luokasta JDialog. Loppudialogi näyttää tuloksen numeerisesti ja graafisesti. Loppudialogista voidaan valita uusi peli kummalla tahansa tasolla tai sulkea koko peli. Asetusdialogi - Periytyy luokasta JDialog ja toteuttaa luokan ActionListener. Asetusdialogi avataan menusta ja siitä voidaan asettaa ohjelmaan ötököiden minimi- ja maksimiarvot sekä vuorojen maksimimäärä. Laskupaneeli - Periytyy luokasta JPanel. Laskupaneeli piirtää paneelin, jossa lasku esitetään. Paneeli piirretään vain tasolla 2. Vastauspaneeli - Periytyy luokasta JPanel. Luokka piirtää vastauspaneelin ja sinne napit Matikka-luokan arpomien tulosvaihtoehtojen mukaan. Napit reagoivat oikeisiin ja vääriin vaihtoehtoihin vaihtamalla väriä. Luokka myös välittää Peli- luokalle tiedon ensimmäisellä yrityskerralla saaduista oikeista vastauksista ja kutsuu animaatiota aina oikean vastauksen jälkeen. Ötökkä - Luo ötökät, tallettaa kunkin ötökän tiedot, määrittelee skaalaussuhteen ja arpoo neliön, jonka ötökän kuva kattaa Ötökkäpaneelissa. Luokan metodit määrittelevät myös ötökän liikkumistavan ja sen, näkyykö ötökkä enää ötökkäpaneelissa. Ötökkäpaneeli - Periytyy luokasta JPanel. Luokka piirtää ötökkäpaneelin taustan, lisää tarvittavan määrän ötököitä ötökkälistaan ja piirtää ötökät paneeliin. Luokassa toteutetaan ötököiden kuvien skaalaus Ötökkä-luokassa määriteltyä skaalaussuhdetta käyttäen ja tarkistetaan alun ötököiden sijoittelun päällekkäisyyttä jonkin verran. Luokka käynnistää animaation ja pysäyttää sen.   2.4.3. ApuluokatPelitesti - Testiluokka, joka testaa tekstipohjaisen pelin perustoiminnot aloittamalla pelin ja pyörittämällä vuoroja niin kauan, kuin peli on käynnissä. Tekstipohjaisessa pelissä ei voi muuttaa asetuksia. .Kuuntelija - Periytyy luokasta MouseAdapter. Kuuntelija määrittelee nappien yleisen toiminnallisuuden hiiren liikkuessa napin päälle ja päältä pois. Nappi - Periytyy luokasta JButton. Luokan konstruktoreissa voidaan luoda nappeja tekstillä, ikonilla tai numerolla niin, että konstruktori muuttaa suoraan numeron ikoniksi. Piirrä-metodi määrittelee kaikille Nappi-luokan napeille samanlaisen ulkoasun (Asetusdialogia lukuunottamatta). Varit - Luokassa on kaikki ohjelmassa käytetyt värit. Kuvamuunnokset - Muuttaa pelin numerot, erikoismerkit ja arvosanat kuviksi.
2.5 Tärkeimmät algoritmitOhjelmassa oli oikeastaan vain yksi tärkeä algoritmi, muu koodi oli suoraviivaisempaa.Tulosvaihtoehtojen arpominen, luokka Matikkaint lisaaSatunnainen(int numero1)lisätään pieni satunnainen luku numeroon 1. Jos numero 1 = maksimi - 1, palautetaan maksimi. Satunnainen luku on desimaaliluku, joka on korkeintaan 20% maksimista. Arpomisen jälkeen luku pyöristetään ylöspäin, jolloin se on aina minimissään 1.
int vahennaSatunnainen(int numero1)
void arvoVaihtoehdot()
 
3. Kokemukset projektista3.1. Suunnitteluvaiheen ratkaisutSuunnitteluvaiheen käyttöliittymän käytin miltei sellaisenaan, olin siihen tyytyväinen ja hioin vain yksityiskohtia. Alun perin suunnittelin ettei aloitusdialogia tarvittaisi, mutta lopulta päätin kuitenkin että lapsi saa itse valita tason alussa. Huomasin, että omat lapseni halusivat valita mitä ötököitä milloinkin pelaavat. Silloin oli hyvä että minimi- ja maksimiarvot olivat molemmissa tasoissa samat.Ratkaisut, jotka päätin jättää kokonaan pois oli tuloslista, ötököiden kaartelu ja interaktio käyttäjän kanssa. Tuloslistalle ei loppujen lopuksi ole käyttöä alle kouluikäisten ohjelmassa, totesin että tuloksen arviointi ilmeellä on paljon käyttökelpoisempaa ja joka tapauksessa opetuksellisessa pelissä on tärkeämpää kehittää itseään kuin kilpailla muitten kanssa. Asiaan toki vaikutti myös se, että Sokobanistani tulostaulukko jäi aikatauluongelmien vuoksi aikoinaan kokonaan tekemättä. Ötököiden kiertelyn ja kaartelun toteuttaminen, törmäysten mallintaminen ja käyttäjän interaktio ötököiden kanssa olisi ollut kohtalaisen monimutkaista. Kun vihdoin pääsin siihen vaiheeseen koodia, olin jo kuluttanut jonkin verran aikaa pelin matemaattis-loogiseen pohjaan ja aika paljon aikaa GUIn toimivuuteen ja ulkoasuun. Kun vielä näin, että omat lapset innostuivat jo suoraviivaisesti liikkuvista ötököistä, totesin että jätän ötököiden oman tekoälyn suosiolla pois. Pelin pääpointti oli kuitenkin matematiikan opiskelussa, ötökät olivat siihen vain bonusta. Jos jo suoraviivaisesti liikkuvat (mutta kuitenkin parveilevat) ötökät saivat kolme- ja yksivuotiaat pojat hihkumaan, nauramaan ääneen ja innostumaan pelistä, aikaa oli turha kuluttaa enempää asiaan. En pystynyt pitämään GUI-luokkia ja pelilogiikkaa kokonaan erillään siinä vaiheessa kun siirryin graafiseen peliin ja ohjelma oli pakko refaktoroida tapahtumapohjaiseksi. Mielestäni kuitenkin onnistuin jaotteluissani niin hyvin kuin oli mahdollista. Koodausaikana tuli mieleen monenlaisia toimintoja, joita olisin halunnut toteuttaa mutta jotka jäivät kuitenkin lopputuloksesta pois. WebStart-versio, koko peliajan mittainen ajastin vanhempien määriteltäväksi, erillinen about-ikkuna, peliohje ja äänet jäivät tekemättä. Näistä ehkä WebStartin teen myöhemmin, koska haluaisin jakaa pelin pelattavaksi myös kavereiden lapsille ja sukulaisille. Muut saavat nyt jäädä. Ainahan parannettavaa löytyy, jossain vaiheessa on vain päätettävä mitkä ominaisuudet tulevat versioon 1.0 ja mitkä jätetään jatkokehityksen alle. Oikeastaan ainoat asiat, jotka olisin halunnut tehdä lopulta toisin, oli Ikkunan lukuisa ActionListener-sisäluokkien käyttö (olisin voinut yhdistää ne if-lauseella toisiinsa mutta en enää ehdi). Myös animaatio luokissa Ötökkä ja Ötökkäpaneeli oli nyt toteutettu niin, että erilaiset metodit kutsuivat toisiaan. Päällekkäisyyttä ja turhia toimintoja varmasti oli, mutta lopulta en enää uskaltanut koskea kokonaisuuteen kun pelkäsin että saan sen toimimattomaksi. Myös Ötökkäpaneelin skaalautuvuuteen olisi voinut tehdä jotain, nyt pelialue on fiksattu. Toisaalta se olisi varmasti ollut kohtalaisen vaikeaa. Muuten olen tyytyväinen omaan koodiini. Kävin sitä moneen kertaan läpi, poistin turhia getters-metodeita ja järkeistin olemassaolevia metodien kutsuketjuja. Omasta mielestäni pääpiirteittäin luokkajako oli onnistunut ja metodit olivat oikeissa luokissa.
3.2. Toteutuksen ja testauksen aikaiset bugitJoulukuun lopussa taistelin tason vaihdon bugin kanssa. Kun pelin taso vaihdettiin, maksimi- ja minimiarvot eivät muuttuneetkaan. Ratkaisin ongelman luomalla koko ikkunan uudestaan tason vaihtuessa. Vasta paljon myöhemmin tajusin ongelman johtuneen siitä, että Ikkuna -luokalle ei koskaan talletettu uutta matikka-oliota (johon muut luokat viittasivat) tason vaihtuessa.Tammikuun alussa mietiskelin nappien ulkoasua, kulutin paljon aikaa siihen, että sain niiden koon ja toiminnan oman mieleni mukaiseksi. Lopulta tein oman luokan, joka periytyi JButtonista ja jossa ylikirjoitin suurimman osan napin toiminnallisuudesta. Kaikille napeille yhteinen Kuuntelija-luokka värjäsi automaattisesti napin taustavärin tummemmaksi ja vaaleammaksi hiiren kursorin sijainnin mukaan. Samalla sain myös nappien koot ja rajat määriteltyä sopiviksi. Vähitellen ohjelma alkoi näyttää omalta eikä vain siltä, että se oli koottu kasasta valmiita komponentteja. Thread.sleepin kanssa oli paljon ongelmia, yritin ensin sillä saada ohjelman pysähtymään siksi aikaa, että käyttäjä ehtisi nähdä oikean vastauksen ja saada palautteen siitä. En saanut sitä missään vaiheessa toimimaan, muistinkin sitten ettei säikeiden toimintaan voinut oikein luottaa graafisessa käyttöliittymässä. Ongelma ratkesi kuitenkin itsestään kun lisäsin animaation ohjelmaan. Viimeisin suuri ongelma oli kaksinumeroisten lukujen kuvien tekemisessä. Keksin kaikkia mahdollisimman mielikuvituksellisia ratkaisuja, yritin pitkään tehdä kaksinumeroisista luvuista paneeleja mutta päädyin koodini kanssa sellaiseen solmuun, että jouduin suosiolla palaamaan edellisen päivän versioon. Lopulta sain numerot yhdistettyä samaan kuvaan ja kaikki toimi taas paremmin.
3.3. Oma työskentely ja resurssitEtukäteen olin päättänyt, että varaan ohjelmointiprojektille aikaa keskimäärin 2,5 päivää viikossa, kaksi täyttä 8h päivää viikolla ja 4h lauantaisin. Pidin lyhyen joululoman, enkä työskennellyt sunnuntaisin, joulunpyhinä, uudenvuoden päivänä tai loppiaisena. Näillä periaatteilla sain varattua itselleni jo 92,5h ja aikataulussa oli edelleen joustonvaraa. Pyrin ohjelmoimaan päiväsaikaan, jolloin ajatus kulkee parhaiten. Projektin loppuvaiheessa ja innostuksen puuskassa oli helppo lisätä aikatauluun myös iltatunteja jos tuntui siltä että projekti vaatii lisätyötä. Aikataulua auttoi myös kaksi ylimääräistä koodipäivää tammikuussa, jotka tulivat ylimääräisen ylityövapaan ja peruuntuneen keikan ansiosta. Aivan projektityöskentelyn loppuvaiheessa päiviä tuli vielä kaksi lisää, joista tosin käytin vain puolikkaan päivän.Huomasin selvästi, että kotona työskentely ei sopinut minulle. Vaikka olisin ollut yksinäni kotona arkipäivisin, tekemistä löytyi kaikkea muuta. Parina päivänä jopa nukuin päiväunia. Raskaus tietenkin väsytti jonkin verran ja antoi oikeutuksen unille, mutta parin epämääräisen kotikoodipäivän jälkeen siiryin suosiolla Paniikkiin ennalta määräämieni pitkien koodipäivien ajaksi. Vaikka T-talon tietokoneluokassa oli kylmä, siellä oli hyvät laitteet ja työskentelyolosuhteet. Useimmiten luokassa oli tyhjää, silloin tällöin tarjolla oli myös vertaistukea ja -apua. Loogista oli myös se, että kun lähdin luokasta, sain jättää koodin taakseni ja viettää muun ajan miettien ja tehden aivan muita asioita. Oma työmoraali oli mielestäni hyvää. Päiväkirjan pito koodin etenemisestä auttoi suuresti hahmottamaan omaa etenemistä ja piti motivaatiota yllä. Joka päivä kirjoitin jotain, päätin etukäteen mihin keskityn sinä päivänä ja päivän lopuksi kirjoitin seuraavalle päivälle lyhyen TODOn tai kirjasin ylös ongelmakohdan, johon jäin. Tällöin ei tarvinnut aloittaa mietintätyötä joka kerta alusta. Suunnitteluun kulutin suurinpiirtein sen 16h mitä olin ajatellutkin. Viimeistelyyn kulutin ehkä 10h, kun olin suunnitellut 12h, tosin koodaamiseni oli aika iteratiivista. Loppuraporttiin meni kokonaisuudessaan n. 6h (klo 15). Toteutukseen ja testaukseen olin laskenut 52h, toteutunut ajankäyttö oli 78h. Suurin ongelma oli ilmeisesti se, missä kohtaa lopetan uusien ominaisuuksien tekemisen ja oikeasti päätän koodin olevan jo valmista. Olin kuitenkin todella tyytyväinen siihen, että lopuksi tein työlääksi osoittautuneen asetusdialogin. Se teki pelistä huomattavasti monikäyttöisemmän. 4. Yhteenveto(ti 20.1.2009 klo 10.00, perhe aamiaisella)Karoliina: Tänään kirjoitan sitten sen Ötökkämatikan loppuraportin ja sitten se on valmis! Jeremias 3v 10kk (syö puuroa): Kiitos äiti. Karoliina: Tarkoititko kiitos ruoasta vai kiitos Otökkämatikasta? Jeremias: Ötökkämatikasta. Se on tosi kiva!
Jeremias: "[Tykkään Ötökkämatikasta] Aika paljon. [Hauskaa on] nää koppakuoriaiset. Hei tuu kattoon! Viidestä asti viis [oikein].
4.1. Oma arvioOlen kehittänyt ohjelmaa läheisessä yhteistyössä kohderyhmän kanssa. Omat lapset Jeremias 3v10kk ja Aamos 1v 10kk ovat pelanneet ohjelmaa innokkaasti, saaneet aikaan bugeja ja saaneet sivusta seuranneelle koodaajalle paljon parannusehdotuksia mieleen. Yli kolmivuotiaalle laskemaan tottuneelle esikoiselle ohjelma on ollut juuri sopiva ja hän pystyykin pelaamaan sitä pitkiä aikoja yksinään. Ilmeet ovat palkitsevia ja äidin pitäisi tulla katsomaan jokainen tulos. Ohjelma on opettanut tähän mennessä plus-laskun käsitteen ja lukumäärien rauhallisempaa laskemista. Aikaisemmin pienet määrät on laskettu tarkkaan mutta suurien kohdalla numeroita on lueteltu vähän miten sattuu.Yksivuotiaalle Aamokselle hiiren käsittely on vielä liian vaikeaa, mutta isoveljen pelin seuraaminen on saanut aikaan varsinaisen laskemisbuumin. Kirjoista lempikirja on tällä hetkellä se, jossa lasketaan viittä pientä ankanpoikasta ja "vakkitaan, vakkkitaan" kuuluu innokkaana pyyntönä laskemisen aloittamiseen. Aamos luettelee myös innoissaan numeroita vaikka varsinaisesta laskemisesta ei voi puhuakaan. Ötökkämatikan oikea vastaus saa pojan tuulettamaan villisti, huutamaan "jee!!!" ja liikkuvat ötökät saavat aikaiseksi naurua. Lasten peli oli fiksumpi aihevalinta kuin tajusinkaan. Oli helppoa perustella perheelle koodaamiseen kulunutta ajankäyttöä kun lapsetkin tiesivät konkreettisesti, mitä äiti tekee kaiket illat. Kun sain ohjelman graafisen käyttöliittymän toimimaan, innokkaita testaajia riitti. Ötököiden vektorigrafiikan piirtäminen sai kolmivuotiaan istumaan tietokoneen vieressä hiiskumatta yli kahden tunnin ajan. Animaation tekeminen taas sai asiantuntevia arvioita osakseen. Pelin eri versiot myös viihdyttivät molempia lapsia sillä välin kun itse jatkoin toisella koneella koodaamista tai loppuraportin kirjoittamista. Kaiken kaikkiaan olen tyytyväinen ohjelmaan. Se ei ehkä ole kovin monimutkainen logiikaltaan, mutta toisaalta koodia on paljon ja se on järjestetty loogisesti. Ulkoasu on viimeistelty ja käyttöliittymään on panostettu niin että se sopii kohderyhmälle. Napit ovat suuria ja toimivat loogisesti, kuvina esitetyt numerot näyttävät hyviltä ja sopivat lapsille. Ötököiden piirtämiseen kulutin aikaa yhden päivän verran, kiinnitin huomiota siihen että ne ovat anatomisesti oikeaoppiset viisipistepirkko ja peippikuoriainen (tosin Disney-silmillä varustettuna). Valitettavan suuri osa lasten matematiikkaohjelmista on ulkoasultaan todella tylsiä. Tässä ainakin tein parhaani. Kulutin myös aikaa siihen, että sain ötököiden liikkumisen mahdollisimman realistisen näköiseksi niin yksittäisen ötökän jalkojen liikkeen kuin myös ötököiden keskinäisen parveilun kannalta.
4.2. Tärkeimmät opitut kokemuksetVaikka minulla ei ollut ennestään ohjelmointikokemusta, kokemusta on kuitenkin ehtinyt opiskelu- ja työvuosien mittaan kertyä itsenäisestä projektityöskentelystä, laajojen kokonaisuuksien hallinnasta ja jakamisesta pienempiin osiin ja oman ajankäytön kontrolloimisesta. Teknisemmältä puolelta ennestään tuttuja olivat html-koodaus, käyttöliittymäsuunnittelu, kasvatustieteen ja pedagogiikan perusteet.Oli hienoa huomata, miten eri lähteistä asioita selvittelemällä pystyi oppimaan uusia asioita ohjelmoinnista. Alussa suurena ja epämääräisenä massana olevan suunnitelman pystyi jakamaan pieniin, toteutettavissa oleviin osasiin joita vähitellen yksi kerrallaan toteutin ja jotka sitten alkoivat toimia. Jos joskus jäin umpikujaan jonkun asian kanssa, auttoi kun lopetin koodaamisen ja aloin tehdä jotain aivan muuta. Monta kertaa kävi niin, että ratkaisu tuli mieleen kuin itsestään. Viimeisessä projektineuvonnassa huomasin jo, että vaikka assareista olikin kovasti apua, loppujen lopuksi itse olin jo oman koodini paras asiantuntija. Suuriin linjoihin oli turha kysyä apua, parhaiten assarit olivat hyödynnettävissä johonkin pieneen yksityiskohtaan - jonka senkin olisin todennäköisesti saanut itse selvitettyä. Ehkä suurin oivallus oli se, että kun syksyn alussa kokemattomana ohjelmoijana törmäsi jatkuvasti seinään, josta ei päässyt ohi kuin assarin neuvoilla, nyt se seinä oli omin voimin purettavissa tai kierrettävissä. 5. Ohjelmakoodi ja JavadocOhjelmakoodiJavaDoc Tietolähteet:
|