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

0 Responses to “Muovipaloja hiekkalaatikossa: Sikoban vers. 1.1”



  1. Jätä kommentti

Vastaa

Please log in using one of these methods to post your comment:

WordPress.com-logo

Olet kommentoimassa WordPress.com -tilin nimissä. Log Out / Muuta )

Twitter-kuva

Olet kommentoimassa Twitter -tilin nimissä. Log Out / Muuta )

Facebook-kuva

Olet kommentoimassa Facebook -tilin nimissä. Log Out / Muuta )

Google+ photo

Olet kommentoimassa Google+ -tilin nimissä. Log Out / Muuta )

Muodostetaan yhteyttä palveluun %s





%d bloggers like this: