Tämä kurssi on jo päättynyt.

Luku 12.1: Robottiturnaus

Tästä sivusta:

Pääkysymyksiä: Millainen robottiheimo pärjäisi parhaiten?

Mitä käsitellään? Oman algoritmin suunnittelua. Etäisesti konekieltä muistuttavalla kielellä ohjelmoiminen.

Mitä tehdään? Ohjelmoidaan.

Suuntaa antava vaativuusarvio: Riippuu siitä, kuinka paljon haluaa tehtävään panostaa.

Pistearvo: C100. Vähintään 50 saa osallistumalla, toiset 50 turnausmenestyksen mukaan.

Oheisprojektit: RobotTribes.

../_images/robot_fight.png

Ohjelmointitehtävä: oma robottiheimo

Tämä luku muodostuu yhdestä ohjelmointitehtävästä. Se on suoraa jatkoa luvun 11.3 tehtävälle.

Tehtävänanto

Laadi oma robottiheimo RoboSpeak-kielellä. Koeta tehdä siitä sellainen, että se pärjää mahdollisimman hyvin taistelussa muita heimoja vastaan.

Ohjeita ja vinkkejä

Sivun lopussa on lomake, jolla voit lähettää A+:aan kaksi tiedostoa:

  • mytribe.tribe, jossa on heimosi RoboSpeak-ohjelma, ja
  • mytribe.png, jossa on kuva, jota haluat käyttää heimon jäsenten kuvana.

Tässä tehtävässä et siis palauta Scala-koodia.

  • Yleisohje omien koodi- ja kuvatiedostojen sijoittamisesta projektiin löytyy luvusta 11.3.
  • Voit käyttää jotakin annetuista kuvatiedostoista heimon kuvana tai käyttää jotain itse valitsemaasi tai tekemääsi kuvatiedostoa.
  • Kirjoita mielellään tiedoston alkuun lyhyt juonto siitä, millainen heimo on kysessä. Voit kirjoittaa ohjelmaasi myös muita selventäviä kommentteja, mutta tämä ei ole ehdoton vaatimus.
  • RoboSpeak-kieltä on käytettävä annetussa muodossa. Omia lisäyksiä kieleen ei saa tässä käyttää.
  • Oman heimon ei ole syytä olla muutamaa kymmentä kilotavua suurempi. Turnauksessa (ks. alta) yhden vuoron aikana suoritetaan enintään 1000 käskyä.
  • RoboSpeak-koodaus voi olla karvasta. Sori! ;-)

Pisteytyksestä

A+ testaa automaattisesti ainoastaan sen, toimiiko palauttamasi RoboSpeak-ohjelma lainkaan yhteen RobotTribes-projektin kanssa. Tämä alustava testi on läpäistävä, jotta voit saada tehtävästä pisteitä. Jos ohjelma ei ole ajettavissa tai kaatuu tai päätyy ikuiseen silmukkaan tämän alkutestin aikana, A+ antaa palautuksesta nolla pistettä. Muussa tapauksessa A+ antaa palautuksesta yhden (1) pisteen merkiksi alkutestin läpäisystä. Tämä on kuitenkin vasta tehtävän varsinaisen arvostelun esipuhe.

Kurssin assistentit arvioivat kaikki alkutestin läpäisseet ohjelmat välittömästi kierroksen sulkeutumisen jälkeen. Jos assistentti yleensäkään hyväksyy palautetun ohjelman, siitä saa vähintään 50 pistettä. Kaikki sellaiset palautukset hyväksytään, joista käy ilmi, että ainakin on yritetty laatia oma uudenlainen robottiheimo. Tuotoksen ei tarvitse olla hieno tai muhkea, mutta sen täytyy olla jotain itse laadittua.

Yksi kurssin assistenteista järjestää turnauksen kaikkien hyväksytysti palautettujen heimojen välillä. Palautuksen lopullinen arvosana väliltä 50–100 pistettä määräytyy sen mukaan, miten heimosi pärjää tässä turnauksessa.

Tehtävän pisteet tulevat A+:aan mahdollisimman pian kierroksen sulkeutumisen jälkeen.

Heimoturnaus

Ottelut ja erät

Kunkin parin/opiskelijan palauttama heimo taistelee yhden "ottelun" jokaisen muun palauttajan heimoa vastaan. Kukin ottelu on sarja eriä. Erän ainesosat ovat:

  • 20 kertaa 20 -ruutuinen robottimaailma, jossa on kymmenen seinäruutua sattumanvaraisissa paikoissa.
  • Kaksi robottiheimoa, joissa kummassakin on aluksi kuusi robottia, jotka aloittavat sattumanvaraisista paikoista katsoen sattumanvaraisiin suuntiin.
  • Taistelevien heimojen lisäksi 30 rauhanomaista pupuheimon robottia (ks. tiedosto bunny.tribe) sattumanvaraisissa paikoissa, kuitenkin niin, että ne eivät ole taistelevien robottien kanssa suoraan viereisessä ruudussa.

Asetukset siis ovat juuri ne, joita käytetään valittaessa ohjelman valikosta Tribal ‣ Basic Duel.

Jos toinen heimo onnistuu kokonaan tuhoamaan vastustajansa, se voittaa erän. Usein käy niin, että kumpikaan heimo ei kokonaan pyyhi toista kartalta. Tällöin se heimo, jossa on enemmän robotteja, voittaa erän, kun suuri määrä kierroksia on pelattu.

