Ötökkämatikka
Informaatioverkostot, Studio1
Ohjelmointiprojekti
Maria-Karoliina Tiuraniemi

Alkuun

    PROJEKTIPÄIVÄKIRJA

Ajankäyttösuunnitelma

Viikko Viikonpäivät Aika Yhteensä
15. - 21.12.2008 ma 8h, ke 8h, to 8h, la 4h 28 28
22. - 28.12.2008 ma 4h, (joululoma), la 4h 8 36
29.12. - 4.1.2009 ma 8h, ti 4h, (uusi vuosi), la 4h 16 52
5. - 11.1.2009 ke 8h, pe 8h, la 4h 20 72
12. - 18.1.2009 ti 8h, ke 8h, la 4h 20 92

Suunnittelu - 16h, kaksi täyttä työpäivää. Käyn läpi projektiarkistoa, selvitän olisiko siellä vinkkejä siitä miten asioita kannattaa tai ei kannata toteuttaa. Selvitän olemassaolevia valmiita lasten matematiikkaohjelmia, olisiko siellä toteuttamiskelpoisia ideoita.
  deadline: 18.12. ohjelman tarkempi luokkarakenne ja toteutustavat selvillä.
DONE 18.12.2008!

la 6.12.2008 - 5h


Projektisuunnitelma tuli kirjoitettua itsenäisyyspäivän tunnelmissa, appivanhemmat olivat sopivasti paikalla pitämässä lapset pois jaloista. Mies sai keskittyä ruoanlaittoon illan vieraita varten, minä istuin ja kirjoitin suunnitelmaa. Ensin olin sitä mieltä etten varsinaisesti tiedä vielä mistään mitään, mutta vähitellen tekstiä alkoi syntyä kun mietin tarkemmin asioita. Nuorempi pojista heräili päiväunilta kun kirjoitus sujui juuri hyvin, otin puoliunisen ja pahantuulisen pojan pupuineen syliin ja jatkoin kirjoittamista läppärillä pojan yli. Appivanhemmat tulivat jonkin ajan kuluttua ulkoilemasta takaisin sisään ja veivät pojan pois. Iltaan mennessä olin jo saanut suunnitelman valmiiksi ja koko homman nettiin. Pari tarkempaa asiaa vielä jäi kirjoittamatta, algoritmit ja tietorakenteet miettimättä. Ne päätin säästää sunnuntaille kun vieraatkin olivat jo tulossa.

su 7.12.2008 - 2h. yht. 7h


Niin, tarkoitus oli tosiaan jatkaa suunnitelman kirjoittamista. Eihän siitä enää mitään tullut, en vain jaksanut. Illalla lähdin elokuviin, sen jälkeen vielä muokkasin pikkuvirheitä ja tein päiväkirjapohjan. Tunnin verran hommia tuli tehtyä. Toisaalta olen kuitenkin sitä mieltä että jatkan suunnittelua vielä ensimmäisellä varsinaisella työviikolla viikon kuluttua, en ollutkaan ajatellut että tässä vaiheessa olisi vielä kaikki suunnittelu tehtynä. Onhan meillä vielä jäljellä myös yksi ohjelmointideadline.

Projektisuunnitelma on vihdoin palautettu. Ezkun ja Akun ansiokkaan virhetulkinnan seurauksena päätin minäkin palauttaa projektisuunnitelmani koko ryhmälle. Ehkä kollektiivisesta hajoilusta olisi jotain hyötyä itse kullekin. Irkkikanavalla käydyn keskustelun jälkeen mieleen tuli, että Olo-blogiin voisi itse kukin linkittää omat suunnitelmansa, päiväkirjansa tai mitä nyt aikookaan pitää omien sivujensa alla tai muualla. Minulle ainakin päiväkirja on hyvä tapa pitää omaa ajankäyttöäni kurissa, olkoonkin että se tulee olemaan vain suoraan lähdekoodiin kirjoitettu tylsä raportti eikä mikään viileän interaktiivinen blogi.

to 11.12. - 0,5h. yht. 7,5h

Kurssin viimeisellä grafiikkaluennolla oli paljon mielenkiintoista asiaa, vaikka aloitettiin aika perusjutuista jotka olivat jo tuttuja. Sain hyviä vinkkejä ötököiden liikeratojen mallintamiseen:

  • erikseen ötökän jalkojen liike (muita osia en ajatellut liikuttaa) piirrettyinä frameina joita kelataan edestakaisin while-lauseella. new File("frame-" + i + ".gif");
  • päivitä-metodissa voidaan muuttaa drawImagen koordinaatteja
  • erillinen olio, jolta kysytään, missä on seuraava piste.
  • matemaattinen funktio, joka määrittelee ötökän liikeradan.
  • törmäykset mallinnetaan fysiikalla:
    • kun ötököiden säde1 + säde2 = etäisyys, tapahtuu törmäys.
    • käytetään liikemäärän säilymisyhtälöä hyväksi eli ötököiden nopeuksia. teen kaikista ötököistä samankokoisia, joten massaa ei tarvitse huomioida.

Sitten pitää varmaan vähän kerrata fysiikkaa, siitä kun on...ööö...8 vuotta kun sitä on viimeksi lukenut. ;) Mukavampi olisi toki jos animoinnnin olisi voinut tehdä graafisesti flashin tyyliin, "piirrä tämä polku ja seuraa sitä". Mutta kuten Ville totesi luennolla, tällä kurssilla ohjelmoidaan eikä piirretä.

