Luku 11.1: Ihan oma tekstipeli

../_images/person07.png

Tehtävänanto

Unohda se metsä, kaukosäätimet, paristot ja muut annetun pelimaailman osat ja tee kokonaan uusi tekstiseikkailu. Uuden pelin aiheena voi olla ihan mitä vain. Päästä tukka irti ja luo!

Tässä joitain ideoita suunnittelun pohjaksi. Oma idea on luultavasti vähintään yhtä hyvä kuin listasta poimittu.

  • Klassinen seikkailu. Esimerkiksi: pelaaja seikkailee vanhassa rauniolinnassa tai tutkii muinaista pyramidia. Pelin alueet ovat huoneita, käytäviä tms.

  • Moderni seikkailu. Esimerkiksi: hahmo on fuksi, jolle on annettu tehtäväksi tehdä sitä-tai-tätä. Pelin alueet ovat korkeakoulun tai kampuksen taloja ja huoneita.

  • Mysteeriseikkailu. Pelaajan täytyy löytää jotain kadonnutta, selvittää murha tms.

  • Toimintaseikkailu. Esimerkiksi: pelaajan täytyy paeta jostain.

  • Kirjaan tai leffaan perustuva seikkailu. Esimerkiksi: hahmo on Liisa Ihmemaassa, kapteeni Ahab, Clarice Starling, Marjane Satrapi, Randle McMurphy, Dolores Abernathy tai joku muu.

  • Epäinhimillinen seikkailu. Esimerkiksi: hahmo on koira, hyönteinen, robotti, mikrobi, planeettoja syövä avaruusolento, älykäs kumkvatti tms.

  • Jotain ihan muuta. Mitä tahansa, mistä saa pelin aikaan. Esimerkiksi: pelin alueet eivät olekaan spatiaalisia alueita vaan mielentiloja, elämänvaiheita tai mitä vaan.

ChatGPT on sallittu teemoituksessa. Kurssin yleisestä linjauksesta poiketen tässä tehtävässä on luvallista käyttää ChatGPT:tä tai vastaavia "tekoälytyökaluja" apuna pelin teeman hahmottelussa tai pelin sisältämien tekstien tuottamisessa. Kirjoita silti tässäkin tehtävässä ohjelmakoodisi itse, ei ChatGPT:llä.

Tarkemmat vaatimukset

Pelillä pitää olla seuraavat ominaisuudet:

  • Alueita, joihin pelaaja voi mennä.

  • Haasteita tai pulmia, joista pelaajan täytyy jotenkin selvitä läpäistäkseen pelin.

  • Vähintään muutama uusi komento, joita pelaaja voi antaa ja jotka tekevät jotain hyödyllistä.

  • Uusi voittoehto, joka pelaajan täytyy saavuttaa läpäistäkseen pelin. Pelin läpäisyn täytyy edellyttää jotain muutakin kuin vain kävelemistä tietylle aluelle. Voit myös lisätä peliin "häviämisehtoja" (esim. pelaajahahmo kuolee), mutta se ei ole pakollista.

  • Tervehdysteksti, joka kertoo mistä pelissä on kysymys ja mitä pelaajan on tarkoitus tehdä. Jos haluat, että pelin tarkoitus/voittoehto selviää vasta pelin aikana, niin sekin on sallittua, kunhan asian selvittäminen ei vaadi pelaajalta kohtuutonta vaivaa.

  • help-komento, joka tulostaa näytölle ohjeita pelin pelaamiseen. Kuvaile tässä ainakin lisäämäsi uudet komennot.

  • Jompikumpi tai molemmat näistä kahdesta:

    1. Komento muotoa use itemname, jolla pelaaja voi käyttää esinettä. Käyttämisen seuraukset riippuvat esineestä.

    2. Muita henkilöitä tai olentoja, jotka liikkuvat pelimaailmassa ja ovat jollain tapaa hyödyllisiä, vaarallisia tai muuten merkityksellisiä pelin kannalta.

