Esterata¶
Kurssin harjoitustyö toteutetaan SensorTagilla pieni peli henkilökunnan tekemän pelimoottorin päälle
Opiskelijat voivat itse päättää pelin ulkoasun, eli onko se esim. autopeli vai estehyppely vai jokin muu..
Säännöt¶
Pelin ideana on päästä esterataa mahdollisimman pitkälle väistelemällä esteitä. Esterataa tulee pätkä (ts. viesti) kerrallaan langattomasti serveriltä.
Pelaajaa, oli hän auto tai juoksija tms, ohjataan kallistamalla SensorTagia ja lukemalla laitteen asento asentoanturilla.
- Pelaaja vaihtaa kaistaa: laitetta kallistetaan vasen / oikea
- Pelaaja hyppää esteen yli: laitetta kallistetaan taaksepäin & eteenpäin
Jos pelaaja törmää esteeseen, peli päättyy.
Ruudulla tulee näkyä kerrallaan pätkä rataa (kts. alla), jotta pelaaja ehtii reagoida siihen ajoissa.
Tehtävänä on siis luoda peli, joka noudattaa vähintään ym. sääntöjä serverillä olevan pelimoottorin päällä. Nämä säännöt eivät ole kattavia ja tulkintatilanteet pitää opiskelijoiden itse ratkaista omassa pelissään. Henkilökunta ei voi sanoa miten missäkin pelissä säännöt tulkitaan.
Annetut speksit ovat tarkoitusella hyvin laveat, eli annetaan opiskelijoille mahdollisuuksia toteuttaa pelikohtaisia extrajuttuja niiden päälle.
Teknisiä speksejä¶
Menu-valikko¶
Pelissä tulee olla käynnistyessä menu-valikko, jossa on ainakin seuraavat toiminnot:
- Asentoanturin kalibrointi (ohjeet alempana)
- Pelin aloitus
Ruutu¶
Pelaaja ja esterata voi näkyä ruudulla eri tavoin:
- Kirjoitusmerkkeinä
- Pikseligrafiikkana (Lisäpisteitä)
- Animaatioina (Paljon lisäpisteitä!)
Ruudulla tulisi näkyä 5s pätkä rataa kerrallaan.
Ohjelman tulee vastaanottaa langattomia viestejä, joissa on peliradan lisäksi tilaa lyhyelle tekstimuotoiselle viestille. Ruudun alareunaan pitää varata yksi rivi viestittelyä varten.
- Viestit ovat ASCII-muotoista tekstiä ja pituudeltaan max. 8 merkkiä
Pelissä on mahdollista peliaikana lähettää serverin kautta viestejä toisille pelaajille. Esimerkiksi, jos on tekemässä ennätysaikaa.
- Etukäteen määritellyn lyhyen viestin lähetys painonapista serverille. Serverin osoite on
0x1234
.
Pelimoottori¶
Henkilökunnan toteuttama serveri syöttää langattomana viestivirtana esterataa eetteriin. Aina sekunnin välein lähetetään uusi pala esterataa.
Jokaisessa palassa on satunnaisesti esteitä:
- Kiinteästi jompi kumpi kaista
- Kiinteästi molemmat kaistat
- Liikkuvia esteitä molempiin suuntiin. Serveri huolehtii liikkuvan esteen paikasta radalla.
Esterata tulee siis serveriltä viestissä, jonka sisältö on yksi tavu. Viestissä on lisäksi 8 merkin mittainen merkkijono, ts. ASCII-muotoinen viesti. Tämä viesti voi olla myös tyhjä. Näin ollen jokainen lähetetty viesti on yhdeksän merkin mittainen.
Tavussa esterata on enemmän tai vähemmän satunnaista. Esterata lähetetään koodattuna yhden tavun kahdeksaan bittiin seuraavasti:
- Tavu on jaettu kahteen 4:n bitin osaan, vasempaan ja oikeaan puoleen.
- Sisimmät bitit (järjestysnumerot 4. ja 3.) vastaavat esteradan kiinteitä esteitä seuraavasti:
- 0, ei estettä
- 1, este
- Bitit 5. ja 2. vastaavat liikkuvia esteitä radalla (liikkeellä)
- 0, ei estettä
- 1, este
- Bitit 6. ja 1. vastaavat liikkuvia esteitä radan reunassa (lähtemässä liikkeelle)
- 0, ei estettä
- 1, este
- Bitit 7. ja 0. ovat extroja, joihin voitte toteuttaa omaa toiminnallisuutta (Lisäpisteitä)
Liikkuvien esteiden kanssa käytetään eri piirrosmerkkiä kuin paikallaanpysyvien.
Asentoanturi¶
Asentoanturi on MPU9250. Luentomateriaalista Oheislaitteet löytyy koodiesimerkki miten sitä käytetään.
Kalibrointi¶
Asentoanturi tulee kalibroida seuraavasti:
- Pidetään sensoria liikkumatta tasaisella alustalla muutaman sekunnin ajan
- Kerätään samalla asentoanturin sensoridataa, josta saadaan oletusarvot
- Seuraavaksi kallistetaan laitetta vasen & oikea ja eteen & taakse eri akselien yli
- Asentoanturin sensoridatan arvoista saadaan asentoarvot pelaajan ohjaamiseen
Näitä arvoja sitten tulkitaan pelin aikana asentoanturin datasta ja liikutellaan pelaajaa ruudulla vastaavasti.
Kalibrointi todennäköisesti tarvitsee tehdä vain kerran, niin että löytää yhdet sopivat arvot.
Lisäominaisuuksia¶
Peliin tulee toteuttaa yllämainitun lisäksi ainakin yksi lisäominaisuus joka hyödyntää jotain laitteen sensoria.
Useammasta lisäominaisuudesta saa lisäpisteitä. Esimerkiksi:
- Lämpötilan mukaan rata voi olla liukas
- Valaistussensorin arvon mukaan voi säätää näkyvyyttä..
- Magnetometrillä (rele, esimerkki tulossa) ohjautuvuus muuttuu..
- Pistämällä laitteen ledi päälle, pelaaja saa lampun käyttöönsä ja näkee pidemmälle
- Highscore-taulu
- ...
Harjoitustyön suunnitelma¶
Työparin tulee osana harjoitustyötä tehdä toteutuksesta ensin oma suunnitelma. Suunnitelmia ei näytetä julkisesti muille, tarkoitus on että autatte itseänne lopputyön tekemisessä.
Harjoitustyön toteutusta kannattaa lähteä purkamaan Rakenteellinen ohjelmointi-lisämateriaalin avulla.
Suunnitelman sisältö¶
Suunnitelmassa ei tarvitse mennä kovinkaan alas abstraktiotasolla, asiat voi kertoa ranskalaisilla viivoilla lyhyesti. Suunnitelman koko max yksi a4. Suunnitelma ei ole mitenkään sitova, ts. todennäköisesti se elää työn toteutuksen edetessä.
Tästä linkistä Esimerkkisuunnitelma.
Sisältö:
- Hahmotelma mitä laitteen näytöllä näkyy sekä mitä oheislaitteita käytetään (painonapit, sensorit, jne)
- Lyhyesti kuvattuna mitä toiminnallisuutta ohjelmassa on: nimet eivät riitä, oleellista on mitä missäkin toiminnallisuudessa tehdään
- Taskit, omat funktiot, ...
- Tietorakenteet, vakiot, globaalit muuttujat, ...
- Tilakone, joka toteuttaa harjoitustyön
- Helpoin esittää kuvana
- Tilakone riittää ohjelman päätasolla, alemmille abstraktiotasoille ei tarvitse mennä
- Arvio siitä, mitkä osa-alueet harjoitustyössä ovat työläitä (omasta mielestä)
Suunnitelman palautus¶
Suunnitelman palautus viimeistään 15.10., jolloin siitä saa 5 pistettä harjoitustyön pistemäärään. Suunnitelma on jokatapauksessa pakollinen osa harjoitustyötä, mutta pisteet saa kun palauttaa ajoissa. Riittää, että toinen työparista sen palauttaa. Molempien nimet on oltava suunnitelmassa. Kurssin henkilökunta käy suunnitelman läpi ja lähettää siitä tarvittaessa palautetta.
HUOM! Lopputyön toteutuksen saa toki aloittaa ennen suunnitelman esittelyä!
HUOM! Suunnitelmia saatetaan käyttää myöhemmin akateemisessa tutkimuksessa lähdemateriaalina, tällöin ne tehdään nimettömiksi ja tunnistamattomiksi. Voitte halutessanne kieltää oman suunnitelman käytön tutkimusmateriaalina, mainitsemalla siitä suunnitelmassa.
Vinkkejä lopputyöhön¶
Yleistä¶
Yllättävästi moni asia on kerrottu ja moneen kysymykseen vastattu luentomateriaalissa. Siihen kannattaa perehtyä kunnolla! Vaikka tämä onkin ohjelmointikurssi, niin manuaali pitää silti lukea..
Harjoitustyön toteutusta kannattaa lähteä purkamaan Rakenteellinen ohjelmointi-lisämateriaalin avulla.
- Hyvin suunniteltu on 90% tehty!
- Pahin virhe mitä voi tehdä, on jättää asiat viimetinkaan.
- ..aloittelija ei varmasti saa työtä viikossa tehdyksi!
- Kannattaa vilkaIsta mitä kaikkea toiminnallisuutta standardikirjastot ja RTOS:n eri kirjastot tarjoavat valmiiksi. Nämä kirjastot helpottavat ohjelmointia suuresti.
- Koodatessa voi olla hyödyllistä koodata vaikeat kohdat ensin pc:llä. Myös algoritmien tms testaaminen PC:ssä voi olla helpompaa. Sitten kun koodi on toimivaa, sen voi siirtää laitteelle.
- Kannattaa käyttää toistorakenteissa, ehtolauseissa yms välitulostuksia, joissa tulostaa (vaikkapa) konsoli-ikkunalle (System_printf) muuttujien arvoja tms oleellista tietoa. Tämä nopeuttaa merkittävästi virheiden metsästystä ohjelmasta. Myös funktioiden sisällä voi olla välitulokstuksia, ne auttavat löytämään loogisia virheitä ohjelman suoritusjärjestyksessä.
Tärkeää on muistaa, että jos jäätte jumiin, käykää harjoituksissa kysymässä!! Tässä jos jossain ei kannata viivytellä.
Tehtäväkohtaisia vinkkejä¶
- Pelilauta kannattaa ajattella
5 x n
taulukkona, jonne rataviestit puretaan - Taulukon voi sitten kerralla tulostaa ruudulle
- Mitä tiloja peli tarvitsee? Esimerkiksi
- Menu / kalibrointi / peli
- Pelaaja: vasen / oikea kaista / ilmassa
- ..
- Lisää tulossa..
Toteutus¶
- Toteutusta kannattaa lähteä miettimään suunnitelman ja oman tilakoneen pohjalta. Tilakoneen eri tilat voidaan toteuttaa funktioina.
- Tehtävästä on erotettavissa selkeitä kokonaisuuksia: viestin vastaanotto, pelaajan ohjaus, ruudulle piirtäminen, jne. Nämä voi (ja kannattaa) suunnitelman pohjalta toteuttaa erillisinä moduleina.
- Viestien vastaanottoa voi testata satunnaisviesteillä (katso
rand()
jasrand()
) funktiot
Arvostelu¶
Lopputyön pistemäärä muodostaa 50% kurssin arvosanasta. Toiset 50% tulevat siis Lovelacen C-kielen harjoitustehtävistä.
Arvosanaan 1 riittää, että pelistä on minimissään toimiva versio ja kasassa on 50% yhteenlasketuista maksimipisteistä. Myös molemmista osa-alueista (C-kielen harjoitukset ja harjoitustyö) tulee olla suorituksia.
Pisteytys¶
- Suunnitelma: 0 / 5p
- Vaadittu perustoiminnallisuus pelissä: 10p
- Koodissa isoja bugeja tai puuttuu toiminnallisuus: -2p per bugi/puute
- Ryhmän kertoessa kuinka bugi/puute korjattaisiin : -1p
- Koodin rakenne ja luettavuus: 0-5p
- Lisäominaisuuksia 0-10p
Koodin rakenne ja luettavuus (5p)¶
- Tilakone on toteutettu vähintään luentomateriaalissa kuvatulla tavalla (2p)
- Koodin rakenne on järkevä ja modulaarinen (funktioita käytetty): 1p
- Koodissa on kuvaavia funktioiden ja muuttujien nimiä: 1p
- Koodi on sisennetty siististi ja järkevästi kommentoitu: 1p
Lisäpisteitä (max 10p)¶
- Muuta grafiikkaa ja/tai animaatioita ruudulla (1-2p)
- Laitteen eri sensorien avulla lisäominaisuuksia (2p per ominaisuus)
- Pelaajan aktivointi (1p per ominaisuus)
- Kaiutin / ledit..
- Kannustavia viestejä alareunan viestikenttään
- Muita omia ideoita, (1-2p per toiminto)
Lopputyön palautus¶
Palautus tehdään ryhmittäin palautustilaisuudessa Marraskuun puolivälissä Tarkemmat ajankohdat ilmoitetaan myöhemnmin.
- Varaamme (samoin kuin laboratorioharjoituksessa) useita eri palautusaikoja. Näitä ei tarvitse ryhmien varata, voi tulla vapaasti mihin tahansa tilaisuuteen.
- Tarkistus vie noin 15min per ryhmä
- Ryhmän molempien opiskelijoiden oltava paikalla
- Poissaoleva ei saa arvosanaa, ennenkuin on selvittänyt osuutensa työhön
- Ohjelman toiminnallisuus ja koodi esitellään assistentille. Assistentti kyselee toteutuksesta.
- Lopputyöstä saatu pistemäärä kerrotaan ryhmälle.
Viimeistään palautustilaisuudessa harjoitustyön koodi pitää palauttaa allaolevaan tehtävään:
FAQ¶
- Voiko työn tehdä yksin?
- Voi, syystä kuten esim. käy töissä, asuu muualla kuin Oulussa, tms. Työmäärä on sitten isompi ja langattoman tiedonsiirron toteutuksessa voi tulla hankaluuksia.
- Pyrimme mahdollisuuksien mukaan auttamaan myös ulkopaikkakuntalaisia lopputyön suorituksessa, olkaa ajoissa yhteydessä henkilökuntaan sähköpostitse. Ulkopaikkakuntalaisilta vaaditaan kuitenkin ihan täsmälleen sama kurssisuoritus, joten he joutuvat viimeistelemään työn paikanpäällä.
- Voiko työn tehdä isommassa ryhmässä kuin pari?
- Voi, kun ryhmän koko on max 3 opiskelijaa. Mutta ryhmän tulee toteuttaa lopputyöhön lisäominaisuuksia 5 pisteen verran.
- Saako jutella kaverin kanssa?
- Työstä saa tietenkin keskustella harjoituksissa jne, mutta joskun kaksi ryhmää palauttaa saman koodin, saatatte syyllistyä plagiointiin. Tästä syystä yhteistyötä tehneet ryhmät tulee ilmoittaa koodin kommenteissa tms.
- Raja menee siinä, että tehtävästä saa keskustella, mutta koodi pitää kuitenkin itse tehdä!
- Voiko työn palauttaa myöhässä?
- Ei kannata, vähennämme pisteitä (rankalla kädellä).
- Jos työ on myöhästymässä perustellusta syystä, olkaa ajoissa etukäteen yhteydessä henkilökuntaan, niin katsotaan tilanne.
- Saako jonkun muun (tai netistä löytynyttä) koodia käyttää?
- Samalle kurssille osallistuvien koodia ei saa käyttää, vaikka ilmoittaisi lähteenkin. Ts. toisten lopputyöstä koodia ei saa kopioida omaan työhön.
- Muutoin saa, kunhan ilmoittaa mistä koodi on haettu: www-sivu tms, muutoin saatatte syyllistyä plagiointiin.
- Mites tuo plagiointi?
- Yliopistolla on ohjeet miten plagioinnin kanssa menetellään. Noudatamme niitä.
Lopuksi¶
Kaikenkaikkiaan, kurssin lopputyössä on kyse kolmesta asiasta
- Esterataviestin tulkitseminen ja näytölle piirtäminen
- Sensoridatan lukeminen pelaajan ohjaamiseksi
- Pelilogiikkan toteutus, joka tarkistaa ettei törmätty esteeseen
Harjoituksissa kannattaa poiketa tekemässä lopputyötä assistenttien avustuksella.
Harjoitustyön toteutusta kannattaa lähteä purkamaan Rakenteellinen ohjelmointi-lisämateriaalin avulla.