Isäpuolelta tuli hyviä vinkkejä ohjelmointiin, laitetaan näistäkin valitut muistiinpanot. Osa olikin jo itsellä mielessä mutta en vain ollut laittanut niitä vielä ylös.

  • Ötökkä-luokka on simppeli olio, jolla on muuttuva liiketila. Se lähtee liikkumaan vasta kun Matikka-luokka kutsuu sitä. Sen lisäksi Ötökän tulee reagoida hiiren liikkeisiin (MouseListener) ja muiden ötököiden liikkeisiin.
  • Petrin ehdotus oli, että ötökällä olisi kohde ikkunan ulkopuolelta ja satunnaisia etappipisteitä siinä välillä. Itse olen fiksautunut jotenkin sellaiseen kiemuraiseen liikkumiseen, pitää kerrata vielä matikkaakin (damn!) ja selvitellä vähän mahdollisia funktioita taustalle. Tietenkin noita satunnaisia etappipisteitä voisi hyödyntää siinä.
  • törmäyksessä lasketaan satunnainen etappipiste vastakkaisesta suunnasta.
  • Ötökän kirjoitus kokonaan GUI-ympäristössä, tarkista graafisten luokkien törmäys/päällekkäisyystestaukset ym. metodit.
  • Selvitä, saako muita luokkia käyttää, esim. JGame.

ma 15.12. - 3h. yht. 10,5h

Viimeinen Java-tehtävä palautettu ja nyt on aika aloittaa loppuprojekti toden teolla. Tämä päivä ja keskiviikko on varattu suunnitteluun. Kunhan vielä netin saisi toimimaan kotoa...

--- Ei ole hyvä ajatus koodata kotona. Muuta tekemistä löytyy jatkuvasti ja unikin vei aamupäivällä voiton koodaamisesta. Iltapäivällä pääsin vihdoin työn makuun. Keskiviikkona lähden varmasti Paniikkiin, ei tästä tule muuten mitään.

Pari aikaisempaa projektia linkkinä talteen, näistä voisi ottaa vinkkejä törmäysten mallintamiseen:
Petri Klemelä: Lumisota
Pyry Kröger: Ping

Selailin läpi netistä löytyviä lasten matematiikkaohjelmia. Muutamat olivat kertakaikkiaan hirveitä ärsyttävine äänineen ja/tai rumine grafiikoineen. Puhuttu ääniohjaus auttaisi tietenkin lasta alussa, mutta ärsyttää ainakin aikuista pidemmän päälle pelattaessa. Muutamat peleistä olivat selvästi onnistuneempia, animaatiot liikkuivat jouhevasti, grafiikat näyttivät hyvältä ja äänet olivat hauskoja. Nopealla haulla en löytänyt oman ohjelmani kaltaista ratkaisua, mutta sain ajatuksia siitä mitä kannattaa ja ei kannata tehdä.

Tee:

  • Tuloslaskenta, joka palauttaa lopputuloksen ja näyttää esim. ötökän kuvan tasosta riippuen. Esim. Muurahainen, 5/10 oikein tai Hämähäkki, 8/10 oikein.
  • Graafinen tason valinta alkuun
  • Graafiset valinnat loppuun, PELAA UUSI / LOPETA
  • Johdonmukainen käyttö. Jos numerot saa syöttää numeronäppäimillä, valinta tulee myös pystyä vahvistamaan enterillä. Ei pakoteta käyttäjää vaihtelemaan näppäimistön ja hiiren välillä.
Älä tee:
  • Tulostaulukkoa. Jos pelin kohderyhmänä on 3-vuotiaat, he eivät osaa lukea eivätkä kirjoittaa -> eivät tee tulostaulukolla mitään. Pelin tarkoitus ei myöskään ole kilpailla muita, vain itseään vastaan.
Ehkä:
  • Vanhempien valikosta voisi määrittää numeerisen maksimin lisäksi myös maksimipeliajan minuuteissa.

ti 16.12. - 0,5h. yht. 11h

Kaveri oli käymässä illalla ja ehdotti kolmannen asteen yhtälöä ötökän liikeratojen mallintamiseen. Itse mietin satunnaisia ympyröitä, joiden kehää pitkin ötökkä menisi ja vaihtaisi sitten toisen ympyrän kehälle. Kolmannen asteen yhtälö olisi helpompi ja pitäisi samalla huolen myös ruudusta poistumisesta. Osa yhtälöistä voisi olla mallia x = y3 + ay2 + by + c, jotta osa kiemuraisesta liikeradasta tapahtuisi myös ylhäältä alas.

Sitten enää pitäisi miettiä, miten tuo suhtautuu törmäyksiin... *huokaus*

ke 17.12. - 7h. yht. 18h

Kiltisti Paniikissa jatkamassa suunnittelua. Mikä siinä on kun koko aamupäivän saa kulutettua siihen että on lähdössä?

Iltapäivällä sain suunniteltua tekstipohjaisen pelin ja koodasin sen. Totesin, että minulle sopii parhaiten sellainen työtahti, jossa suunnitellaan yksi osa ohjelmasta kerrallaan, toteutetaan se ja testataan - metodi kerrallaan. Matikka-luokan kirjoitin ensin kokonaan ja aloin vasta sitten testata. Ei hyvä ajatus.

Matikka- ja Peli-luokat toteutettu, peli pyörii kohtalaisen hyvin komentotulkissa. Tästä on mukava lähteä kotiin!!!

to 18.12. - 5,5h. yht. 23,5h

Päätin hylätä loppuvaiheen applet-muunnoksen ja käyttää sen sijaan HeadFirstissäkin esiteltyä Web Startia. Hyödyt: Ei refaktorointia, kevyt ja nopea tehdä, käyttäjällä ei tarvitse ohjelman latauksen jälkeen olla enää nettiyhteyttä. Uudempi systeemi. Haitat: eipä löytynyt. Ehkä käyttäjän hieman suurempi kynnys ladata ohjelma omalle koneelle kuin vain kokeilla netissä. No, joka tapauksessa kohtalaisen selvä valinta. :)

Pitäisikö animaatio olla omassa luokassaan vai ei? Entä aloitusvalikko, lopetusvalikko ym. JDialogit. Laitanko ne sisäluokiksi Ikkunan sisään vai omiksi luokikseen? Laitanko napit staattiseen Ikkuna-luokkaan vai dynaamiseen Pelilauta-luokkaan? Sisältääköhän tuo kysymys jo vastauksen? Pitää miettiä vielä kaikenlaista. Nyt on kuitenkin GUI-luokkien toiminta suurin piirtein hahmotettu animaatiota lukuunottamatta.

8h koodauspäivä ei kyllä ole 8h koodauspäivä... Mutta ainakin pitää yrittää. Ja jos päivältä jää into päälle, koodausta jatkaa mielellään vielä illallakin. Nyt pitää valmistautua Java-tenttiin!


Viikkoyhteenveto - 15.-21.12.

Suunniteltu ajankäyttö: 28h
Toteutunut ajankäyttö: 23,5h

Viikon pelastivat ennakkoon tehdyt suunnittelutunnit, muuten olisin aikataulusta vielä enemmän jäljessä. Lauantaille suunniteltu 4h koodaussessio olisi toteutuessaan täyttänyt aikataulun hienosti, mutta realiteettien valossa oli pakko keskittyä joululahjaostoksiin.

Ohjelma toimii jo tekstipohjaisena ja GUIsta on hyvät suunnitelmat, joten olen tyytyväinen viikon saavutuksiin muuten. Niin sanottua joululomaa varten on varustauduttu hakemalla töistä parempi läppäri kotiin, pääsen siis piirtämään Illustratorilla ja Photoshopilla graffat, vasen shift on taas käytössä eikä koneen käynnistymistä tarvitse odottaa puolta tuntia. Tämä tulee nopeuttamaan koodaamista huomattavasti.

Ensi viikolla on mahdollista koodata muutama ylimääräinen tunti tiistaina matkalla joulunviettoon. Joulunpyhät lomailen ihan ilman suurempia syyllisyydentunteita, olen sen ansainnut. :)


Toteutus & testaus - 52h, suurin osa varatusta ajasta. Käytännössä testaan metodi kerrallaan ja tarkistan toiminnallisuuden eri tilanteissa, tämä on ollut hyväksi koettu metodi myös harjoitustehtävissä. aloitan perustoiminnallisuudesta, sitten lähden lisäilemään ja vaikeuttamaan toimintoa. pyrin jättämään GUIn tarkemman viilauksen loppuun vaikka se kiinnostaisikin eniten.
  deadline: 9.1. toiminnallisuus valmis

ma 22.12. - 2h, yht. 25,5h

Vielä jonkin verran sain tehtyä esivalmisteluja Pohjanmaan reissua varten, hain Java APIt koneelle ja siirtelin tiedostoja kotikoneelta työläppärille. Yleistä haahuilua ja selvittelyä, ei koodia. Ihan hyödyllistä kuitenkin. Seuraavaksi pitääkin valmistautua illan konserttiin.

la 27.12. 4h, yht. 29,5h

Ansaittu joululoma pidetty, neljä kirjaa luettu ja nyt on aika palata taas koodin ääreen - tosin lauantain lyhyen työpäivän merkeissä. Tänään olisi tarkoitus saada GUIsta alustava versio kasaan, ehkä jo jotain toiminnallisuuttakin siihen.
---
No, on tässä jotain saatu aikaan: paneelit ovat paikallaan framessa ja menuissa on itemit paikoillaan. Mikään ei tietenkään vielä toimi oikeasti. Keskustelin myös suvusta löytyvän matematiikanopettajan & pienten lasten äidin kanssa, Liisalta tuli hyviä kommentteja ja hyväksyntä pelin perusperiaatteisiin.

TODO:

  • mieti, miten saisit yksinkertaisesti toteutettua minimin asettamisen. - DONE 29.12.
  • pelin vuorot täytyy siirtyä ohjaamaan ikkuna-luokasta tai erillisestä testiluokasta niin, että napit päivittyvät aina kun tehdään uusi siirto. Ehkä nappikuuntelijasta?DONE 29.12.
  • muista, että nyt Ikkunan konstruktori asettaa automaattisesti tasoksi 2.
  • paneelien kokojen muuttuminen kun JFrame suurennetaan koko ruudun kokoiseksi. DONE 29.12.
  • jokin taustakuva sitten jossain vaiheessa koko keskipaneelille.
  • mieti vielä actionlistenerit, pitäisikö olla omassa luokassaan? Yhdistetäänkö sisäluokkia, nyt niitä on aika paljon. Jotain if-else rakennetta sinne sisään.
  • animaatioon jokin shortcut (ENTER), jolla saa lopetettua halutessaan ötököiden kiemurtelun ja siirryttyä samantien seuraavaan laskuun.

Viikkoyhteenveto - 22.-28.12.

Suunniteltu ajankäyttö: 36h
Toteutunut ajankäyttö: 29,5h

Aikataulusta ollaan myöhässä niin että paukkuu. Tämä viikko meni ihan kohtalaisesti, mutta pientä viivästystä tulee koko ajan kun päivästä nipistää pari tuntia pois. Matkalla koodaus ei onnistunut, pitää istua erikseen alas tekemään hommia. Ensi viikon perjantaina saan onneksi ylimääräisen koodauspäivän kun töistä tuli ylityövapaata, ehkä sillä saan aikataulun kiinni. Kolme viikkoa aikaa deadlineen ei ole enää paljon, ohjelmasta on paljon tekemättä.


ma 29.12. 7h, yht. 36,5h

Kirjastossa koodaamassa, mutta ilman virtapiuhaa. Mitäköhän tästäkin tulee...
  • selvitä headlessexception, joka oli alunperin ikkunassa automaattisesti mukana. mikä se on, mistä se tulee? voinko poistaa sen vai pitäisikö sen olla jossain try-catchissa?
Iltapäivällä siirtyminen Paniikkiin ja projektineuvontaan. Assareiden vinkit:
  • Ötökkä huolehtii itse omasta sijainnistaan, myös alussa. Eli Pelipaneeli ei piirrä ötököitä vaan ötökät määrittelevät myös omat alkukoordinaattinsa.
  • Ville Sundberg: Robofutis ja sen myötä artikkeli Craig W. Reynolds: Steering Behaviors For Autonomous Characters. Täältä erityisesti wander-metodi, random steering. Juuri sitä mitä tarvitsen, ei tarvitse miettiä 3. asteen yhtälöitä.
  • taustakuva: kysy komponentin koko, määrittele neliön koko sen mukaan.

  • TODO: graafisesta versiosta puuttuu tuloslaskuri - DONE 30.12.
  • TODO: graafisesta versiosta puuttuu tulosten sekoitus - DONE 30.12.
  • TODO: mieti vaste. miten näytät käyttäjälle että jotain tapahtuu? ötökät tietenkin, mutta jotain pitää tapahtua myös napeilla.

ti 30.12. 4,5h, yht. 41h

Paniikissa taas. Koodi rullaa lähes itsestään eteenpäin, staattinen GUI alkaa vähitellen melkein jopa toimia. Mahtavaa. Lisäilen surutta joka kohtaan koodiin pieniä // TODO merkintöjä, kätevää kun Eclipse näyttää nämä sinisinä täplinä sivussa. Osa on sellaisia, jotka pitää oikeasti selvittää, osa kuuluu sarjaan "väkerrä jos ehdit ja jaksat". Koodin seassa ne kuitenkin ovat paikallaan eivätkä ainakaan unohdu! Fiilis on hyvä, vaihtelevan mittaiset koodipäivät ja vapaat illat sopivat omaan työrytmiini. Pitävät mielen virkeänä ja tuntuu pikemminkin siltä, että sormet oikein syyhyävät päästä taas koodin kimppuun!

---
Äh. Aivan käsittämätön bugi pelin tason vaihdossa. Kun pelin loputtua asetetaan uusi taso, asetaTaso(int taso) metodin muuttamat maksimi- ja minimiarvot eivät muutukaan.

  int taso = Ikkuna.this.peli.annaTaso();
  // asetetaan tasoksi eri kuin aikaisemmin
  if (taso == 1){
    // aloitetaan uusi peli
    Ikkuna.this.peli = new Peli();
    Ikkuna.this.peli.asetaTaso(2);
  }

-----> asetaTaso() metodin sisällä tarkistan printillä, että arvot ovat oikeat. Sen sijaan kun palaan takaisin vaihdalisteneriin tekemättä yhtään mitään sillä välin ja printtaan uudestaan, arvot ovat mystisesti muuttuneet takaisin vääriksi. Mitä ..ttua??????

---
No, kun koodi tökkii niin annetaan tökkiä. Numerot piirretty paperille alustavasti, voisin jatkaa piirtelyä illalla kotona Illustratorilla. Nyt saa kylmä ja (miltei) tyhjä Paniikki jäädä!

pe 2.1.2009 klo 8.30-18, yht. 50,5h

Uusi vuosi, uusi koodi. Piian kanssa koodaamassa Paniikissa. Jätän GUIn viilaamisen edelleen myöhäisemmäksi, nyt olisi tärkeämpää saada koodi toimivaksi. Olisikohan mahdollista aloittaa koko ohjelma JDialogilla ja piirtää JFrame vasta kun taso on valittu? Tai toisaalta, voihan sen JFramen piirtää mutta jos kutsuisi uusiLasku() -metodia vasta JDialogin jälkeen?

--- Onnistuihan se aloitusdialogin tekeminen. Nyt vain koko ikkuna suljetaan ja avataan uudestaan kun tasoa vaihdetaan. Toisaalta se on ihan loogista. Innostuin tekemään alustavat versiot ötököistä ja piirtämään ihkaensimmäiset grafiikat. Tähän väliin on ilmeisesti pakko laittaa ensimmäiset screenshotit. =) Grafiikat ovat vasta alustavat, tehty nopeasti Paintbrushilla. Ajattelin hioa noita vielä Illustratorilla eteenpäin mutta ei niihin voi tietenkään kovin paljon keskittyä vaikka miten mieli tekisi. Tätä voi jo näyttää lapsille kotona, ihanaa!!! :)

Valitse taso
Taso 1
Taso 2
Huomenna: korvaa ötököiden piirron purkkaratkaisu järkevämmällä, poista metodi Ötökkäpaneelin paintComponentista ja siirrä koordinaattien arpominen Ötökkä-luokkaan.

la 3.1.2009 5h, yht. 55,5h

Kotona. Tarkoituksena olisi viikonlopun aikana piirtää grafiikka Illustratorilla. Maanantaina alkaa työt ja toivoisin, ettei konetta tarvitsisi enää kuljetella edestakaisin.

Koppakuoriainen ja leppäkerttu piirretty Illustratorilla, ikävää vain kun .ai muoto pitää muuttaa .giffiksi jolloin ollaan taas rumassa rasteroidussa kuvassa kun halusin että pohja on läpinäkyvä. Mutta pitäisikö kuitenkin harkita jotain muuta formaattia? Tai sitten vaihtoehtoisesti päättää jo nyt, mikä on kuvan taustaväri ja laittaa se kuvan taustalle. Harmi, olin toivonut käyttäväni valokuvataustaa mutta se on aika hankalaa. Pitää soittaa Petrille ja kysyä. Mutta ehkä ensin pitää antaa pojille välipalaa: Jeremias katsoi kiltisti 2,5h vierestä kun äiti väänsi Illustratorilla ötököitä. Aamoskin heräsi päiväuniltaan ja oli tunnin verran rauhassa ja nätisti. Kohtalaisen käytännöllinen aihevalinta kun jo ohjelman tekeminen viihdyttää lapsia. ;) --- Sain Petrin kiinni, 24-bittinen alpha-kanavainen png toimii paremmin kuin gif ja on vielä javan hyväksymä kuvaformaatti. Mahtavaa!!!
Päivän alkuvalikko

