'Ohjelmointitehtävät' aiheen arkisto

Java II

Toisesta Java-tehtävästä on vierähtänyt jo monta kuukautta, ja näin jälkeenpäin tehävänantoja lueskellessa lähinnä naurattaa omat tuskailut ko. tehtävän parissa.

Heti tehtävän alkuun silmille iski aivan uusi termi – enumeraatio. Sen tarkoitus ei ehkä täysin auennut vielä tässä vaiheessa, mutta tarkat ohjeet auttoivat alkuun. Enumeraatio määritellään tehtävänannossa “erityiseksi luokaksi, jossa on valmiiksi määritelty kaikki mahdolliset luokan ilmentymät eli arvot”. Myöhemmissä tehtävissä enumeraation idean ymmärsi ehkä paremmin; ainakin sen käyttö toi koodiin huomattavaa selkeyttä.

Ilmansuunta-luokassa jouduimme pähkäilemään “vaikeiden” metodeitten parissa; suureksi ongelmaksi muodostui esimerkiksi se, kuinka saada selville jonkin ilmansuunnan vastakkainen suunta, kun käytössä on ennestään vain metodi, joka palauttaa ilmansuunnan vasemmalla puolella sijaitsevan suunnan. Huah. Näinkin yksinkertaisten, melko vähän loogista päättelyä vaativien metodien muotoilu tuntui suorastaan käsittämättömän vaikealta. Paperi ja kynä olivat suuressa osassa monen metodin toteutuksessa.

Haastetta toi mukanaan myös Map-hakurakenne sekä etenkin suunnattoman vaikeilta tuntuneet kaksiulotteiset taulukot. Erityisen hankalalta tuntui se luonnoton ajatus, että taulukkoon sijoitetun koordinaatiston y-koordinaatti kasvoi pohjoisesta etelään - ei suinkaan toisinpäin. Uusia asioita olivat myöskin for- ja switch-lauseet, joihin onneksi javaraamattu aka kalakirja toi valaistusta.

Hauskin vaihe tehtävässä oli ehdottomasti se kun pääsi testailemaan omaa koodiaan valmiiksi tarjotun graafisen käyttöliittymän avulla. Oli mahtavaa nähdä jotain aivan konkreettista koneen näytöllä!

Tässä vaiheessa ei ainakaan itselläni ollut vielä minkäänlaista käsitystä Javan periaatteista, ja koodin kirjoittelu olikin aikamoista hakuammuntaa ja epämääräistä kokeilua, mutta ainakin arvosanani nousi pari pykälää ensimmäisestä tehtävästä. Nyt muutamaa ohjelmointikierrosta ja yhtä projektia viisaampana voi ainakin todeta että _jonkinlaista_ oppimista kurssin aikana ihan oikeasti on tapahtunut! :)  

-Ulla

JAVA 1 (hämäriä muistijälkiä)

Onpa jännä kirjoitella ensimmäisestä javatehtävästä näin jälkikäteen, kun kokemusta on karttunut jonkin verran ohjelmoinnista. Nyt kun miettii ensimmäistä javatehtävää, se tuntuu lähinnä säälittävän helpolta ja en voi ymmärtää vaikeuksia, mitä se aiheutti silloin. Mutta yritän parhaimpani mukaan palata syyskuun sateisiin (tosin nykyään sataa tammikuussakin) fiiliksiin.

Ensimmäinen javatehtävä oli vaikea! Tehtävänä liittyi sieniin, arkkuihin ja taisteleviin olentoihin. Aloittaminen oli huomattavan vaikeata, koska ei tiennyt yhtään mitä tekisi. Mikä ihme on konstruktori? Entäpä main-metodi? Yksinkertaisen Esine-luokan koodaaminenki sai aikaan melkoista päänvaivaa. Assarien apu oli todella tärkeää ja toivottua. Loppujen lopuksi sain tehtävän kuitenkin valmiiksi tehtyä, joitakin puutteita viimeiseen osatehtävään jäi, mutta ei mitään suurempaa.

Vaikka jälkikäteen tuntuu, että tehtävä oli todella yksinkertainen ja helppo, se ei todellakaan ollut helppo aloittelevalle koodarille. Olisin kaivannut alkuun jonkinlaista johdantoa ja opastusta ohjelmoinnin mystiseen maailmaan…

-Olli

Jaavan meren tuolla puolen (kuudes ja viimeinen javatehtävä!!)

Jospa nyt olisi aika palata blogin äärelle venähtäneen tauon jälkeen. Joulu ja uusivuosi takana, toivottavasti kaikki söivät hyvin, saivat mieluisia lahjoja ja selvisivät vaurioitta uudenvuoden vietosta. Itse kotiuduin juuri Rukalta, missä vietin javatonta joululomaa viikon verran. Pääkoppa on javan suhteen hieman tyhjänä ja pitäisi pikkuhiljaa yrittää palauttaa kaikki oleellinen mieleen, jotta viimeisetkin kurssin keskeneräiset osiot valmistuisivat ajoissa. Päätin aloittaa muistinpalauttamisen kirjoittelemalla blogiin fiiliksiä viimeisestä javatehtävästä (ajoissa, kuten aina) sekä yleistä pohdiskelua javatehtävien syvimmästä olemuksesta

6. ja viimeinen javatehtävä oli jatkoa 5. tehtävässä aloitetulle Sikoban-pelille. Tehtävänä oli täydentää Sikobania tulostaulukolla, johon pääsisivät vain parhaimmat parhaista. Tehtävä oli mielestäni hieman lyhyempi ja helpompi kuin edeltäjänsä, mutta huomattavasti tylsempi, joka taisi näkyä lopputuloksessa. Tärkeintä on kuitenkin, että studio1-sivujen tulokset-linkki paljastaa klikkaamisen jälkeen taulukon täynnä numeroita. Viimeisessä tehtävässä uutta oli lähinnä tekstitiedostoon tallentaminen sekä tulosten vertailu. Nämä tulevat todennäköisesti tarpeeseen jossain muodossa omassakin projektissani. Kuitenkin päällimmäisenä viimeisestä tehtävästä jäi mieleen, että ne on ohi nyt!

Kokonaisuudessaan javatehtävistä voisi sanoa sen verran, että ne olivat äärimmäisen opettavaisia. En ole varmaan ikinä oppinut näin lyhyessä ajassa jotakin täysin uutta asiaa näin hyvin. (Joku voi olla tuosta “näin hyvin” hieman eri mieltä.) No mutta kuitenkin voin sanoa rehellisesti, että javan alkeet/perusteet on hyvin hallussa ja varmasti projekti vielä hieman lujittaa niitä. Itse tekemällä oppii parhaiten, ainakin itse opin. Olen suhteellisen hidas oppimaan kunnolla uusia asioita. Kolme ensimmäistä tehtävää meni vähän ihmetellessä (ja kiroillessa). Vasta neljännessä tehtävässä tuntui siltä, että perusteet olivat painuneet syvälle takaraivoon ja koodaaminen sujui ilman assareitakin suhteellisen ongelmitta. Viides tehtävä oli jo melkein kivaa (en myönnä sanoneeni noin). Kuudes taas rupesi jo puuduttamaan, mutta ei sekään maailmaa kaatanut. eikä muuten kaada projektikaan!!!!!

-Olli

Sikoban 2.0, Legoukkelin paluu

Viimeisen Java-tehtävän aihepiirinä oli tulosten tallentaminen ja näiden näyttäminen JTable-komponentin avulla. JTable on perinteinen taulukkokomponentti – kaikki, jotka ovat vähänkään tutustuneet jonkun taulukkolaskentaohjelman, kuten Exelin, käyttöön tunsivat varmasti olonsa kotoisaksi kuudennen Javan parissa.

Näkymä

JTable on Swingin monimutkaisin komponentti” [1]. Jos näin todella on, niin se ei ainakaan aiheuttanut minulle juurikaan ylimääräistä päänvaivaa. Päinvastoin, aikaisempi paneelien ja framejen kanssa temppuilu kulutti aikaa ja hermoja huomattavasti JTaulukoita enemmän. Sikobaniin teimme oman Tulostaulukko-komponentin, joka on AbstractTableModel:n aliluokka.

