'Projektityö' aiheen arkisto

vielä projektistani

Tein tänään vielä loppuraporttia projektistani, joka oli muuten Palapeli, ja siinä miettiessäni sen toiminnallisuutta ja teknistä toteutusta en voinut muuta kuin tuntea iloa ja ylpeyttä saavutuksestani. Siitähän oli tullut paljon toiminnallisempi ja hienompi kuin olisin vielä viime vuonna osannut kuvitellakaan. Silloin epäilin, saisinko sitä edes toimimaan palapelinä, enkä ainakaan osannut odottaa, että saisin tehtyä myös kaikenlaisia lisätoimintoja. Eivät ne nyt niin mahtavia ole, mutta omilla taidoillani ihmettelen, miten sain ne aikaan. Lisäksi kun ottaa huomioon, että projektin tekeminen alkoi vasta tammikuun ensimmäisenä viikonloppuna, eivät odotukseni olleet kauhean korkealla.

Palapelin teemana oli menneiden vuosien Hollywood-tähdet, joista löysin hienoja kuvia Palapeliin. Muutenkin pelistä tuli ulkoisesti ihan nätti, koska keskityin aika paljon graafiseen käyttöliittymään. Oli kiva suunnitella paperille, mitä haluan tehdä ja selkeytti kovasti, kun siihen kirjoitti, mitä komponentteja mihinkin tulee. Projekti ei ollut ollenkaan niin pelottava ja stressin partaalle ajava kuin mitä pelkäsin muiden juttujen perusteella. Se oli jopa kiva kokemus, ja sen aikana koin ehkä ensimmäisen kerran, että taidan osata sittenkin koodata.

-Anu

Projekti <3

Joululoma tuli ja meni, ja niin kävi myös Studio1-kurssin loppuprojektille!!! Alkusyksystä niin odotettu ja kaivattu joululoma alkoi iltojen pimetessä tuntua yhä kammottavammalta ja vastenmielisemmältä ajatukselta, kun tiesi, mitä se toisi mukanaan (ennen kaikkea kun tiesi että se EI toisi mukanaan laiskan letkeitä lomapäiviä).

Oma projektini käynnistyi aluksi hyvin tahmeasti. Tenttiviikolla aikaansaatu tyhjä peli-ikkuna sai odotella täytettä välipäiviin asti, jolloin viimein oli pakko tarttua haasteeseen ja avata monta (ihanaa) päivää käyttämättä lojunut Eclipse. Muutama hyvin ansaittu lomapäivä kinkun ja konvehtien parissa tuntui tehonneen; koodausintoa pursusi projektin alkuvaiheilla niin runsaasti, että oma Kakuro-pelini oli joten kuten pelattavissa jo uudenvuoden rientojen jälkeen.

Koko ohjelmointiprosessi sujui yllättävän kivuttomasti. En kertaakaan törmännyt kovin suuriin ongelmiin, yleensä virheet paljastuivat helposti korjattaviksi ajatus- tai huolimattomuusvirheiksi, ja aikaa riitti sekä monien lisäominaisuuksien näpertelyyn että myös lähes normaalia muistuttavaan sosiaaliseen elämään. Hetkittäin loma jopa tuntui lomalta.

Deadlinen lähestyessä lisääntyi paniikin lisäksi myös ahneus, ja muutama ideoitu lisäominaisuus jäi toteuttamatta. Projekti kuitenkin valmistui ajallaan, valtavaa kiirettä ei missään vaiheessa tullut, ja hetkittäin koodaaminen tuntui jopa mukavalta, kun sai itse ideoida ja toteuttaa koko projektin alusta loppuun saakka. Hieman harmittaa näin jälkeenpäin, etten valinnut projektiaiheeksi jotakin vähän haastavampaa, mutta toisaalta oli mukava näpytellä koodia ilman että joitui tuskastelemaan päiväkausia erinäisten ongelmien kanssa. Haikeudella en tuota aikaa muistele (ainakaan vielä), enkä edelleenkään lämmennyt ohjelmoinnille, mutta prosessi opetti valtavan paljon, siitä ei mihinkään pääse. Täytyy olla ylpeä omasta panostuksestaan ja myös lopputuloksesta. Jes.

-Ulla

Squares Unlimited – Out of the Sandbox

Sunnuntaina parin viikon ahertamisen lopputuote oli viimein jalostettu finaaliversioksi – kurssin projektityö oli valmis, vieläpä ajoissa. Projektiaiheenani oli refleksejä koetteleva, hiirenkuuntelija-rajapintoja hyödyntävä pikkupeli, joka hetken mielijohteesta sai nimekseen Squares Unlimited, aivan kuin tribuuttina häilyvälle esikuvalleen – Squares2-pelille. ValikkoLähtökohdasta voi lukea lisää projektisuunnitelmasta, vaikka jonkin verran muutoksia pelin rakenteeseen matkan varrella tulikin.