Oman numerofontin piirtäminen _ei_ ollut järkevä ajatus. Pääsin puoleenväliin kakkosta ja totesin tämän täysin turhaksi näpertelyksi. Selvitän Font-luokasta jonkun järkevän boldin fontin josta käytän numerot. Panostan mieluummin nappien ulkoasuun kuin numeroiden piirtämiseen.

su 4.1.2009 0,5h, yht. 56h

Nyt ollaan näköjään päästy jo siihen vaiheeseen että joka hetki pitäisi päästä koneelle vähän pyörittelemään koodia... No, nopeasti yritin vähän viilailla nappeja ja selvitellä WebStarttia josko saisi tästä version Petrille annettavaksi. Ei nyt ihan heti ainakaan. Nappien kanssa ongelmia, en ymmärrä miksi saan alkuvalikon nappien kokoa säädettyä setPreferredSizella mutta vastauspaneelin napit pysyvät itsepintaisesti mahdollisimman pieninä. Lienee jotain tekemistä sen kanssa, että alkuvalikon napeissa on ikonit ja vastauspaneelissa vain tekstilabelit. Höh. Pitää kuitenkin harkita että jos ne vastaukset tulisivat kuvina, vaikka kerran jo ajatuksen hylkäsin. Tosin eihän se tavallisten fonttien käsittely mielenkiintoisemman näköiseksi kauaa veisi...

Viikkoyhteenveto - 29.12.-4.1.

Suunniteltu ajankäyttö: 52h
Toteutunut ajankäyttö: 56h

Mahtavaa, sain perjantain ylimääräisellä koodipäivällä kirittyä aikataulun kiinni ja vähän ylikin. Takataskussa on vielä toinenkin ylimääräinen koodipäivä pe 16.1. jolla kokonaismäärä saataisiin periaatteessa nostettua 100 tuntiin... Pidän tuon kuitenkin reservissä jos joudun tekemään tavallista lyhempiä päiviä. Perustoiminnallisuus alkaa olla kasassa, ohjelma toimii nyt graafisena oikein mukavasti. Mietityttää vielä, jossain on varmasti piileksimässä jokin bugi. Käyttäjälle ei edelleenkään tule järkevää vastetta oikein ratkaistuista laskuista, animaatioita ei ole aloitettukaan vielä ja asetuksia sun muuta sälää puuttuu. Tästä on kuitenkin hyvä rakennella eteenpäin sen verran mikä hyvältä tuntuu. Kaksi viikkoa jäljellä, hyvin ehtii. :) Ehkäpä tärkeintä tässä vaiheessa on Jeremiaksen ja Aamoksen aito innostus peliin, Jeremias pelaisi tätä jo nyt vaikka kuinka kauan. En siis voi olla aivan väärillä jäljillä.


ke 7.1. 9h, yht. 65h

Takaisin Paniikissa. Aamu käynnistyi hitaasti, motivaatiota ei oikein ole. Ärsyttää, kun en saa nappeja sen näköisiksi kuin haluaisin. Pitänee tutkia asiaa lisää. Tästä päivästä tulee väistämättä liian lyhyt, onneksi puskuria on viime viikolta.

--- Nappeja väännetty eteenpäin, ne näyttävät nyt hyviltä ja toimivat mukavasti. Luokkarakennetta myös hieman järkeistetty. Tuntuu kuitenkin siltä että koko päivä on mennyt ulkoasun vääntämiseen, kohtalaisen triviaalia puuhaa jolla välttelen animaation aloittamista. Mutta numerot saatu nyt toimimaan (0-9, >10 kanssa pitää vielä selvitellä asioita), alkaa näyttää tosi hyvältä!!!

Thread.sleep()in kanssa ongelmia. Haluaisin saada ohjelman pysähtymään hetkeksi oikeaan vastaukseen niin, että mouseClicked vaihtaa ensin napin värin vihreäksi, vaihtaa alapaneelin tekstin "Oikein." ja vasta sen jälkeen menee sleeppiin pariksi sekunniksi ennen kuin arpoo uuden laskun. Tällä hetkellä se menee sleeppiin jostain syystä jo ennen kuin se on vaihtanut värin ja tekstin, jolloin koko sleepistä ei ole mitään hyötyä. Tiedän kyllä, ettei Swing ole säieturvallista, mutta kuvittelin voivani kuitenkin pysäyttää pääsäikeen... Enpä näköjään. Miten muuten käyttäjävaste voitaisiin tehdä? --- Tähän varmasti animaatio, kunhan saan sen toimimaan.

Toinen suuri kysymys on Web Start. En oikein tajua, miten tuon pitäisi toimia. Olen kirjoittanut .jnlp filen ja tehnyt .jar-paketin (joka jostain syystä ei kuitenkaan toimi smaragdilla, tuossa on taas jotain häikkää. Se ei tunnu löytävän kuvia eikä oikein osaa piirtää mitään.) Mutta miten ihmeessä lisään uuden mime-tyypin web-serverille? En oikein usko että saan tehdä tuota TKK:n kotihakemistolle. :) --- Enkä saakaan. Pitää miettiä jotain muuta. Ehkäpä Petrin koneelle...?

Loppudialogi väännetty vielä kotona myöhään illalla, Jeremias pelaili taas peliä ja jäi joka kerta jumiin kun piti aloittaa uudestaan alusta. Siispä dialogi piti saada aikaan. Mietin vielä, teenkö muuttuvia naamoja tuloksen mukaan. Eihän se välttämätöntä olisi. Katsotaan nyt onko intoa.

