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

Luku 10.1: Ihan oma tekstipeli

Tästä sivusta:

Pääkysymyksiä: Miten suunnittelen ja toteutan itse oman tekstipelin?

Mitä käsitellään? Itsenäistä ohjelman suunnittelua. Muitakin aiheita, jotka riippuvat omista valinnoistasi. Tehtävässä voi soveltaa ja harjoitella lähes mitä tahansa kurssilla käsiteltyä aihetta, ja muitakin.

Mitä tehdään? Ohjelmoidaan, mikä pitää tällä kertaa sisällään myös sen suunnittelun, millaisen ohjelman haluat tehdä.

Suuntaa antava työläysarvio: Vaikka valmis pohja ohjelmalle onkin tarjolla, ongelmakentän rajaaminen ja tarvittavien ratkaisujen keksiminen on aloittelijalle vaikeaa. Kokeneempikin ohjelmoija saa tästä aiheesta kehiteltyä itselleen haasteita. Työmäärä vaihtelee tekijän kunnianhimon mukaan valtavasti, mutta tämä on joka tapauksessa melkein kaikille kurssin työläin tehtävä. Aikaa kannattaa varata vähintään 10 h, mieluummin ainakin 15 h. Tehtävään saa kyllä upotettua vaikka viikkoja, jos niin haluaa.

Pistearvo: C200.

Oheismoduulit: Adventure.

../_images/person11.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, huoneita, tms.
  • Mysteeriseikkailu. Pelaajan täytyy löytää jotain kadonnutta, selvittää Kuka Sen Teki? tms.
  • Toimintaseikkailu. Esimerkiksi: pelaajan täytyy paeta jostain.
  • Kirjaan tai leffaan perustuva seikkailu. Esimerkiksi: hahmo on Liisa Ihmemaassa, kapteeni Ahab, Travis Bickle, Dolores Abernathy, tms.
  • 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.

Tarkemmat vaatimukset

Pelissä pitää olla:

  • 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 laittaa 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ää:

  1. Tiedosto, jossa on "huijarin kartta" pelimaailmasta (vrt. annettu forest_map.gif).
    • Tämän kartan tulee olla joko PNG-, GIF- tai PDF-muodossa tai (paremman puutteessa) tavallisessa tekstitiedostossa merkkigrafiikkana.
    • Laita 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 vastaavanniminen 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 minkään tietyn tyylin orjallinen noudattaminen vaan perusasioista huolehtiminen niin, että 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ä peliin 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.
  • 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 haluat kirjoittaa muita kommentteja tai ohjeita ohjelmaasi testaavalle assistentille, voit lisätä moduuliin readme.txt- tai readme.pdf-tiedoston.
  • 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.
  • 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 riippuen siitä, missä ympäristössä työskentelet.
  • Jos haluat käyttää O1Library-moduulin tarjoamaa välineistöä osana ohjelmaasi, lue alla oleva 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öä, niin avaa mainittu Dependencies-asetus ja lisää kirjasto painamalla plus-merkkiä oikeassa laidassa ja sitten Module Dependency pikkuvalikossa.

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 1.8:
    • Valikosta File → Settings. (Macilla IntelliJ IDEA → Preferences.)
    • Valitse pikkuikkunassa Plugins.
    • Valitse pikkuikkunan yläreunasta Installed-välilehti ja sieltä A+ Courses. Päivitä versioon 1.8 ja käynnistä uudelleen, niin päivitys aktivoituu.
  2. Varmista kahdesti, että katsot juuri sitä versiota ohjelmastasi, jonka haluat palauttaa ja että olet tallentanut kaikki sen tiedostot. Varmista vielä kolmannenkin kerran.
  3. Valitse IntelliJ’n valikosta A+ → Export Module, sitten Adventure. Paina OK.
  4. IntelliJ luo zip-muotoisen paketin Adventure-moduulistasi. Valitse pyydettäessä paketille sijoituspaikka jostakin kansiosta koneellesi sekä nimi. Nimi voi olla esimerkiksi 654321_TitleOfMyGame.zip. Valitse nimi niin, että sen alussa on tekijän tai tekijöiden opiskelijanumerot tai sukunimet.
  5. 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.

Pelin 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, 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

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...