Harjoitustyö
Kurssi suoritetaan tekemällä pakollisia viikkotehtäviä ja pakollinen harjoitustyö. Kurssin arvosana on viikkotehtävistä lasketun keskiarvon ja harjoitustyöstä saadun arvosanan keskiarvo.
Ts. jos viikkotehtävistä saa keskiarvoksi 2.3 (ei pyöristetä kokonaisluvuksi) ja harjoitustyöstä arvosanaksi 1 niin kurssin arvosana on 2 koska (2.3+1)/2.0 = 1.65 ja pyöristyy ylöspäin kakkoseksi
Harjoitustyön aihe
Tärkeimpiä asioita harjoitustyössä on käyttöliittymän komponenttien käyttö. Erityisesti omien komponenttien tuottaminen ja jakaminen muiden käyttöön. Algoritmiset seikat ovat toisarvoisia.
Harjoitustyö pitää toteuttaa järkevällä ja hyvällä ohjelmointitavalla. Tarkistajalla on täydet valtuudet hylätä näennäisesti toimivat mutta purukumilla viritetyt tai muuten epäilyttävät tekeleet.
Harjoitustyöstä on kolme eri tasoa eli tasot yksi (1), kolme (3) ja viisi (5) jotka vastaavat samaa arvosanaa. Jos teet moitteetta tason viisi työn saat harjoitustyön arvosanaksi viisi. Jos toteutuksessa on puutteita niin arvosanasi on matalampi.
Harjoitustyön pitää noudattaa UX guiden tärkeimpiä käytettävyysohjeita. Kts. luennot 17-18.
Harjoitustyön yleiset vaatimukset
Seuraavat vaatimukset koskevat kaikentasoisia harjoitustöitä:
- Järkevä toteutustapa eli ei liikaa purukumia, cut and paste -koodia tai muuta huonoja ratkaisuja. Työssä on osoitettava, että on oppinut ja ymmärtänyt kurssilla käytyjä asioita.
- WPF-ohjelma
- Menut - Vähintään File-valikko ja Help-valikko
- About-dialogi - Sisältää vähintään ohjelman nimen, tekijän nimen, versionumeron ja päiväyksen
- Avustus - Sisältää vähintään lyhyen selityksen kaikista ohjelman ominaisuuksista ja miten niitä käytetään. Avustukseksi kelpaa mm. www-sivu kunhan se avataan ohjelman Help-valikosta.
- Painikkeita ja muita peruskontrolleja
- Access keyt menuihin
- Käyttöliittymä on toimiva, järkevä ja looginen. Käyttöliittymä ei ole rakennettu vain huitaisemalla komponentit lomakkeelle miten sattuu ja mihin sattuu.
- Ohjelmassa on oleellisissa kohdissa osattu käyttää valmiita dialogeja (open, save, print ym.)
- Ohjelmakoodin dokumentointi on selkeä ja kattava
- Syöttökentissä on järkevät tarkistukset
- Ohjelma osaa antaa oleellisissa tilanteissa selkeää palautetta. Erilaisista ohjelmassa tapahtuvista toimenpiteistä pitää tulla käyttäjälle jokin vaste, että käyttäjä tietää toiminnon onnistuneen tai epäonnistuneen. Ohjelma jossa vain tyrkitään painikkeita ilman, että mitään näkyvää tapahtuu ei ole hyvä ohjelma. MessageBox-luokan käyttäminen on harjoitustyössä kiellettyä.
- Jos ohjelmaikkunan kokoa voi muuttaa niin käyttöliittymä osaa siististi mukautua uuteen ikkunan kokoon. Ikkunan kokoa ei pidä lukita ilman erityisen hyvää perustelua. Ohjelmoijan laiskuus ei ole kelvollinen peruste.
- Ohjelma kääntyy ja käynnistyy muuallakin kuin tekijän omalla tietokoneella. Varokaa absoluuttisia tiedostopolkuja ja muita kone- ja ympäristökohtaisia viritelmiä. Kokeilkaa ohjelmaanne muuallakin kuin kehityskoneessa.
- Pelin tai ohjelman toiminnallisuuden aloittaminen alusta ei tarkoita koko ohjelman sulkemista ja käynnistämistä uudelleen!
Taso 1
Toteuta Breakthrough-lautapeli WPF-ohjelmana. Kokeile pelata malliohjelmaa. Katso pelin säännöt.
- Nappuloita liikutellaan valitsemalla hiirellä ensin liikuteltava nappula ja sen jälkeen ruutu johon nappula halutaan siirtää.
- Jos siirto on laiton niin kyseistä siirtoa ei voi tehdä. Nappula voi siirtyä aina yhden ruudun viistoon tai suoraan eteenpäin jos kyseessä on tyhjä ruutu. Nappula voi syödä vastustajan nappulan siirtyessään viistoon mutta ei suoraan siirtyessä.
- Peliä pelaa aina kaksi ihmispelaajaa. Alempana pelaava aloittaa aina pelin.
- Peli loppuu kun jompikumpi saa nappulan siirrettyä omasta aloitussuunnastaan katsottuna takariville. Pelin loputtua jomman kumman pelaajan voittoon ilmoittaa peli voittajan muuttamalla voittaneen nappulan ulkoasua.
- Peliruudukko ja sen sisältämät nappulat skaalautuvat ikkunan koon mukana. Ikkunaa ei kuitenkaan voi pienentää järjettömän pieneksi.
- Toteuta peli 8x8 ruudukkoon. Peli on toteutettava tavalla, joka mahdollistaa ruudukon koon muuttamisen helposti
- Toteuta peli käyttäen omia komponentteja. Luo vähintään pelinappulakomponentti ja pelialuekomponentti.
Taso 3
Laajenna tason 1 -ohjelma toimimaan myös Tammi-lautapelinä (engl. Checkers tai Draughts)
- Ohjelma noudattaa Tammen sääntöjä.
- Ennen pelin alkua ohjelma pyytää syöttämään pelaajien nimet. Jos nimiä ei syötetä käytetään oletuksena jotain geneerisiä nimiä.
- Nappuloita liikutellaan valitsemalla hiirellä ensin liikuteltava nappula ja sen jälkeen
ruutu johon nappula halutaan siirtää.
- Jos nappulalla on vain yksi laillinen siirto niin siirto suoritetaan heti nappulan valitsemisen jälkeen
- Jos nappula syö ja loikkii useamman vastustajan ylitse on oikeassa järjestyksessä valittava kaikki siirtoon kuuluvat ruudut.
- Jos siirto on laiton niin kyseistä siirtoa ei voi tehdä. Virhe ilmaistaan värjäämällä valittu kohderuutu punaiseksi. Vaihtoehtoisesti voi näyttää lailliset siirtovaihtoehdot korostettuina punaisella ja jättää kokonaan reagoimatta vääriin siirtoyrityksiin.
- Valittuna oleva nappula korostetaan muista nappuloista poikkeavasti.
- Peliä pelaa aina kaksi ihmispelaajaa. Ohjelma arpoo aloittajan.
- Jos pelaaja saa korotettua nappulansa Tammeksi niin kyseinen nappula esitetään muita nappuloita suurempana. Nappulan muuttuminen suuremmaksi esitetään WPF-animaationa.
- Peliruudukko ja sen sisältämät nappulat skaalautuvat ikkunan koon mukana. Ikkunaa ei kuitenkaan voi pienentää järjettömän pieneksi.
- Pelin loputtua jomman kumman pelaajan voittoon ilmoittaa peli voittajan ja soittaa jonkin merkkiäänen.
- Pelin asetuksia voi muuttaa omassa asetusdialogissa. Asetuksia ovat vähintään seuraavat:
- Voi valita pelataanko Breakthrough-peliä vai Tammea
- Voi valita käytetyn peliruudukon koon (8x8 - 16x16)
- Ruudukossa käytetyt värit. Väri täytyy valita ColorDialogilla.
- Pelinappuloiden värit. Väri täytyy valita ColorDialogilla.
- Ohjelma tallentaa pelituloksen haluttaessa tekstitiedostoon. Tallennuksessa näkyvät pelaajien nimet ja tekemät siirrot koordinaatteina. Tallennustiedosto pitää kysyä Save File Dialogilla.
- Yksittäisen pelin tulokset voi myös suoraan tulostaa (printata) ohjelmasta. Yksittäisen pelin tulosteessa esitetään osallistujien nimet, pelissä käytetyt siirrot koordinaatteina samaan tapaan kuin shakissa ja pelin loppuasetelma eli kuva pelilaudasta.
- Uuden pelin voi aloittaa milloin tahansa
Taso 5
Toteuta tason 3 ohjelma seuraavilla muutoksilla ja lisäyksillä:
- Mahdollista nappulan siirtäminen myös Drag & Dropilla eli nappulan voi raahata suoraan haluttuun ruutuun tai useamman ruudun kautta hyppiessä raahataan järjestyksessä jokaisen reitille osuvan ruudun kautta.
- Valittaessa nappula tai tartuttaessa hiirellä raahausaikeissa nappulaan osaa ohjelma automaattisesti korostaa ruudut joihin nappulan voi raahata
- Ohjelma animoi varsinaisen siirron eli siirtää sopivalla vauhdilla nappulan jokaisen reitille osuvan ruudun kautta. Jos nappula syödään niin syöty nappula kutistuu olemattomiin ja katoaa pelipöydältä. Siirto ja nappulan katoaminen on toteutettava WPF-animaatioina.
- Vastustajaksi voi valita myös tietokoneen. Tietokoneen voi myös asettaa pelaamaan itseään vastaan. Tietokoneen ei tarvitse olla älykäs pelaaja. Jos tietokone pelaa itseään vastaan niin pelaaminen tapahtuu oletuksena järkevällä nopeudella jotta ihminen kykenee seuraamaan pelin etenemistä.
- Toteuta Undo- ja Redo-mahdollisuudet. Tehtyjä siirtoja pitää kyetä perumaan aina pelin alkuun asti.
- Ohjelma osaa tallentaa kaikki asetuksensa rekisteriin
- Lisää ohjelman asetuksiin mahdollisuus valita ohjelman kieli. Tarjoa oletuksena suomi ja englanti.
- Asetuksista voi valita kummankin puolueen pelinappulan muodon. Muotoja on tarjolla ainakin ympyrä, kuutio ja kolmio.
- Ohjelma osaa ladata ja tallentaa pelitilanteen. Pelin voi siis halutessaan jättää kesken, tallentaa ja jatkaa myöhemin. Myös jo loppuneen pelin voi tallentaa. Ohjelma osaa haluttaessa näyttää koko ladatun pelin uudelleen (replay) samaan tapaan kuin jos tietokone pelaisi itseään vastaan.
Dokumentointi
Harjoitustyön tärkeä osa on dokumentoitu ohjelmalistaus. Osa dokumentointia on ongelman jakaminen selkeiksi ja hyvin nimetyiksi aliohjelmiksi/komponenteiksi/luokiksi. Samoin osa dokumentointia on epämääräisten vakioiden siirtäminen koodista tiedoston alussa oleviin vakiolausekkeisiin.
Dokumentoinnissa on käytettävä XML dokumentaatio kommentteja.
Ohjelmakoodin dokumentoinnin lisäksi on ohjelman Help-valikosta löydyttävä ohje jossa on selkeä kuvaus ohjelmasta, sen toiminnasta ja myös lyhyt käyttöohje.
Valmis työ
Harjoitustöitä voi palauttaa 31.7.2015 saakka. Jo arvostellun työn voi palauttaa yhden kerran uudelleen korjattuna ja paranneltuna.
Yleisiä virheitä
Varmista, että työssäsi ei ole seuraavia virheitä tai puutteita:
- Älkää tehkö ohjelman käyttöliittymää roiskimalla kontrolleja sattumanvaraisesti ympäri ikkunaa! Työ ei mene läpi jos käyttöliittymästä näkee heti, että kontrolleja ei ole edes yritetty asetella järkevästi
- Tehkää järkevät ja loogiset valikot
- Älkää keksikö ihan mitä tahansa valikko-otsikoita vaan käyttäkää vakiintuneita valikoita ja vakiintuneessa järjestyksessä
- Älkää laittako mitään toimintoa suoraan valikon nimeen. Kukaan ei odota, että jokin toiminto käynnistyy suoraan valikon nimestä esim. sanasta File.
- Muistakaa määritellä kaikille valikoille accesskeyt
- Tehkää menupalkista koko ohjelman ikkunan levyinen
- Varmistakaa, että menupalkki mukautuu ikkunan kokoon
- Kumpaankin edelliseen liittyen: Lukekaa Windows User Experience Interaction Guidelines tai ITKA112

Käyttäjien kommentit