Seuraavaksi pitäisi sitten päästä animaation kimppuun. Luulen, että tässä on väännetty nyt kaikkea muuta sen verran paljon että jätän kuitenkin animaation kohtalaisen yksinkertaiseksi. Ehkäpä ötökät voisivat liikutella jalkojaan ja liikkua kaikki yhteen suuntaan ruudulta pois? Satunnainen asettelu on kuitenkin tärkeää, samaten kuin Ötökkäpaneelin jako kahteen paneeliin ja ötököiden piirrot siihen kahden eri ötökkälistan mukaan. Tästä jatketaan seuraavaksi, nyt nukkumaan!

9.1.2009 8,5h, yht. 73,5h

Aamulla pari tuntia koodausta, projektineuvonta ja jatko Paniikissa. Koko iltapäivä meni ihmetellessä kuvien yhdistämistä keskenään. Tein väliaikaisen ratkaisun, jossa luvut 0-9 esitettiin numerona ja 10-> paneelina. Väärin!!! Koko koodi meni aivan sekaisin, jouduin palaamaan takaisin edelliseen versioon joka onneksi oli TKK:n kotihakemistossa. Ezku tuli illalla vielä Paniikkiin ja neuvoi tien ratkaisuun, jonka avulla sain koko homman tehtyä n. 20 minuutissa ja huomattavasti siistimmällä koodilla. Niinpä niin. :)

Vielä illalla hieman pähkäilyä satunnaisen sijoittelun kanssa. Jostain syystä ohjelma kaatuu eikä suostu piirtämään mitään. Pitää vähän tarkastella, ovatko asiat oikeasti järkevissä paikoissa. Nyt alkaa jo aivotoimintakin hidastua aika tavalla.

la 10.1.2009 9h, yht. 82,5h

Olen käytännössä koodannut koko aurinkoisen lauantaipäivän, animaation tekeminen vei mukanaan. Kiukkusin lopulle perheelle kun koodausurakkaa häirittiin niin triviaalien asioiden kuin syömisen, lastenhoidon tai saunan takia. Koodi tuntuu vievän kaikki ajatukset tällä hetkellä, muun ajan olen kuin transsissa enkä oikein tajua mistään mitään. Pelottavaa. =) Huomenna pidän ihan oikeasti vapaapäivän, lupasin miehelle ja lapsille etten koske koneeseen.

Mutta on tänään saatukin paljon aikaan: ötököiden satunnainen sijoittelu (vaikkakin ne menevät vielä ikävästi päällekkäin isommilla luvuilla), ötököiden koon skaalaus tarvittaessa (hidastaa tosin aika lailla, en ole varma tulenko käyttämään tätä), animaatio (jalat, tuntosarvet ja silmät) sekä liikkuminen (ryhmässä lähes suoraviivaisesti eteenpäin mutta sopivasti randomia jotta näyttää mielenkiintoiselta). Animaationkin sain loppumaan vietettyäni pari tuntia ikuisessa loopissa. Samaten varmistin Vastauspaneelin kuuntelijassa, ettei ohjelma kaadu siihen, että yli-innokas Aamos jatkaa oikean vastauksen klikkailua animaation aikanakin. Lopuksi illalla vielä piirsin erilaisia hymynaamoja tulosten tulkintaa varten.

TODO:

  • varmistus, etteivät ötökät mene toinen toisensa päälle -DONE 12.1.
  • Asetukset-ikkuna
Tee jos on aikaa:
  • Asetusten tallentaminen ja lukeminen tiedostosta
  • Koko pelin mittainen Timer vanhempia varten
  • Äänet (ei todellakaan välttämätön)


Viikkoyhteenveto - 5.1.-11.1.

Suunniteltu ajankäyttö: 72h
Toteutunut ajankäyttö: 82,5h

Ajankäytössä ollaan vieläkin edellä ja nyt on kurssin ohjeellinen ajankäyttösuositus täynnä. Viikon aikana ohjelman ulkoasu eteni huimin harppauksin, sain numerot tehtyä ja napit muutenkin sekä näyttämään paremmilta että toimimaan paremmin. Lauantain rutistuksen aikana väännetty toimiva animaatio tuntui aivan mahtavalta, lapset nauroivat ääneen ruudulla vilistäviä ötököitä. Tavoite saavutettu, viimeiselle viikolle ei jää enää koodin suurina asioina kuin Asetus-ikkuna ja Web Startin toimiminen. Pitää sitten vain oikeasti malttaa lopettaa koodaaminen viimeistään keskiviikkona ja siirtyä loppuraportin kirjoittamiseen. Olen tyytyväinen omaan ajankäyttööni: hyvällä suunnittelulla, aikatauluttamisella ja itsekurilla olen pystynyt tekemään tätä inhimillisinä aikoina kadottamatta kokonaan otetta muuhun elämään. Hyvä minä! :)


ma 12.1.2009 2h + 2,5h , yht. 88h

Jossain määrin saatu ötököiden päällekkäisyyttä poistettua. Nyt ötökkä n käy listan läpi ja sieltä ötökät 0 - n+1 ja tarkistaa ettei päällekkäisyyttä tule. Jos tulee, se vaihtaa neliön ja jatkaa tarkistusta. Tietenkin jos haluaisi täydellisen tarkistuksen, se aloittaisi tässä vaiheessa alusta. Mitä jos siihen heti perään laittaisi m = -1? Hidastaisikohan se? Nyt jo tuntuu että tarkistuksia on aika monta, mutta eivät ne hidasta. --- Kokeiltu on, laittoi käytännössä ohjelman ikuiseen looppiin. Nyt jätän tämän tähän, olen ihan tyytyväinen tekemääni parannukseen. Nyt ötököitä pystyy laskemaan ja pienemmät määrät piirtyvät ihan nätisti erikseen.

