Kurssin viimeisimmän version löydät täältä: O1: 2024
- CS-A1110
- Kierros 12
- Luku 12.2: Robottiturnaus
Luku 12.2: 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.
Oheismoduulit: RobotTribes.
Ohjelmointitehtävä: oma robottiheimo
Tämä luku muodostuu yhdestä ohjelmointitehtävästä. Se on suoraa jatkoa luvun 11.2 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, jamytribe.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 11.2.
- 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 yhteen RobotTribes-moduulin 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 heti kierroksen sulkeuduttua. 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ä.
Tulokset ja palkinnot
Julkaisemme turnauksen tulokset pian kahdennentoista kierroksen määräajan jälkeen. Kehittelemme jotakin pieniä palkintoja parhaiden robottiheimojen laatijoille.
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ä:
- luku 12.3, jossa on täysin vapaaehtoista lisämateriaalia Swing-käyttöliittymäkirjastosta,
- pian 12. kierroksen määräajan jälkeen avautuva 13. kierros. Tuolla kierrokselle ei ole tehtäviä vaan pakollinen kurssipalautekysely, johon on vastattava viimeistään 16.12.2020 luvussa 13.1.
- Lukuna 13.0 julkaistaan kurssin päättävä viikkokooste, jonne tulee myös tietoa robottiturnauksista, suosikkipeleistä, jatkokursseista, jne.
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, Joonatan Honkamaa, Jaakko Kantojärvi, Niklas Kröger, Teemu Lehtinen, Strasdosky Otewa, 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 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 ja Juha Sorva. 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. Pääkehittäjänä on tällä hetkellä Markku Riekkinen, jonka lisäksi A+:aa 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 ovat luoneet Nikolai Denissov, Olli Kiljunen ja Nikolas Drosdek yhteistyössä Juha Sorvan, Otto Seppälän, Arto Hellaksen ja muiden 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ä.
Viljami Nurminen ja Rune Pönni kehittivät RoboSpeakiin lisäkäskyjä opiskelijapalautteen perusteella.
Teemu Sirkiä laati robottiturnauksen ajamiseen käytetyn koodin. Joonatan Honkamaa ja Otto Seppälä ehdottivat turnausta tehostavan parannuksen heimobottien koodiin.