Harjoitustyö 1
Harjoitustyö Tehtävä: ohjelmoi olioperustainen sokkeloseikkailu peli Javakielellä. Sokkelon sisältö säilötään linkitetyille listalle ja tekstitiedostoon. Työ tehdään itsenäisesti yhden hengen ryhmissä. Ideoita voi vaihtaa koodia ei. Henkilökohtaista ohjausta tarjolla mikroluokissa. Sähköpostilla voi edelleen kysyä. Palautus WETO-järjestelmään noin kuukauden kuluttua. Testaus automaattisesti julkisilla ja salaisilla testeillä. Tarkka tehtävänanto julki ensi viikolla. Aloita ajoissa ja tee työtä säännöllisesti. Varaa harjoitustyön käytettiin aikaa ainakin 40 tuntia. Alustavaksi palautustakarajaksi on ajateltu sunnuntaita 3.4. Olio-ohjelmoinnin perusteet Kevät 2016 Jorma Laurikkala 2
Luokista Sokkelo koostuu rakenneosista, joita ovat käytävä ja seinät. Sokkelossa on mönkijä, robotteja ja esineitä. Mönkijä kerää esineitä. Robotit ovat mönkijälle vaarallisia. Kaikista sokkelon osista ja sen sisällöstä tunnetaan paikka, joka määritellään rivi- ja sarakeindeksien avulla (int, 0). Sisällölle yhteinen tieto on energia (int, 0). Mönkijällä on suunta (char) ja varasto (lista), johon voi kerätä esineitä. Myös roboteilla on suunta (char). Kirjoita luokkahierarkia, jossa on abstrakti juuriluokka sekä sokkelon osille että sokkelon sisällölle. Peri tästä luokasta joko suoraan tai abstraktin väliluokan kautta sokkelon rakenneosia mallintavat konkreettiset Kaytava- ja Seina-luokat. Tee abstrakti luokka sisällön osille ja peri tästä luokasta konkreettiset aliluokat Monkija, Robotti ja Plantti. Olio-ohjelmoinnin perusteet Kevät 2016 Jorma Laurikkala 3
Luokista Kapseloi luokat ja korvaa luokissa tostring-metodi. Selvitä olion tyyppi metaolion avulla luokkahierarkian juuriluokassa Lotkoluokassa. (Älä tee tyypille attribuuttia.) Toteuta Comparable-rajapinnan compareto-metodi mönkijän, robotin ja esineen yliluokassa siten, että metodissa vertaillaan energioita. Peri LinkitettyLista-luokasta OmaLista-luokka. Sijoita omaan listaa uusia listaoperaatioita. Esimerkiksi alkio lisäys siten, että alkioiden välille muodostuu kasvava järjestys. Monkija-luokan varasto on OmaLista-tyyppinen attribuutti. Käytäväpaikan sisältö sijoitetaan OmaLista-tyyppiseen listaan. Samassa käytävän paikassa voi näin olla esimerkiksi useita esineitä ja robotteja. Sokkelon osat on helpointa organisoida kaksiulotteiseksi taulukoksi, joka koostuu käytävä- ja seinäosista. Sijoita luokat pakkauksiin. Olio-ohjelmoinnin perusteet Kevät 2016 Jorma Laurikkala 4
Luokista Robottien liikuttamisesta vastaa kurssin kotisivuilla julkaistava apuluokka. Kurssisivuilla julkaistaan myös kaksi rajapintaa, jotka on toteutettava siten, että robottien paikan ja suunnan lukeminen ja muuttaminen on mahdollista. Olio-ohjelmoinnin perusteet Kevät 2016 Jorma Laurikkala 5
Pelin toiminnot lataa: lataa sokkelon osat ja sisällön. Tiedostosta luetaan myös siemenluku ja sokkelon koko. Robotteja liikutellaan siemenluvun avulla alustetun apuluokan avulla. inventoi: tulostaa mönkijän ja sen varasto tiedot näytölle. katso s: tulostaa naapuripaikan sisällön näytölle. Parametri on jonkin pääilmansuunnista: p = pohjoinen, i = itä, e = etelä ja l = länsi. kartoita kartta: tulostaa sokkelon sisällön näytölle taulukkomuodossa. liiku s: liikuttaa mönkijää yhden paikan annettuun suuntaan, mikäli mahdollista. Uudessa paikassa olevat esineet kerätään automaattisesti. Peli loppuu, kun kaikki esineet on kerätty. Mönkijä joutuu taisteluun, jos paikalla on yksi tai useampi robotti. Taistelun lopputulos määräytyy energian perusteella. Peli loppuu, jos mönkijä häviää. Olio-ohjelmoinnin perusteet Kevät 2016 Jorma Laurikkala 6
Pelin toiminnot muunna n: mönkijä muuntaa n kappaletta varastossa olevista esineitä energiaksi. odota: pelaaja ohittaa oman vuoronsa. tallenna: tallentaa sokkelon osat ja sisällön tiedostoon. Tiedostoon tallennetaan myös siemenluku ja sokkelon koko. lopeta: lopettaa ohjelman. Peli siirtää robotteja liikkumisen ja vuoron ohittamisen jälkeen. Olio-ohjelmoinnin perusteet Kevät 2016 Jorma Laurikkala 7
Tekstitiedosto Tiedot tallennetaan tekstitiedostoon sokkelo.txt. Ensimmäisellä rivillä siemenluku ja sokkelon rivien ja sarakkeiden lukumäärä. Muilla riveillä yhden sokkelon osan tai sokkeloon sisältyvän olion tiedot per yksi rivi. Rivin alussa lötkön luokan nimi. Seuraavaksi paikka ja luokan mahdolliset omat tiedot. Mönkijän esineiden rivit seuraavat mönkijän riviä. Käytävän sisällön rivit seuraavat käytävän rivejä. Kaikki tiedot erotetaan toisistaan putkimerkillä ja rivit päättyvät putkimerkkiin. Tiedot sijoitetaan tietyn mittaisiin kenttiin. Olio-ohjelmoinnin perusteet Kevät 2016 Jorma Laurikkala 8
Tekstitiedosto 1 5 5 Seina 0 0 Seina 0 1 Seina 0 2 Seina 0 3 Seina 0 4 Seina 1 0 Kaytava 1 1 Monkija 1 1 100 e Kaytava 1 2... Olio-ohjelmoinnin perusteet Kevät 2016 Jorma Laurikkala 9