Skaalatut kuvat animoituvat hienosti, alussa on pieni viive jolle voisi tehdä jotain. Vaikkapa piirtää laskun/tulokset ensin ennen kuin ötökkäpaneeli on valmis, nyt koko homma tulee kerralla. En tiedä tosin onko tälle enää aikaa.

Asetukset puuttuvat, samaten Web Start. Jatkan iltapäivällä kypsyysnäytteen jälkeen jos vielä jaksan. --- Kyllähän tässä hetken verran jaksaa, mutta en tee tänään pitkää iltaa. Tässä vielä näyte tämänhetkisestä ulkoasusta (taustaväri johtuu huonolaatuisesta screenshotista): satunnaiset ja skaalautuvat ötökät (liikettä en nyt saanut kuvaan, hehe) ja valmiilta näyttävä Asetukset-ikkuna.

TODO:

  • lähde-metodin järkeistäminen Ötökkäpaneeli-luokassa. Kirjoita ylös koko metodien kutsujärjestys ja mieti onko siinä järkeä.
  • Asetukset-ikkunan sijainti, sulkeminen ja toiminnot

Vaikka määrittelin koodille deadlinen ensi keskiviikoksi, ennakoimattoman perjantaivapaan vuoksi olen kuitenkin päättänyt että saan koodata vielä keskiviikkopäivän ajan. Loppuraportti pitäisi hyvin saada perjantaina ja lauantaiaamupäivänä aikaan niin että voi rauhassa lauantaina juhlia pikkusiskojen synttäreitä eikä tarvitse enää sunnuntaina stressata mistään.

ke 14.1.2009 6,5h, yht. 94,5h

Viimeinen koodipäivä, hurjaa!!! =)

Asetus-dialogin toiminnallisuutta väännetty pitkään ja hartaasti. Sen seurauksena muutin vähän tasojen default-arvoja.

Päätin, että koko pelin ajan tasosta riippumatta minimi- ja maksimiarvot ovat samat. Oletuksena on se, että aikuinen asettaa ensin minimi- ja maksimiarvot lapsen tasoon sopiviksi, sen jälkeen lapsi voi pelata kumpaa tahansa tasoa ja arvot pysyvät samoina. Arvoja ei kuitenkaan ole pakko asettaa, vaan lapsi voi itsekin käynnistää pelin. Tällöin oletusarvot tulokselle ovat välillä 1-10.

Toinen muutos, jonka tein, oli se että minimi- ja maksimiarvon määrittelyssä ei enää ole tarkistuksia molemmin puolin (että maksimi > minimi + 5 ja että minimi < maksimi -5). Päätin niin, että ensin määritellään maksimi, sitten minimi sen mukaisesti. Joka tapauksessa Asetus-dialogissa muutokset tapahtuvat vasta lopuksi käyttäjän klikatessa OK. Tällöin ohjelma tarkistaa ensin maksimiarvon, joka on määrävässä asemassa suhteessa minimiarvoon.

Oikeastaan nyt on muuten valmista, mutta Vaihda taso -ominaisuuden kanssa on ongelmia. Se on tietenkin ollut kätevä testausta varten, mutta juuri nyt se ei kertakaikkiaan toimi. Siinä luodaan nyt kokonaan uusi Ikkuna, eikä asetettuja arvoja ole mahdollista säilyttää. Ongelmia? Ehkäpä poistan koko ominaisuuden, pitää harkita.

Ei varsinaisesti ollut tilaisuutta selvitellä WebStarttia enää tänään. En tiedä, laitanko sitä ollenkaan julkaistuun versioon vai säästänkö sen tekemisen myöhemmäksi. :-/

Viimeistely - 12h, puolitoista päivää. Varaan kunnolla aikaa viimeistelylle ettei tarvitse palauttaa kiireessä puolivalmista koodia.
  deadline: 13.1. koodia kehtaa esitellä
- DONE (tjsp) 16.1.

pe 16.1.2009 6,5h, yht. 101h

No eipä jäänyt keskiviikko viimeiseksi koodauspäiväksi. Virheiden korjailuun menee tämä päivä. Ensin ongelmana oli tason vaihto, jota en saanut järkevästi toimimaan niin, että asetukset säilyisivät. Puhelinkonferenssi Piian kanssa, yleistä avautumista puolin ja toisin ja päätinkin että annetaan asetusten olla ja vain informoidaan käyttäjää että ne katoavat tasoa vaihtamalla. Problem solved.

Kun sain tason vaihtamisen toimimaan, pelin aloitus alusta ei enää toimi. Miksi??? Ahaa, ylipäätään uudelleen alusta aloitus ei toimi tasolla 1. Nyt muistankin ettei tämä ole oikein missään vaiheessa toiminut, olen vain jotenkin aktiivisesti unohtanut asian. Taso 2 toimii moitteettomasti. Miksi? Kummallista, aikani säädettyäni bugi katosi kokonaan sillä että määrittelin Ikkunan vaihtamaan alapaneelin tekstin aloitaListenerissä juuri ennen uuden laskun laskemista. En tiedä, miksi tämä toimii mutta toimii. If it ain't broken, don't fix it. :)

Vielä tekisi mieli lisätä myös peliohje, about-ikkuna ja maksimipeliajan määritys ja selvitellä Web Starttia, mutta ehkä kannattaa keskittyä nyt loppuraporttiin. Raportin valmistuttua voin harkita lisätoimintoja, nyt en halua enää joutua ojasta allikkoon. Projektiin tuli yllättäen pari lisäpäivää, T-talon serverit ovat alhaalla juuri ensi viikonlopun ajan ja voipi olla että palautusautomaatti lakkaa toimimasta. Tästä huolimatta haluaisin saada koko roskan palautuskuntoon huomenna, jotta voin rauhassa lähteä illalla lähisuvun kanssa ravintolaan syömään. Olo olisi mukavampi jos työt olisivat silloin jo tehtynä.