Lisäksi pelin mukaan pitää liittää nämä:

  1. Tiedosto, jossa on "huijarin kartta" pelimaailmasta (vrt. annettu forest_map.gif).

    • Kartan tulee olla joko PNG-, GIF- tai PDF-muodossa tai (paremman puutteessa) tavallisessa tekstitiedostossa merkkigrafiikkana.

    • Kirjaa tiedoston nimeksi map.png tai vastaava muulla tiedostopäätteellä. Sijoita se moduulin juurihakemistoon.

  2. Pelin walkthrough eli läpäisyohje, joka kuvailee vaihe vaiheelta, miten pelin saa pelattua läpi.

    • Sijoita ohje joko kartan kanssa samaan tiedostoon tai erilliseen moduulin juurihakemiston tiedostoon nimeltä walkthrough.txt (tai vastaavan niminen, muuntyyppinen tiedosto).

    • Assistentit voivat hyödyntää läpäisyohjetta arvostellessaan peliä. Vähemmän tuskastunut assari antaa ehkä helpommin hyviä arvosanoja. :-)

Arvioinnista

Tämän tehtävän arvioivat kurssin assistentit.

Arvostelu ei ole erityisen tiukka. Jos peli täyttää yllä mainitut vaatimukset, niin voit olettaa saavasi vähintään puolet pisteistä. Enemmänkin on luvassa ellei ohjelmastasi paljastu pahoja puutteita kuten erityisen häiritseviä bugeja tai täysin lukukelvotonta koodia.

Pelin ei tarvitse olla tajunnan räjäyttävä viihdepläjäys, jotta saisit täydet pisteet. Siihen riittää laadukas, toimiva ohjelma, joka täyttää luetellut vaatimukset.

Koodiasi tulee lukemaan ihminen, joten kirjoita se selkeästi. Muista kurssin tyyliopas. Oleellista ei ole noudattaa mitään tiettyä tyyliä orjallisesti vaan huolehtia perusasioista, jotta lukeminen on sujuvaa: sisennä järkevästi, käytä mielekkäitä muuttujien nimiä ja niin edelleen. Jos ohjelma on kirjoitettu niin epäselvästi, että lukeminen oleellisesti vaikeutuu, niin tehtävästä tuskin saa täysiä pisteitä.

Koodiin ei ole pakko kirjoittaa kommentteja, mutta voit harkintasi mukaan tehdä niin.

Pelin koko ei ole merkittävä arvosteluperuste. Vaikka lisäämällä alueita voi toki saada aikaan kiinnostavamman pelin, ei pelkkä alueiden lisäily pisteiden toivossa kannata. Vastaavasti pieni peli, jossa on vain muutama hyvin toimiva alue, voi hyvin saada täydet pisteet.

Lisäpisteitä annetaan assarin harkinnan mukaan. Lisäpisteitä saa ohjelman teknisestä vaativuudesta ja laadukkuudesta mutta myös peliin ja pelimaailmaan liittyvistä kiinnostavista ja hauskoista yksityiskohdista ja ideoista.

Julkaisemme tehtävän arvostelun viimeistään kaksi viikkoa deadlinen jälkeen.

Assarit valitsevat arvostelemiensa pelien joukosta omia suosikkejaan (mielivaltaisin perustein: hauskuus, omaperäisyys, tekninen toteutus, mikä vain). Assarien suosikit palkitaan pienin leffalippupalkinnoin ja julkaistaan muiden kurssilaisten nähtäviksi A+:ssa, ellet erikseen halua kieltää sitä.