Sinänsä oli hauskaa kehittää edellisellä tehtäväkierroksella luotua peliä, mutta kaiken kaikkiaan kuudes Java-tehtävä oli aika lailla puuduttavaa vääntämistä. Taulukointia ja tallentamista? Blaah. Jäin kaipaamaan tehtävältä jotakin mielenkiintoista kiintopistettä. Jotain mistä olisi hyötyä projektissa (no niin, toki tästäkin oli) ja jotain mikä saisi projektin lähestyessä peruskoodauksen maistumaan vähemmän puulta. VoittonäkymäTällainen kiintopiste olisi voinut olla vaikkapa jonkin grafiisen aspektin lisääminen Sikobaniin: pidettiinhän 2D-grafiikasta varta vasten luentokin. Tällaisenaan kuudennen tehtävän sisältö jäi kovin heppoiseksi. Ehkä nämä asiat (JTable, tallennus) olisi voitu jo mahduttaa edelliseen Javaan? Lisäksi jäin hieman ihmettelemään äänien puuttumista ns. pakollisista tehtävistä. Tietokonepeli – vaikkakin kevytrakenteinen sellainen – ilman ääniä on kuin joulukuusi ilman koristeita, eli eipä paljon mitään.

Kukaan ei tietysti ole heristämässä sormea ja kieltämässä omatoimista tutustumista grafiikan kiehtovaan maailmaan. Niinpä päätin lisätä parilla asteella Sikoban-pelini visuaalisuutta ja kehittää siihen muutaman sellaisen graafisen härpäkkeen – Sikoban-animaation.

Animaatio (lat. animatio ‘elävöittäminen’) on tekniikka, jossa elokuva toteutetaan kuva kuvalta [3]. Perinteinen tapa luoda animaatioita on näyttää nopeasti erilaisia kuvia peräkkäin, jolloin saadaan eräänlainen illuusio liikkuvista objekteista. Javalla frame-animaatio on melko yksinkertaista toteuttaa. On myös muita tapoja, kuten java.awt.graphics:n piirto-ominaisuuksien käyttö tai ns. sprite-animaatio.

Sikoban_GUI

 

Tein animaatiototeutuksen omaan luokkaansa. Sikobananimaatio.java sisälsi itse asiassa myöskin toisen luokan eli sisäluokan (inner class). Halusin animaatiot näkymään tarvittaessa samaan peli-ikkunaan pelipaneelin tilalle, joten oli luonnollista tehdä Sikobananimaatiosta JPanel:n aliluokka. Animaatio saadaan siten näppärästi esiin poistamalla framesta pelipaneeli ja asettamalla tilalle animaatiopaneeli.


Mikäli kuvatiedostot ovat suuria tai kuvia näytetään verkkoyhteyden yli, saattaa ongelmaksi muodostua kuvien hidas tulostuminen näytölle [2]. Kun kuvien vaihtoväli laskee muutamaan kuvaan sekuntia kohden, ei oikein voida hyvällä tahdollakaan puhua enää animaatioista. En saanut ensin yritelmiäni näkymään lainkaan, joten luulin, että kuvani olivat tiedostokooltaan liian suuria animaation näyttämistä varten. Niinpä tutustuin API:n MediaTracker-luokkaan. Se pakottaa ohjelman odottamaan yhden tai vaihtoehtoisesti kaikkien kuvien latautumista muistiin ennen animaation aloittamista [2].

Turhautuminen kipusi kliimaksiinsa, kun liikkuva kuva loisti poissaolollaan MediaTracker-olion käytöstä huolimatta. Ongelma löytyikin aivan toisesta suunnasta: kuvat kylläkin piirtyivät juuri niin kuin pitääkin – myöskin ilman MediaTrackeria – mutta framen ulkopuolelle, näkymättömiin. VoittonäkymäLopulta löysin virheen vaihtelemalla paneelin kokoa. Ongelman ratkaisemiseen tuhlaantui muutama ylimääräinen tunti ja hajoilemisen puuska, mutta ensimmäistä omaa animaatiotani katsellessani totesin vaivan olleen sen arvoinen.

Laitoin Sikobananimaatio-luokan konstruktorin ottamaan parametrina String-olion. Ideana oli mahdollistaa useiden erilaisten animaatioiden toteutus samaa luokkaa käyttäen. Konstruktorin parametrin perusteella otetaan oikeat kuvat käyttöön kyseistä animaatiota varten. Asetin aiemmin jo mainitun sisäluokan huolehtimaan kuvan näyttämisestä ja perimään luokan Thread, jolloin kuvien vaihtovälin saattoi toteuttaa laittamalla säikeen nukkumaan sopivaksi ajaksi. Totesin, että 60 millisekuntia on sopiva viiveaika.

