Ohjelmistoarkkitehtuurit harjoitustyö 2006 1 Johdanto Harjoitustyönä on toteuttaa kerroksittainen sovelluskehys erilaisten simulaatioon perustuvien pelien tekemiseen. Kehyksestä lisäksi erikoistetaan keskenään taistelevien robottien simulaation mahdollistava sovellus. Harjoitustyö tulee toteuttaa Java-kielellä. 2 Rakenne Toteutettavan ohjelmiston kerrosrakennetta on havainnollistettu kuvassa 1. Harjoitustyössä on toteutettavana kolme ylintä kerrosta. Simulaatiokehyksen käyttämä käyttöliittymäkehys (SimulationGUIFW) annetaan valmiina. Paketti ja sen dokumentaatio löytyvät kurssin harjoitustyösivuilta. RobotWarGame RobotFW SimulationFW SimulationGUIFW SWT/Java Kuva 1: Esimerkki arkkitehtuurin kerroskuvasta 3 Simulaatiokehys Simulaatiokehyksen vastuualueena on tarjota kaikkien huomioitujen sovelluserikoistuksien yhteinen toiminnallisuus ja määritellä käytettävät rajapinnat. Simulaatiokehyksen vastuulla on lisäksi käyttää annettua käyttöliittymäkirjastoa ja näin tarjota eri erikoistuksille yhteinen käyttöliittymä. Vaikka työssä tehdään vain yksi erikoistus simulaatiokehykselle, on hyvä pitää ainakin suunnittelun aikana mielessä muutkin mahdolliset erikoistukset. Tällöin voi variointitapojen ja ominaisuuksien toteutuksen sijoittelun hahmottaminen helpottua. Esimerkkinä toisesta erikoistuksesta voi käyttää vaikkapa tunnettua Game of Life:a [http://en.wikipedia.org/wiki/conway%27s_game_of_life] myös muiden erikoistusesimerkkien käyttäminen on sallittua (ja jopa toivottavaa). 4 Robottikehys Robottikehyksen tarkoituksena on tarjota erilaisiin robottisimulaatioihin liittyvä yhteinen toiminnallisuus. Robotin oletetaan koostuvan rungosta ja siihen liittyvistä mielivaltaisista varusteista. Robottien keskenäinen vuorovaikutus ja simulaation säännöt kuuluvat robottikehyksen erikoistuksen vastuulle. Kuten simulaatiokehyksenkin tapauksessa tässäkin pitää varsinkin suunnittelussa ottaa huomioon muidenkin kuin yhden ainoan
mahdollisen erikoistuksen vaatimukset. 5 Robottisota erikoistus Robottisota on peli, jossa pelaajat ohjelmoivat Java-kielellä robottinsa toimintalogiikan. Itse pelisimulaation, eli taistelun, aikana robotit toimivat täysin autonomisesti. Taistelun kulku on seuraava: 1. Sovelluksen käyttäjä sijoittaa haluamansa taisteluun osallistuvat robotit työkalupalkista taistelualueelle. 2. Taistelu alkaa. 3. Kukin robotti saa vuorollaan tehdä rajoitetun määrän toimenpiteitä. Toimenpiteiksi lasketaan tutkan käyttö, aseiden käyttö sekä kulkusuunnan ja nopeuden muuttaminen. 4. Kun vuoro on ohi, robotti liikahtaa askeleen eteenpäin kulkusuunnassaan. Askeleen pituus riippuu robotin nopeudesta. 5. Taistelu päättyy kun jäljellä on enää yksi robotti, joka on voittaja. Pelissä siis robottien taistellessa ohjelmoijat kilpailevat keskenään parhaimman tekoälyn ohjelmoimisesta robotilleen. Robotteja on oltava siten mahdollista ohjelmoida jälkikäteen ja ne ladataankin plugineina sovelluksen käynnistyessä jostakin tietystä hakemistosta. Robotit eroavat toisistaan tekoälynsä lisäksi siinä, että niillä voi olla myös erilainen taisteluvarustus. Varustukseen kuuluvat erilaiset aseet (mm. tykki, miina tai laser), suojat ja moottori. Kullakin varusteella on jokin teho, jonka mukaan sen vaikutus lasketaan; massa, mikä vaikuttaa liikenopeuteen huonontavasti; terveys, joka pienenee vastustajien osumista ja vaikuttaa varusteen tehoon sekä hinta, mikä luonnollisesti rajoittaa eri varusteiden hankkimista. Edellä mainittujen ominaisuuksien tarkat numeroarvot ja niiden tarkka vaikutus ovat ryhmän päätettävissä, kunhan niiden laskukaavat dokumentoidaan ja niiden avulla on mahdollista muodostaa luontevasti toimivia ja ominaisuuksistaan monipuolisesti erilaisia robotteja. Esimerkiksi hyvien suojien kanssa ei saa vahvaa moottoria tai aseistusta jne. Aseiden vaikutuksen laskemisessa voi käyttää esim. jotain lukemaa ( huipputehoa ) kun ammus on osunut kohdalle, maksimietäisyyttä joka on aseen vaikutuspiiri ja lineaarista interpolaatiota käyttäen laskea ammuksen osuman teho kullekin robotille. 5.1 Eri varusteiden vaikutus ja käyttö Taulukossa 1 on kuvattu tarkemmin eri varusteiden käyttö- ja vaikutustavat. Taulukko 1: Eri varusteiden kuvaukset Tutka Varuste Kuvaus Tutkalla pystyy keilaamaan halutun levyisen sektorin yhdellä kertaa. Keilauksen jälkeen tutka ilmoittaa kyseisellä sektorilla olleiden maalien etäisyydet. Mitä leveämpi sektori on, sen epätarkempi tulos on, mutta vuoron aikana pystyy keilaamaan leveämmän alueen. Tutkia voi olla erilaisia esim. kantaman ja (etäisyys)tarkkuuden perusteella.
Tykkiase Varuste Laserase (vapaaehtoinen) Miina-ase (vapaaehtoinen) Suojat Moottori Kuvaus Käyttö tapahtuu siten, että tykillä ammutaan johonkin suuntaan tietylle etäisyydelle. Osuman voimakkuus riippuu osumatarkkuudesta ja tykin tehosta. Laserilla ammutaan yksinkertaisesti haluttuun suuntaan. Tykkiin verrattuna laserilla tulee osua huomattavasti tarkemmin, mutta vaikutus kohteeseen on osuttaessa voimakkaampi. Miina jätetään yksinkertaisesti siihen paikkaan, missä robotti on. Miina laukeaa kun sen päältä kulkee ja vaikutus kohdistuu erityisesti robotin moottoriin. Suojilla on tehtävänä nimensä mukaisesti suojata robottia vihollisten osumilta. Mitä tehokkaampi suoja on kyseessä, niin sen enemmän se painaa. Suojia voi myös halutessaan kohdistaa tiettyihin osiin robotissa, kuten tykkiin tai moottoriin. Moottori on pakollinen varuste jokaisessa robotissa. Niitä tulee olla eri tehoisia ja eri painoisia valittavana. 5.2 Uuden robotin tekeminen Pelin pelaajan pitää kyetä toteuttamaan robotteja ilman muuta lähdekoodia, joten käytössä olevien robottien tunnistus ja luominen suoritettava dynaamisesti. Tähän sopii Java:n tukeman reflektion käyttö. Hyväksyttyyn suoritukseen riittää esimerkiksi, että erikoistus tutkii jonkin hakemiston (Javan pakkausten ja hakemistojen nimeämiskäytännön mukaan) ja käyttää sieltä löytämiään luokkia robotteina. Eli vaatimuksena on ettei mitään näistä luoda tyyliin new MyRobot();. Harjoitustyössä kuitenkin robotit saavat olla samassa hakemistohierarkiassa muun harjoitustyön kanssa. Robotti tehdään siten, että alustusvaiheessa robotti kokoaa saatavilla olevista varusteista haluamansa konfiguraation. Robottien pelialueelle sijoittelua varten työkalupalkkiin tulee pystyä kysymään robottityypeiltä niiden nimi ja mahdollisesti myös työkalupalkin ikoni. Pelisimulaatiota varten robotista tulee löytyä vuoron toimenpiteiden tekoon tarvittava tekoäly. Eri harjoitustyöryhmien robottien ei tarvitse toimia ristiin, vaan jokainen ryhmä saa määrittää nämä rajapinnat haluamikseen. 6 Yleisiä vaatimuksia Simulaation aikana robottien tila (vähintään energia) tulee näkyä tilanäkymässä ja haluttu robotti tulee olla tunnistettavissa Simulaatiomaailman koko tulee olla muutettavissa Lokiin tulostetaan simulaation aikana tärkeitä tapahtumia tyyliin Robotti sejase kuoli Havainnollistetaan aseiden käyttöä räjähdyksillä yms.
7 Vaadittava dokumentaatio 7.1 Välipalautus Annetun dokumenttipohjan mukaan seuraavat kohdat soveltaen: Vaatimukset järjestelmälle (luvut 1 ja 2) Yleinen kuvaus järjestelmästä ja sen vaatimuksista Variaatiovaatimukset, eli minkälaiseen variointiin toteutettavan kehyksen tulee varautua Omien kehysten arkkitehtuuri (luku 3 ja erityisesti sen kohta 3.1. Kohtaa 3.2 ei vaadita vielä tässä vaiheessa) Korkean tason arkkitehtuuri (luokkakaaviot ja sekvenssikaaviot mahdollisia) Käytetyt suunnittelumallit (mm. luokkakaavio) 7.2 Lopullinen palautus Korjattu/päivitetty versio välipalautuksessa annetusta dokumentista, johon on täydennetty loputkin dokumenttipohjan kohdat. 8 Aikataulu Ti 19.9 Harjoitustyön esittely luennolla Pe 6.10 Välipalautus klo 16.00 mennessä Viikko 41 Tarkastuspalaverit (tenttiviikko ainakin TTY:llä) Pe 8.12 Lopullinen palautus klo 16.00 mennessä 9 Alustavat arvosteluperusteet Tarkoituksena ei ole toteuttaa myyntivalmista peliä/kehystä, vaan pikemminkin hyvä pohja sellaiselle (esim. valtava erilaisten aseiden määrä ei tuo lisäpisteitä, jonkinlainen valinnanvara on silti vaatimuksena). Arvostelussa kiinnitetään erityisesti huomiota seuraaviin asioihin: Simulaatiokehyksen ja erikoistuksen arkkitehtuuri 30% Suunnittelumallien tunnistus ja hyödyntäminen 20% Dokumentaatio 30% Yleinen toimivuus, selkeys yms. 20% Hyväksytyt palautukset arvostellaan pistein 0 2 välipalautuksen ja 0 8 lopullisen palautuksen tapauksissa.
10 Palauttaminen 10.1 Välipalautus Välipalautuksessa palautetaan pelkästään alustava versio dokumentista luvun 10.2 lopun ohjeiden mukaan. 10.2 Lopullinen palautus Harjoitustyön lähdekoodit (EI binääreitä!) palautetaan zip paketissa sisältäen seuraavat hakemistot: Jos työ on tehty Eclipse-editoria käyttäen, tulee palautuspaketin sisältö olla seuraava: / /SimulationGUIFW.zip /SimulationFW.zip /RobotFW.zip /RobotWarGame.zip /readme.txt Zip-paketti sisältäen valmiina annetun toteutuksen Eclipseprojektin VAIN jos sitä on muutettu. Zip-paketti sisältäen oman simulaatiokehyksen toteutuksen Eclipse-projektin kokonaisuudessaan Zip-paketti sisältäen robottikehyksen toteutuksen Eclipseprojektin kokonaisuudessaan Zip-paketti sisältäen erikoistuksen Eclipse-projektin kokonaisuudessaan Tekstitiedosto, jossa on kirjattu ryhmäläisten nimet ja lyhyt käyttö/asennusohje Jos työ on tehty ilman Eclipse-editoria, silloin tarvitsee antaa myös ant-työkalun xmltiedosto(t). Tällöin palautuspaketin sisältö on seuraava: / /SimulationGUIFW/ /SimulationFW/ /RobotFW/ /RobotWarGame/ /readme.txt /build.xml Hakemisto sisältäen valmiina annetun toteutuksen Hakemisto sisältäen oman simulaatiokehyksen toteutuksen Hakemisto sisältäen robottikehyksen toteutuksen Hakemisto sisältäen erikoistuksen toteutuksen Tekstitiedosto, jossa on kirjattu ryhmäläisten nimet ja lyhyt käyttö/asennusohje Ant-scripti joka sisältää vähintään tehtävät compile ja run kääntämiseen ja erikoistuksen ajamiseen. Kummassakin tapauksessa palautuspaketti nimetään seuraavan mallin mukaisesti: ohar_2006-group<ryhmän numero>.zip eli esim. ohar_2006-group1.zip
Ryhmän numero annetaan välipalautuksen yhteydessä. Muistakaa testata ennen palautusta palautuspaketin (ja sen ohjeiden) toimivuus tyhjässä hakemistossa tai workspacessa! Lähdekoodin ja dokumentaation palauttaminen tapahtuu kurssin sivuilla mainittujen yliopistokohtaisten käytäntöjen mukaan.