Ohjeita ja vinkkejä

  • Pidä hauskaa.

  • Voit käyttää pelin kielenä englantia, suomea tai ruotsia.

  • Voit käyttää annettua Adventure-moduulia pelin pohjana. Päädyt varmasti muokkaamaan ainakin osaa annetuista luokista. Luokka Adventure täytyy remontoida perinpohjaisesti tai korvata jollain toisella luokalla.

  • Voit hyvin keskittyä muokkaamaan pelin toimintalogiikkaa ja jättää käyttöliittymät ennalleen.

    • Käyttöliittymienkin muuttaminen on kyllä luvallista. Kaikkea saa muuttaa.

    • Ohjelman ei ole pakko toimia yhteen sekä annetun AdventureTextUIn että AdventureGUIn kanssa. Yksi riittää (tai saat tehdä ihan uuden käyttöliittymän, jos siltä tuntuu). Joka tapauksessa on hyvä periaate yrittää pitää toimintalogiikka käyttöliittymästä riippumattomana.

  • Vaikka toivottavasti innostutkin tekemään jotain metkaa, älä ahnehdi enemmän kuin mihin sinulla on aikaa.

    • Voit pyytää assarilta apua paitsi pelin toteuttamisessa myös työmäärän arvioinnissa. Viime kädessä vastaat kuitenkin itse aikataulustasi.

    • Työskentele niin, että toteutat mahdollisuuksien mukaan pelin ominaisuuksia yhden kerrallaan valmiiksi. Tällöin työstä on palautettavissa toimiva versio, vaikka et kaikkea keksimääsi saisikaan toteutettua.

  • Kaikenlaiset lisäykset peliin ovat tervetulleita mutteivät pakollisia: uudet suunnat, joihin voi mennä; uudet kulkuvälineet; pelaajahahmon erilaiset ominaisuudet ja kyvyt; esineiden painot, jotka rajoittavat pelaajan mahdollisuuksia kantaa tavaraa; monisanaiset komennot; jne. jne.

  • Koska peliäsi tulee pelaamaan oikea ihmiskäyttäjä, älä unohda help-komentoa tai walkthrough-tiedostoa. Pidä myös huoli siitä, että peli toimii ymmärrettävästi. Jos pelissä on vaikkapa bugi, jonka vuoksi pelihahmo voi arvaamattomasti ja huomaamattomasti siirtyä toiseen paikkaan, niin pelin pelaaminen ja arvioiminen on kivuliasta.

  • Jos on tarpeen kirjoittaa muita kommentteja tai ohjeita ohjelmaasi testaavalle assistentille, voit lisätä moduuliin readme.txt- tai readme.pdf-tiedoston.

  • Tee tuollainen readme-tiedosto myös siinä tapauksessa, että käytit pelin sisältöjen tuottamisessa apuna ChatGPT:tä tai vastaavia työkaluja. Kuvaile lyhyesti, missä määrin ja miten käytit niitä.

  • Kartan piirtämisessä voi Aalto IT:n Linux-luokissa käyttää apuna esimerkiksi Inkscape-piirustusohjelmaa, Dia-diagrammieditoria tai GIMP-grafiikankäsittelyohjelmaa. Paljon muitakin vaihtoehtoja on.

  • Jos haluat käyttää O1Library-moduulin tarjoamaa välineistöä osana ohjelmaasi, lue seuraava laatikko. Voit kyllä lukea tuon laatikon muutenkin.

Moduulien väliset riippuvuudet IntelliJ’ssä

Jos IntelliJ-moduuli tarvitsee toimiakseen toista, asia täytyy erikseen kirjata. Muuten import-käskyt eivät löydä toisen moduulin luokkia.

Useimpien kurssimoduulien yhteyteen on jo määritelty, että ne ovat riippuvaisia O1Library-moduulista. Voit tutkia moduulien asetuksia todetaksesi tämän: valitse valikosta File → Project Structure (Macillä IntelliJ IDEA → Preferences), sitten jokin aiemmista moduuleista ja vielä oikealta välilehti Dependencies.

Adventure-moduulille tätä riippuvuutta ei ole etukäteen määritelty. Jos käytät seikkailupelissäsi O1Library-moduulin välineistöä, lisää riippuvuus: avaa mainittu Dependencies-asetus ja lisää kirjasto painamalla plus-merkkiä ja valitsemalla sitten Module Dependency pikkuvalikossa.