Aikaa projektiin kului aivan tuhottomasti ja oma 90 tunnin arvioni pelin kehittelyyn käytettävästä ajasta ylittyi hulppeasti. En pitänyt tarkkaa kirjaa käytetyistä tunneista, mutta niitä kertyi reilusti yli 100 – ehkä noin 120 tuntia. Melkoinen osa ajasta kului muuhun kuin koodaamiseen – Java2D API:iin tutustumiseen, Sunin aplettitutoriaalin ja muiden nettiartikkeleiden sekä Java-keskustelufoorumien kahlaamiseen, peligrafiikoiden tekemiseen Photoshopilla ja PhotoDraw:lla sekä kaikenlaiseen ylimääräiseen säätämiseen ja vääntämiseen, pelin taustamusasampletkin väsäsin itse. Toki koodiakin kertyi reippaan oloisesti: reilut 3500 riviä kommentteineen.

gameplay-kuva

Lopputulokseen olen aika tyytyväinen. Puutteitakin tosin oli – olisin halunnut peliin tallennussysteemin, joka tallentaa tulokset serverille. Nyt jouduin tyytymään ratkaisuun, jossa apletti tallentaa käyttäjän koneelle txt-tiedoston, jossa omat parhaat tulokset säilyvät. Tämäkin oli ihan kohtuullinen suoritus sinänsä, sillä oletuksena apletilla ei ole mitään oikeuksia kirjoittaa käyttäjän koneelle. Tein pelin jar-tiedostolle itsesertifikoinnin käyttämällä JDK:n mukana tulevia keytool- ja jarsigner -työkaluja. digital signatureTällöin apletti kysyy käynnistyksen yhteydessä käyttäjältä tarvittavat lisäoikeudet tulosten tallentamista varten. Yleensä kuitenkin on tapana, että signeeratulla apletilla on esitettävänä jonkin kolmannen osapuolen varmistus ohjelman luotettavuudesta.

Heikoin puoli koodissani oli luokkarakenne. Periaatteessa alussa oli kaksi vaihtoehtoa – joko tehdä vähän suppeampi peli hartaasti mietityin algoritmein ja tietorakentein sievään pakettiin käärittynä tai sitten yrittää toteuttaa kaikki projektisuunnitelman asiat, keinolla millä hyvänsä. Valitsin jälkimmäisen. Tarkoituksena oli vielä miettiä koodin rakennetta uudelleen myöhemmin, mutta aika ei antanut periksi tämän suhteen. Tuloksena olikin kuusi luokkaa, joista yksi – pelin aplettiluokka – oli jossain määrin ylimitoitettu. Toki piirtämisestä, ruudunpäivityksestä ja pelitapahtumista vastaava sekä selaimen kanssa suoraan vuorovaikutuksessa oleva luokka haukkaa luonnollisesti ison osan pelin sisältämästä datasta. Sen olisi silti voinut kenties hajauttaa pariksi pienemmäksi luokaksi. Toisaalta olisi ollut suhteellisen riskialtista tehdä lopussa suuria rakennemuutoksia: se olisi vaatinut ainakin paljon testausta, että kaikki toimii kunnolla uusilla järjestelyillä. Palauttamani peli kuitenkin toimii juuri niin kuin pitääkin, joten sikäli voin olla tyytyväinen.

Monista ennen vielä tuntemattomista asioista tuli ylipitkiksi venyneiden koodaussessioiden ohessa melkeinpä rutiinia. Tällaisia uusia tuttavuuksia olivat mm. luokat AffineTransform (kierto ja skaalaus), AlphaComposite (läpinäkyvät kuvat), TexturePaint (tekstuurimaalit), GradientPaint (gradienttimaalit), TextLayout, tuplabufferoinnin hyödyntäminen, 2D API:n geometriset muodot – ja Graphics2D:n käyttö ylipäänsä.

digital signature

Koko pelin piirtosysteemi perustuu Timerien hyödyntämiseen – tuttua kauraa jo edellisistä Java-kotitehtävistä. Javassa kuvalle tehtävät muokkaukset tehdään BufferedImage-muotoiselle kuvadatalle. Helpoin tapa tehdä Imagesta BufferedImage on luoda vastaavan kokoinen tyhjä BufferedImage ja tämän grafiikkakontekstilla piirtää haluttu Image tyhjään kuvaan. Käytinkin tätä tekniikkaa monessa eri yhteydessä. Erityisesti ARGB-tyyppiset läpinäkyvät BufferedImaget osoittautuivat erittäin käyttökelposiksi. Kierrossa taas tuli esille fakta, että kun koordinaatistoa halutaan kiertää, niin se tapahtuu aina grafiikkakontekstin koko koordinaatistolle.

Peliä tehdessä heräsi hieman kiinnostusta myös kehittyneemmän grafiikan luontiin Javalla – lueskelin hieman OpenGL-rajapintaa hyödyntävien JOGL ja LWJGL -kirjastojen käytöstä. Ehkäpä näihin ehtii tutustua paremmalla ajalla vähän syvällisemmin.

Räjähdys