Onnittelut

Sikobanissani on myös ääniefektit featuring Homer Simpson, Austin Powers, Sgt. Hartman (FMJ) ja Samuel L. Jackson. Koitan perehtyä WAV-ääniin projektin aikana hieman tarkemmin – nyt sain äänet toimimaan netistä löytämieni esimerkkien avulla ja palauttamani ratkaisu ei ollut toimivuudestaan huolimatta tyylikkäin mahdollinen ratkaisu.

 

Hyvää joulua!

- Teemu

[1] Vesterholm, Mika. Kyppö, Jorma. Java-ohjelmointi, Talentum, 2006, 6.painos.
[2] Java Coffee Break: Using MediaTracker to help load images
[3] Wikipedia: Animaatio

Linkkeihin viitattu 23.12.2007

Muovipaloja hiekkalaatikossa: Sikoban vers. 1.1

Viidennessä Java-tehtävässä pääsimme harjoittelemaan oman GUI:n rakentamista pienen Sikoban-pelin merkeissä. Pelin perusidea on kevennetty versio perinteikkäästä Sokoban-pelistä. Yhden vokaalin muutos nimessä Sikobaniksi johtui pelin oletusulkoasun sika-teemasta, johon kuitenkin monet – mukaan lukien allekirjoittanut – tekivät omia muutoksia. Oli hienoa nähdä viimeinkin jotain konkreettista, eikä vain sieniä ja ninjoja, jotka vilisevät jossain komentorivin, Eclipsen (tai XEmacsin) ja prosessorin välimaastossa. Toki aikaisemminkin olimme päässeet testaamaan aikaansaannoksiamme graafisilla testiohjelmilla, mutta tällä kertaa pääsimme kuitenkin näkemään oman tuotoksen näyttöruudulla, ja se jos mikä tuntui palkitsevalta.

Sikoban_GUI

 

Tehtävä oli mielenkiintoinen kokonaisuus loppuprojektia silmällä pitäen, sillä Sikoban sisälsi juuri niitä elementtejä, joita varmasti minä ja monet muut tarvitsevat tuossa kurssin eeppisessä päätösnäytelmässä – ohjelmointiprojektissa. MouseListener, graafinen käyttöliittymä, musiikit ja Comparable-rajapinta (Java 6) tulevat olemaan tärkeä osa omaa projektiani.

Sikoban-peli koki uudelleensyntymisen pienten kirurgisten toimenpiteiden jälkeen – entiset sika-ikonit löysivät paikkansa pelimaailmasta lego-figuureina, ja vastaavasti seinät lihallistuivat lego-palikoiksi. Tämä teema sopii mielestäni tällaiseen palikkapeliin. Pelin räikeähkö värimaailma tukee tätä lapsellista asetelmaa.

Innostuin erityisesti musiikkien saamisesta peliin ja niinpä ryhdyin tuumasta toimeen vielä varsinaisen tehtävän ollessa kesken. Äänimaailman lisääminen osoittautui kuitenkin suhteellisen helpohkoksi tehtäväksi Head First Java-kirjan ja Googlen löytämien artikkeleiden avulla. Pelin karkkimaiseen tunnelmaan sopi hyvin MIDI-tyyppiset äänet. Toteutus tapahtui MidiSystem-luokan avulla. MidiSystem toteuttaa rajapinnan Sequencer, joka taas on MidiDevice-rajapinnan ns. alirajapinta (subinterface). Oli kyllä aika lailla koominen fiilis, kun pian Haddawayn purkkapoppi tahditti legoukkelin matkaa kohti tuntematonta. Se istui peliin kuin koodaus jouluaattoon (eh, hyvinkö?).

Ohje

 

MIDI-kirjainlyhennelmä tulee sanoista Musical Instrument Digital Interface eli vapaasti suomennettuna “Musiikkilaitteiden digitaalinen rajapinta” [1]. MIDI on sikäli varteenotettava musiikkiformaatti, että MIDI-tiedostot ovat kooltaan vain pikkuriikkiisen osan vastaavista digitoiduista äänitiedostoista. Toisaalta heikkoutena on, että vaikka MIDI:llä voidaan toistaa mitä hilpeimpiä synteettisiä ääniä, formaatti ei kykene lainkaan toistamaan laulua tai ihmisen ääntä ylipäätäänsä [2]. Äänen laatu riippuu myös käytössä olevasta laitteistosta – MIDI-ääni voikin kuulostaa erilaiselta eri tietokoneilla.

”MIDI-datan tallentamiseen ja muokkaamiseen tarkoitettuja laitteita kutsutaan sekvenssereiksi.” [1]. Kun Javalla halutaan toistaa MIDI-tiedostoja, instantioidaan valmiista luokkakirjastosta sekvensseri-olio seuraavasti:

Sequencer sekvensseri = MidiSystem.getSequencer();

Tämän jälkeen osoitetaan sekvensserille jokin valmis MIDI-tiedosto.

sekvensseri.setSequence(MidiSystem.getSequence(midimusa));

Tässä midimusa on viitemuuttuja, joka sisältää viitteen johonkin Midi-tiedostoon. Sellainen voisi olla vaikkapa new File (”biisi.mid”).

sekvensseri.open();

sekvensseri.start();

Tämän jälkeen pitäisi jo hilpeän musiikin kantautua ulos kaiuttimista, kunhan on muistettu varautua catchaamaan tarvittaessa ne useat sekvensserin poikkeukset, jotka saattaavat tulla vastaan. Musiikin pysäyttäminen taas tapahtuu Sequencer-rajapinnan stop-metodilla. Kun midin toistoa ei enää tarvita, suljetaan sekvensseri kutsumalla close-metodia, joka on määritelty MidiDevice-rajapinnassa. Tämä on tärkeää, sillä on syytä vapauttaa järjestelmän nyt jo tarpeettomalle sekvensserille varaamat resurssit [3]. Lisäsin peliin myös mahdollisuuden vaihtaa taustamusiikkia valikosta käsin. Laitoin kolmisoluiseen taulukkoon viitemuuttujat äänitiedostojen nimiin, jolloin aina musiikkia vaihdettaessa haetaan taulukon seuraava alkio File:n parametriksi, joka taas edelleen syötetään MidiSystemin getSequence-metodin parametriksi.

Sikobania tehdessä tuli koko ajan mieleen toinen toistaan vauhdikkaampia (ja vähemmän toteutuskelpoisia) ideoita, jotka jäivät tuossa vaiheessa valitettavasti aikalailla kehitysasteelle kovasta yrityksestä huolimatta. Toisaalta sain osan näistä sekundasuunnitelmista toteutettua seuraavassa Java-tehtävässä – ja toivottavasti sitten projektin lomassa viimeistäänkin loput, sikäli kun ne omaan projektiini sopivat.

- Teemu

[1] Äänipää, MIDI
[2] Mindprod.com, Java Glossary
[3] Java API SE 5.0
Linkkeihin on viitattu 20.12.2007

Joulu tulee, koulu loppuu, mutta java ei :)

Lauantaina oli viimeisen java-kotitehtävän palautus-deadline. Olin ensimmäistä kertaa ylpeä aikaansaannoksestani, vaikka sikobaniini jäikin ainakin yksi bugi :) Huomasin taas kerran, että ongelmiin voi keksiä itsekin ratkaisun. Jos sattuu löytämään ongelman. Tässä vaiheessa olen ymmärtänyt, kuinka tärkeää koodaamisessa on taito löytää virheitä. Vaikka ei heti tietäisikään, miten ongelman saa poistettua, asiaa auttaa huomattavasti se, että tietää, missä kohdassa logiikka kusee. Ratkaisu saattaa kuitenkin löytyä yllättävän nopeasti.

Koin viimeisen tehtävän varsin hyödylliseksi omaa projektiani ajatellen. Ainakin tulosten tallentamisen harjoittelusta tulee varmasti olemaan hyötyä projektia koodatessa. Toteutin 6-tehtävässä tulostaulukon niin, että se avautui uuteen ikkunaan, ja jäin miettimään, miten sen voisi omassa pelissä toteuttaa *jännemmin*. Mielestäni Tulostaulukko-luokan käyttäminen JTablen “data modelina” tuntui aika yksinkertaiselta ja mukavalta, joten todennäköisesti oman projektini tuloslistan toteutus tulee olemaan melko samanlainen.

