Luku 12.3: Robottiturnaus

../_images/robot_fight.png

Ohjelmointitehtävä: oma robottiheimo

Tämä luku muodostuu yhdestä ohjelmointitehtävästä. Se on suoraa jatkoa luvun 10.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ä

Tehtävän palautukseen kuuluu kaksi tiedostoa:

  • mytribe.tribe, jossa on heimosi RoboSpeak-ohjelma

  • 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 moduuliin löytyy luvusta 10.3.

  • Voit käyttää jotakin annetuista kuvatiedostoista heimon kuvana tai käyttää jotain itse valitsemaasi tai tekemääsi kuvatiedostoa.

  • Kirjoita 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 heimo ei tule olla muutamaa kymmentä kilotavua suurempi. Turnauksessa (ks. alta) yhden vuoron aikana suoritetaan enintään 1000 käskyä.

  • Palauttaessasi A+ testaa, toimiiko RoboSpeak-ohjelmasi yhteen RobotTribes-moduulin kanssa. Tämä alustava testi on läpäistävä, jotta pääset mukaan turnaukseen. Jos ohjelmasi ei ole ajettavissa tai kaatuu tai päätyy ikuiseen silmukkaan tämän alkutestin aikana, A+ kertoo.

  • Testatessasi saatat haluta määrätä tietyn satunnaissiemenen, jolloit toistaa heimokamppailuja samoista lähtöasetelmistä ohjelman eri käynnistyskerroilla. Se käy muokkaamalla util.scalaa.

  • RoboSpeak-koodaus voi olla karvasta. Sori! ;-)

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, kun valitset ohjelman valikosta Tribal → Basic Duel.

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

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

Virallinen palautus ja turnaukseen osallistuminen

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

Tulokset

Turnauksen tulokset julkaistaan pian kahdennentoista kierroksen määräajan jälkeen. Sen tekee Ohjelmointistudio 1 -kurssi. Linkki tuloksiin tulee myös O1:n päättävään viikkokoosteeseen lukuun 13.0. Parhaiden robottiheimojen laatijoille on luvassa pieniä palkintoja, olivatpa he studiokurssilaisia tai eivät.

Finaalit ja palkinnot

Ellei yllätyksiä ilmene, esitellään heimoturnauksen tuloksia jo kurssin päätösluennon yhteydessä: ma 9.12.2024 klo 14, C-sali, Kandikeskus (Otakaari 1). Samaan syssyyn järjestetään myös 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 pieniä palkintoja pudotuspeleihin selvinneiden robottiheimojen laatijoille.

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

Palaute

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

Tekijät

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

Materiaalin luvut tehtävineen ja viikkokoosteineen on laatinut Juha Sorva.

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: (aakkosjärjestyksessä) Riku Autio, Nikolas Drosdek, Kaisa Ek, Joonatan Honkamaa, Antti Immonen, Jaakko Kantojärvi, Onni Komulainen, Niklas Kröger, Kalle Laitinen, Teemu Lehtinen, Mikael Lenander, Ilona Ma, Jaakko Nakaza, Strasdosky Otewa, Timi Seppälä, Teemu Sirkiä, Joel Toppinen, Anna Valldeoriola Cardó ja Aleksi Vartiainen.

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

Yksityiskohtaiset animaatiot Scala-ohjelmien suorituksen vaiheista suunnittelivat Juha Sorva ja Teemu Sirkiä. Teemu Sirkiä ja Riku Autio toteuttivat ne apunaan Teemun aiemmin rakentamat työkalut Jsvee ja Kelmu.

Muut diagrammit ja materiaaliin upotetut vuorovaikutteiset esitykset laati Juha Sorva.

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

Tapa, jolla 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+ luotiin alun perin Aallon LeTech-tutkimusryhmässä pitkälti opiskelijavoimin. Nykyään tätä avoimen lähdekoodin projektia kehittää Tietotekniikan laitoksen opetusteknologiatiimi ja tarjoaa palveluna laitoksen IT-tuki; sitä ovat kehittäneet kymmenet Aallon opiskelijat ja muut.

A+ Courses -lisäosa, joka tukee A+:aa ja O1-kurssia IntelliJ-ohjelmointiympäristössä, on toinen avoin projekti. Sen suunnitteluun ja toteutukseen on osallistunut useita opiskelijoita yhteistyössä O1-kurssin opettajien kanssa.

Kurssin tämänhetkinen henkilökunta löytyy luvusta 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ä.

Onni Miettinen, Niklas Koskela, Viljami Nurminen ja Rune Pönni laativat RoboSpeakiin lisäkäskyjä ja muutenkin paransivat tehtävää mm. opiskelijapalautteen perusteella.

Teemu Sirkiä laati robottiturnauksen ajamiseen käytetyn koodin. Joonatan Honkamaa ja Otto Seppälä ehdottivat turnausta tehostavan parannuksen heimobottien koodiin.

a drop of ink
Palautusta lähetetään...