Enemmän eriä voittanut heimo voittaa ottelun. Eniten otteluita (eli eniten muiden opiskelijoiden heimoja) voittanut heimo voittaa koko turnauksen. Mitä isompi määrä voitettuja otteluita, sitä isompi pistemäärä tehtävästä.

Finaalit ja palkinnot

Tavoitteenamme on, että jo kurssin päätösluennolla ke 12.12.2018 klo 15–17 (sali T1, Tietotekniikan talo) päästäisiin esittelemään heimoturnauksen tuloksia. Tällöin järjestetään pudotuspelimuotoinen finaalivaihe muutaman turnauksessa parhaiten pärjänneen heimon kesken.

Pudotuspelit järjestetään puhtaasti viihdemielessä. Ne eivät vaikuta tehtävän pisteytykseen.

Kehittelemme jotakin pieniä palkintoja pudotuspeleihin selvinneiden robottiheimojen laatijoille.

Päätösluento on lähes välittömästi kierroksen määräajan jälkeen. Jos tulokset jostain syystä viivästyvät eivätkä ehdi luennolle, finaalivaihe julkaistaan videona A+:ssa.

Palauttaminen

A+ esittää tässä kohdassa tehtävän palautuslomakkeen.

Palaute

Huomaathan, että tämä on henkilökohtainen osio! Vaikka olisit tehnyt lukuun liittyvät tehtävät parin kanssa, täytä palautelomake itse.

No, mitä nyt sitten?

Ohjelmointi 1 -kurssi päättyy tähän... melkein. Jäljellä on vielä:

  • luvut 12.2 ja 12.3, joissa on täysin vapaaehtoista lisämateriaalia tiedostoista ja Swing-käyttöliittymäkirjastosta.
  • heti 12. kierroksen sulkeuduttua järjestettävä viimeinen luento robottiturnauksineen, ja
  • pian luennon jälkeen avautuva 13. kierros. Tuolla kierrokselle tulee ei ole tehtäviä vaan pakollinen kurssipalautekysely, johon on vastattava viimeistään 19.12.2018 luvussa 13.1. Lisäksi lukuna 13.0 julkaistaan kurssin päättävä viikkokoosteentapainen.

Tämä oppimateriaali jatkuu kyllä 14. kierrokselle ja siitä eteenkinpäin. Nuo kierrokset liittyvät kurssiin Ohjelmointistudio 2.

Tekijät

Tämän oppimateriaalin kehitystyössä on käytetty apuna tuhansilta opiskelijoilta kerättyä palautetta. Kiitos!

Kierrokset 1–13 ja niihin liittyvät tehtävät ja viikkokoosteet on laatinut Juha Sorva.

Kierrokset 14–20 on laatinut Otto Seppälä. Ne eivät ole julki syksyllä, mutta julkaistaan ennen kuin määräajat lähestyvät.

Liitesivut (sanasto, Scala-kooste, usein kysytyt kysymykset jne.) on kirjoittanut Juha Sorva sikäli kuin sivulla ei ole toisin mainittu.

Tehtävien automaattisen arvioinnin ovat toteuttaneet Riku Autio, Jaakko Kantojärvi, Teemu Lehtinen, Timi Seppälä, Teemu Sirkiä ja Aleksi Vartiainen.

Lukujen alkuja koristavat kuvat ja muut vastaavat kuvituskuvat on piirtänyt Christina Lassheikki.

Yksityiskohtaiset animaatiot Scala-ohjelmien suorituksen vaiheista ovat suunnitelleet Juha Sorva ja Teemu Sirkiä. Niiden teknisen toteutuksen ovat tehneet Teemu Sirkiä ja Riku Autio käyttäen Teemun toteuttamia Jsvee- ja Kelmu-työkaluja.

Muut diagrammit ja materiaaliin upotetut vuorovaikutteiset esitykset on laatinut Juha Sorva.

O1Library-ohjelmakirjaston ovat kehittäneet Aleksi Lukkarinen ja Juha Sorva. Useat sen keskeisistä osista tukeutuvat Aleksin SMCL-kirjastoon.

Opetustapa, jossa käytämme O1Libraryn työkaluja (kuten Pic) yksinkertaiseen graafiseen ohjelmointiin on saanut vaikutteita tekijöiden Flatt, Felleisen, Findler ja Krishnamurthi oppikirjasta How to Design Programs sekä Stephen Blochin oppikirjasta Picturing Programs.

Oppimisalusta A+ on luotu Aallon LeTech-tutkimusryhmässä pitkälti opiskelijavoimin. Pääkehittäjänä toimii tällä hetkellä Jaakko Kantojärvi, jonka lisäksi järjestelmää kehittävät useat tietotekniikan ja informaatioverkostojen opiskelijat.

Kurssin tämänhetkinen henkilökunta on kerrottu luvussa 1.1.

Lisäkiitokset tähän lukuun

Luvussa käytetty ajatus ruudukolla keskenään taistelevista ohjelmoitavista "lajeista" on pummittu Nick Parlanten suunnittelemasta evoluutioharjoitustehtävästä.

Viljami Nurminen ja Rune Pönni kehittivät RoboSpeakiin lisäkäskyjä opiskelijapalautteen perusteella.

../_images/imho12.png
Palautusta lähetetään...