Moduulin nimen vaihtaminen

Jos haluat, voit vaihtaa pelimoduulisi nimeksi jotain muuta kuin Adventure:

  1. Napsauta moduulia hiiren oikealla napilla Project-näkymän luettelossa ja valitse Refactor → Rename.

  2. IntelliJ kysyy, haluatko nimetä uusiksi moduulin vai tietokoneella olevan kansion. Yleensä on kätevää, että moduuli ja kansio ovat samannimiset, joten valitse ensin Rename directory ja toista sitten sama homma valiten Rename module.

Tiedostonkäsittelyä omassa pelissä?

Osa kunnianhimoisimmista opiskelijoista haluaa ehkä peliinsä tiedostonkäsittelyä. Pelimaailman tietoja kenties ladataan tiedostosta tai pelaajan sallitaan tallentaa pelitilanne?

Tiedostojen käsittely ei missään nimessä ole vaatimus tässä tehtävässä!

Jos haluat hyödyntää tiedostoja, pääset ehkä alkuun luvun 11.3 valinnaisella materiaalilla. Lisää löytyy nettihauilla ja Kirjoja ja linkkejä -sivumme kautta.

Palauttaminen

Tätä tehtävää ei palauteta automaattiarviointiin suoraan IntelliJ’stä vaan alla olevalla lomakkeella. Noudata seuraavia ohjeita luodaksesi palautettavan tiedostopaketin.

Valmistelut

  1. Päivitä IntelliJ:n A+ Courses -lisäosa versioon 4.1 tai uudempaan. Se käy näin:

    • Valikosta: File → Settings → Plugins.

    • A+ Courses lisäosan kohdalla näkynee Update-nappula. (Jos sinulla sattuu jo olemaan versio 4.1 tai uudempi, niin ei näy ja asia on kunnossa.) Paina sitä.

    • Paina Restart IDE ja palaa pelimoduulisi äärelle kun IntelliJ on käynnistynyt.

  2. Varmista kahdesti, että katsot juuri sitä versiota ohjelmastasi, jonka haluat palauttaa, ja että olet tallentanut kaikki sen tiedostot. Varmista vielä kolmannenkin kerran.

  3. Mene ota esiin IntelliJ’n oikeasta reunasta se Modules-luettelo, josta olet aiemmin poiminut kurssimoduuleja koneellesi. Sen oikeassa yläkulmassa on tällainen Export Module-kuvake: plugin-export. Paina sitä; esiin tulee pieni ikkuna.

  4. Valitse pelimoduulisi (Adventure tai minkä nimen sille annoitkin). Merkitse teitkö pelin yksin vai parin kanssa (tämä vaikuttaa luotavan tiedostopaketin nimeen). Valitse myös kansio, johon haluat tiedostopaketin (esimerkiksi kotihakemistosi käy).

  5. Paina OK. IntelliJ luo zip-muotoisen paketin pelistäsi. Etsi luomasi .zip-tiedosto koneeltasi valitsemastasi kansiosta. Tutki sen sisältö varmistaaksesi, että kaikki sujui oikein. Paketin pitäisi sisältää koko moduuli lähdekoodeineen kaikkineen.

Pelipaketin lähettäminen arvioitavaksi

Huomio!

Jos olet tehnyt pelin parin kanssa, varmista että A+:ssa on valittuna paripalautus. Luo tarvittaessa uusi paripalautusryhmä valikosta. Vain toinen parin jäsenistä palauttaa pelin!

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

Great work! Because this message is prerecorded, any observations regarding your performance are speculation on our part. Please disregard any undeserved compliments.

Aperture Announcer

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

Tämän luvun inspiraationa ovat olleet vanhat Infocomin seikkailupelit sekä David Barnesin ja Michael Köllingin laatima oppimateriaali.

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