Mitä tästä kaikesta sitten jäi käteen? Opin paljon Javan 2D-grafiikasta, apletin teosta ja ohjelmoinnista yleensä. Luultavasti myös seuraava vastaavan kokoluokan projekti on jonkin verran helpompi toteuttaa – mitä se sitten ikinä onkaan. Ja tietysti on ihan kivaa myöskin saada omille kotisivuille jotakin aktiivista sisältöä.

Huomasin myös suunnittelun merkityksen: kunnollinen ja tarpeeksi tarkka alkusuunnitelma säästi aikaa ja hermoja useassa eri vaiheessa. Tarkensin suunnittelmia aina pienissä paloissa ennen jonkin isomman kokonaisuuden toteuttamista. Pelin teon sivutuotteena syntyikin reilut parisenkymmentä kuulakärkikynällä sutattua luonnostelusivua.

Lisää pohdintaa luvassa varsinaisessa projektin loppuraportissa. Peliä pääset kokeilemaan alla olevasta buttonista.

Näkymä

 

– Teemu

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

Projektin suunnittelusta

Eilen oli sitten projektisuunnitelmanpalautus. Ihan hyvä että se tuli jo nyt, vaikka aluks tuntu et nytkö sitä jo pitää alkaa ajatella. Mut siinä tajus aikataulua miettiessä, että eihän sitä aikaa kyllä kauheesti ole enää.. Ja et miten paljo siinä on omaa suunnittelua, kun ei olekaan enää valmiita ohjeita, mitä luokkia ja metodeita pitää tehdä..

Sain vähän aikaa miettiä esimerkiks luokkarakennetta, että siitä tulis edes jotenki järkevä. Varsinkin viimeisimmästä ohjelmointiharjotuksesta sain vinkkejä siihen , millasille toiminnoille kannattaa perustaa oma luokka ja miten ne on toisiinsa yhteydessä. Mutta hyvin suunniteltu on jo puoliksi tehty, siispä kannattaa uhrata suunnitteluun aikaa.  Vielä vähän aikaa sitten kyllä ajattelin, että siinähän se koodatessa suunnitelmakin etenee, mutta olis saattanu tulla aika sekavaa jälkeä siinä. Myös tulevia haasteita tuli mieleen aika ahdistavan paljon.. Projektissa tulee tarvitsemaan monia semmosia asioita, joihin en oo aiemmin törmänny ja joiden toteutuksesta ei oo mitään hajua.

Sitten kun seuraava, siis viimeinen!, ohjelmointiharjotuksen deadline  on ohi, olis tarkotus alkaa heti pian puuhaamaan projektia. Tavallaan sitä odottaa, mutta enemmän se kammoksuttaa. Mutta nyt kun sen ajoissa aloitan ja sitten säännöllisesti yritän sitä tehdä, niin toivon ettei mulle taas tule viimehetkien paniikkia, niinku yleensä.

Anu

Pelihimoa joulupöydässä..

Kohta koittaa aika, kun kaikki tentit ovat ohi, ja joulukinkku sulaa vatsassa. Joulurauha on julistettu, maassa on loskaa ja kaikilla rauhallinen mieli, kunnes.. Studio1-projekti pamahtaa päälle! Viisas aloittaa suunnittelun ja toteutuksen jo ennen tenttiviikkoa, tyhmä vasta joulun jälkeen.

Kukin voi kuvitella, kuulunko minä ryhmään ennaltaviisaat.

Projektin kohde ja aihe-ehdotus on joka tapauksessa jätettävä jo ennen tenttiviikkoa. Itse ehdotin, että teen projektikseni kasinopelin. Niille, jotka eivät tiedä, Kasino on korttipeli, jossa kerätään pisteitä kunnes joku pelaajista saavuttaa niitä 16. Jokaisella kierroksella käytetään yksi korttipakka ja pisteitä on jaossa ainakin 10, joskus enemmänkin. Oheisesta linkistä utelias pääsee katsomaan aiheen kuvausta Ohjelmoinnin peruskurssi Y1:n projektisivulta.Cards!

Kuten jotkut tietävät, kävin Informaatioverkostojen ohjelmointikurssin jo kaksi vuotta sitten. Tuolloin tein projektini samasta aiheesta, mutta toteutus jäi melkoisen torsoksi. Peli oli niin kuiva tekstiversiona, etten meinannut itsekään jaksaa pelata sitä läpi. Tällä kerralla tarkoituksenani on ainakin
- toteuttaa täysin toimiva peli ja
- tehdä pelille graafinen käyttöliittymä.

Lisäksi, mahdollisuuksien mukaan aion

- mahdollistaa pelaamisen 1-N tietokonevastustajaa tai muita ihmisiä vastaan (samalta näytöltä, tietty)
- lisäillä tilpehööriä kuten pelaajien kasvokuvien lataamista peliin, ääniä, pistelaskun tallentamista high scoresiin jne.

Lisään myöhemmin blogiin luonnoksen siitä, miltä pelin tulisi valmiina näyttää. Nyt ajattelin painua unten maille. Näkemisiin!
/Henri


 

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