Seuraavaksi pitäisi aloittaa se kauan odotettu ja pelätty ohjelmointiprojekti. Suunnitelmassani pääsin jo aika pitkälle luokkien ja metodien pohdinnassa, mutta varsinkin nyt, yhtä javatehtävää rikkaampana, tuntuu että suunnitelma saattaa vielä paisua ja muutenkin muuttua hiukan :) Aloittaminen ei kuitenkaan tunnu ylivoimaiselta; kunhan C1:n viimeinen välikoe on ohitse, aloitan koodaamisen. Todennäköisesti tämänhetkinen luottavainen olo haihtuu ennemmin tai myöhemmin. Kuitenkin odotan jo projektin haasteiden kimppuun pääsemistä :P

Edelleen tsemppiä ja jaksamista kaikille (jee me saatiin korotettua bottidokumentaatioarvosanaa! jaksetaan kirjoitella vielä blogiinkin, esim puuttuvista OLO-tapauksista :)

- Asta

Sikoban

Toiseksi viimeinen ohjelmointitehtävä lähti matkaan eilen, hieman keskeneräisenä mutta kuitenkin!!

Vaikka aluksi tuntuikin haikealta jättää sienet, ninjat, rosmot sun muut taakse, osoittautui tämänkertainen tehtävä kaikkein hauskimmaksi ja mielenkiintoisimmaksi. Oli kivaa nähdä oman työnsä tulos ihan konkreettisesti, ei pelkästään tekstinpätkänä ruudulla. Swingin käyttö oli helpompaa kuin aluksi luulin, ja netistä löytyi paljon hyviä esimerkkejä ja ohjeita. Myös omien virheiden etsiminen ja löytäminen sujui tällä kertaa helpommin; virheet oli helppo paikantaa kun näki selvästi, missä kohtaa jokin mättää. Kaikkein haastavimmaksi ja eniten aikaavieväksi osoittautui itse pelilogiikan kanssa tappeleminen, ja sen takia aikataulu pääsikin (jälleen kerran) karkaamaan käsistä. Lisäksi siirryin itse vasta tässä vaiheessa käyttämään eclipseä, ja täytyy myöntää että melkoinen masokisti saa olla, jos joskus aikoo takaisin emacsin pariin palata.

Tämän tehtävän aikana opitut taidot tulevat olemaan hyvin tärkeitä sitten kun on aika aloittaa oman projektin väsääminen. Ainakin omassa projektissani pystyn varmaan hyödyntämään usemmankin osatehtävän oppeja melko suoraan.

Mutta nyt: tauko koodaamiseen ja cruiseilemaan! —->

-Ulla

Sikobanista

Nyt on jo sit toisiks viimesen ohjelmointitehtävänkin deadline ohi eikä esseetehtäviäkään enää tule. huh, alkaa kurssin loppu jo näkyä. Ei ois alku syksystä uskonu, et joskus oon täällä asti.. Vaikka onhan tässä vielä edessä projekti, joka varmasti vaatii paljon, aikaa ja hermoja.

Tästä tänään palautetusta ohjelmoinnista ajattelin aluks, et siitä vois tulla jopa vähän parempi arvosana. Se vaikutti aikasempia kevyemmälta, ja sai alottaa ihan uuden jutun kun sienet ja sektorit jäi taakse. Mut kyllä tän viikon lopussa alko pää taas hajota kun yritti kiireellä saada jotain aikaan. Jätin vikoille päiville taas liikaa tekemistä, kun loppu vaikutti nopeesti vilkastuna suht nopeelta tehdä. Ja niinpä se possu ei edes enää liikkunu, kun palautin tehtävän. Taitaa siis jatkua sama heikohko linja arvosanassa.. Mut kyllä se lohduttaa, et enää on tosiaan vaan yksi ohjelmointitehtävä jäljellä. Saa pikkuhiljaa alkaa ajatella jotain muutakin.

-Anu

jotain näkyvää ja ehkä kuuluvaakin

Neljäs ohjelmointitehtävä toi mukanaan taas ison kasan uusia haasteita. Kuinka niistä sitten selvitä? Uutta ja jännää tehtävässä olivat rajapinnat ja ihan konkreettinen pelimoottori, joka pisti pyörät pyörimään, eli tässä tapauksessa kutsui vuorotellen kaikkien rajapinnan toteuttavien olioiden teesiirto-metodia. Mutta kaikkein jännintä oli kuitenkin ihan “oikean” eli ohjailtavissa olevan pelaajan luominen ja pelimaailmaan itegroiminen! Tämä toteutettiin luomalla luokka Avatar ja metodi teesiirto, joka luki käyttäjän antamia komentoja ja, kun koodin sai toimimaan, myös toteutti niitä! :) Aivan mahtava fiilis, kun kirjoitti komentoriville “katso” ja “mene p”, ja sai aikaiseksi ihan oikean tulostuksen ja kun sitten näki pienen punaisen pisteen siirtyvän sektorista toiseen sai näkyvän lisäksi aikaan jotain kuuluvaakin. Näppäimistöllä annettuja komentojen lukemiseen käytettiin BufferedReaderia, joka sekin tuli uutena tässä tehtävässä.

Ohjelmointitehtävä4, kaikista mahdollisista poikkeuksista ja paniikkikoodaamisista huolimatta on tähän mennessä ollut ehdottomasti syksyn mukavin! Koodin tuotto sujui alkukankeuksien jälkeen, ja kun testaamaan päästiin, niin sittenhän sitä testattiin. Lopulta pelin suorittaminen tyssäsi nullPointeriin tai ArrayIndexBoundsOfExceptioniin tai johonkin muuhun yhtä mukavaan komentorivin tulostukseen. Ja ei kun virhettä etsimään ja uusi peli käyntiin! Vaikeinta tehtävässä, ehdottomasti, oli pelin idean keksiminen ja sen toteuttaminen. Omia metodeja syntyi aika runsaasti, ja kohta niiden kanssa oltiinkin aivan solmussa! Olisi kyllä ehdottomasti kaivattu taas hieman järjestelmällisyyttä ajatuksiin sekä niiden toteuttamiseen.. Kuitenkin, omia metodeja aika runsaasti koodiin lisänneenä, voin jopa väittää oppineeni jotain. Yrityksen ja erheen kautta olen jo ehkä oppinut niitä sopiviin käyttötarkoituksiin tekemään. Aluksi oli vaikeinta juuri se pohtiminen; mitä metodin halutaan tekevän, tarkistavan jotain vaiko kenties palauttavan, ja minkä tyyppisenä…

Tällä kierroksella toteutetaan graafinen peli Sikoban. Ja kuinka hyvin toteutetaakaan… Lauantaihin asti taas aikaa, paniikkikoodaus siis lauantaina 16-17.50.

-Meri

fiiliksiä teoria4:sta ja java4:sta

hmm mistähän sitä aloittais.. Vaikkapa swingistä. Päädyin jälleen esseen tekemiseen edellisten kokemusten ohjaamana. Alotus oli kylläkin taas käsittämättömän vaikeeta ja tekstin tuottaminen kangerteli. Vasta yömyöhällä koneen näytöllä rupesi näkymään mustaa valkoisella, ehkä se on vaan fakta että yöaikaan ihminen on luovimmillaan. Mutta joo. En koe oppineeni kauhean paljon swingistä esseetä kirjoittaessa, ehkä tärkeimmät komponentit jäivät jotenkin mieleen ja jonkinlainen käsitys jäi siitä, miten graafisia käyttöliittymiä rakennellaan erilaisista palikoista sopivasti lisäillen. Luulenpa, että swingi tulee hyvinkin tutuksi seuraavan javatehtävän yhteydessä. Itse opin ainakin huomattavasti paremmin asiat konkreettisesti itse tekemällä.

Samaan syssyyn vielä javatehtävästä. Nelosharkka oli mielestäni aika mukava ja opin paljon uutta. Sain tehtävän perjantaina valmiiksi suhteellisen toimivana. Jotain kauneusvirheitä siihen jäi ja kommentointi oli aika naurettavan huonoa paikotellen, mutta lauantain kiireellisyyden takia jostain piti tinkiä. Jepjep. Nokka kohti uuutta viidettä tehtävää, jossa harmikseni aloitetaan täysin alusta ja sienet yms. unohdetaan täysin ;( Juuri kun niihin pääsi sisään ja ehti jo tottua.. aiaia… toivottavasti tästä takaiskusta selvitään ilman pahempia ruhjeita.

Seuraava sivu »


 

marraskuu 2009
ma ti ke to pe la su
« tam    
 1
2345678
9101112131415
16171819202122
23242526272829
30