Dokumentointi - 12h, puolitoista päivää. Dokumentoin prosessin edetessä, tämän verran varaan aikaa loppuraportille ja JavaDocin viimeistelylle.

la 17.1.2009 3,5h, yht. 104,5h

Sata tuntia on jo paukkunut ja vielä mennään yli. Lauantaipäivä meni kotona kirjoitellessa loppuraporttia rauhalliseen tahtiin. Hieman keskittymisvaikeuksia, alkaa jo turnausväsymys iskeä. Ohjelma toimii jo, mitä tässä enää raportoimaan? Mutta toisaalta, onhan se raportti tehtävä ja tehtävä hyvin. Kiitos T-talon remontin loppuraportin kirjoittamisessa ei pääse paniikki iskemään. Toisaalta se kunnon deadline-fiilis puuttuu eikä tekstiä oikein synny niin vauhdilla kuin voisi.

Ötökkämatikka näytti jo pelinä kyntensä: Aamos heräsi päiväuniltaan kesken raportin kirjoittamisen. Asensin pelin uusimman version toiseen läppäriin ja tein meille toimiston. Minä kirjoitin raporttia nojatuolissa yhdellä läppärillä, Aamos oli vieressä olohuoneen pöydällä ja "pelasi" ötökkämatikkaa toisella koneella. Äidin piti auttaa ulos jumista monet kerrat, läppärin hiiri on hiukan turhan hankala 1v 10kk ikäiselle kaverille. Lopuksi poika onnistui sotkemaan hiiren asetukset ja jumittamaan koko koneen niin että se oli pakko sulkea. Sain kuitenkin pari tuntia aktiivista työaikaa siinä samalla, joten voin sanoa, että ohjelma toimii erittäin tarkoituksenmukaisesti!

su 18.1.2009 3,5h, yht. 108h

Ja täällä edelleen väännetään raporttia. Nyt tuntuu siltä että jätän WebStartin ja muut lisäominaisuudet väliin. Haluan saada tämän valmiiksi ja pois käsistä. Alkaa jo nysvääminen riittää, saisihan tätä paranneltua tosiaan sinne osittaisintegraaleihin asti. Johonkin pitää vain laittaa stoppi ja ehkä 100 työtunnin jälkeen _ei_ enää tarvitse lisäillä ominaisuuksia. Grrr.

Raportin kirjoittaminen tosin onnistunee hyvin. En usko saavani tätä vielä tänäänkään valmiiksi, eilisen juhlimisen jälkeen olo on perheen aikuisilla kohtalaisen väsynyt (ja lapsilla vastaavasti hyvin pirteä, tietenkin). Mutta väännetään taas kiltisti eteenpäin.

--- Yritin siistiä hieman koodia, sillä tuloksella että Asetusdialogi lakkasi toimimasta. Enkä ollut edes koskenut siihen... Nyt ihan oikeasti riittää, pitää hakea TKK:n kotihakemistosta edellinen versio. En tee enää muita muutoksia kuin lisään JavaDoccia, loppuraportti on saatava valmiiksi. Jatkan mekaanista doccaamista vielä illalla samalla kun katson toisella silmällä elokuvaa. --- Huh, onneksi Asetusdialogin bugi oli äärimmäisen pieni ja korjautui nopeasti. Olinhan minä juuri sen verran koskenut siihen... Ei kuitenkaan enää tällaisia lisää, kiitos!

Pari tuntia Javadocattu huonoa massiivituotettua elokuvaa katsoessa. Raportin kirjoittaminen jatkuu ja jatkuu ja jatkuu...


Viikkoyhteenveto - 12.-18.1.

Suunniteltu ajankäyttö: 92h
Toteutunut ajankäyttö: 108h

Viimeisen viikon aikana sain vielä paljon koodiakin aikaan. Väänsin päällekkäisyystarkistusta, yhdistin kuvien skaalauksen ja animaation, tein Asetukset-ikkunan ja sain sen toimimaan. Asetusten lisääminen vaikutti muuhunkin ohjelmaan ja oli yllättävän suuritöistä. Lopputulos oli kuitenkin sen arvoista, peli on heti huomattavasti monikäyttöisempi. Harmitti, että WebStart, timer ja about-ikkuna jäivät nyt selkeästi palautetusta työstä pois. Ehkä vielä jossain vaiheessa selvitän sen WebStartin, nyt pitää vaan saada työ pois käsistä ja raportti kirjoitettua.

Koodaaminen venyi pidemmälle kuin olisin kuvitellut, oli vaikeaa tehdä päätös ohjelmoinnin lopettamisesta ja raportin kirjoittamisen aloituksesta. Jossain vaiheessa sekin päätös oli vain pakko tehdä.


ti 20.1. 4h, yht. 112h.

Lisäajalla mennään. Mutta tänään on ihan ehdoton deadline ja projekti & raportti on pakko palauttaa. Peruin vielä iltapäivän menonikin, nyt vain väännän vauhdilla raportin kasaan ja illalla lähden Kansallisteatteriin katsomaan Othelloa. Aamulla kävin vielä koodia läpi, tarkistin gettersien käytön (oli monta turhaa vielä jäljellä) ja mietin tarkemmin eri luokkien funktiot. Aamupäivällä käväisin demoamassa ohjelman vielä Paniikissa, sain kehuja ja hyviä kommentteja. Jäin miettimään demon jälkeen, olisiko jotain minkä toteuttaisin eri tavalla nyt jälkikäteen. Ehkä ötököiden animoinnin olisi voinut tehdä vähän järkevämmin, en ole edelleenkään aivan vakuuttunut metodien keskinäisestä kutsusta. Sitä en kuitenkaan enää jaksa enkä uskalla muuttaa. Muuten olen käynyt koodia aika paljon läpi jälkikäteen ja korjannut epäloogisuuksia.

Valmis.

  deadline: 20.1. projekti ja loppuraportti valmis.