Materiaalit on lisensoitu Creative Commons BY-SA-lisenssillä, joten voit levittää niitä vapaasti, kunhan alkuperäisten tekijöiden nimiä ei poisteta. Jos teet muutoksia materiaaliin ja haluat levittää muunneltua versiota, se täytyy lisensoida samanlaisella vapaalla lisenssillä.

Alkuperäinen tekijä (2013): Jenna Tuominen


Linnakeseikkailu

Scratchin sivuilta löytyy linkin puolesta jaettu projekti, josta löytyy linnakeseikkailua varten joitakin alustavia kuvia kuten pelikenttiä. Sen voi remiksata oman projektin aluksi täältä. Remiksaus napin saa näkyviin ikkunan vasempaan yläkulmaan kun on ensin avannut projektin "Katso sisälle"-painikkeella.

  • Remiksaa jaettu projekti
  • Piilota tässä vaiheessa kaikki tuodut hahmot
  • Remiksatun projektin kuvat voi luonnollisesti myöhemmin muokata oman näköisikseen.

    Aloitusruutu / Menu

    Aloitetaan luomalla pelille menu ..tällä kertaa erityisesti ohjelmoijan avuksi sillä testatessa on helpompi siirtyä suoraan testattavaan kenttään kuin pelata koko peli haluttuun kenttään saakka.

  • Piirrä taustoihin menutausta.
  • Nimeä menutaustasi.
  • Piirrä menunappulat: "Pelaa" ja "Tasot"
  • Muista tehdessäsi useita nappuloita, että kannattaa ensin tehdä yksi tekstitön nappula, jota voi sitten kopioida tekstillisiä nappuloita varten sopivan verran. Alkuperäisen tyhjän nappulan voi piilottaa tulevaa varten.
  • Nimeä menunappulasi.
  • Tee skripti, jolla nappulat siirtyvät ohjelman alkaessa oikeisiin paikkoihin oikean kokoisina
  • Tarkasta vielä, että olet tehnyt skriptit kummallekin nappulalle
  • Kun olet tehnyt tehtävän:

    BONUS

    Lisää halutessasi nappuloille joku efekti kun hiiri käy niiden päällä.

    Kun olet tehnyt tehtävän:


    Menunappuloiden aktivointi

    Kumpikin nappula käynnistää jossain määrin erilaiset kenttien katselutilat, mutta koska näissä on myös yhteneväisyyksiä niin katsotaan ensin voidaanko näitä käynnistyskomentoja ryhmitellä pariksi yksinkertaiseksi komennoksi.

    PelitilaKenttätila
    • Vaihtaa taustan
    • Aukaisee ensimmäisen kentän
    • Aukaisee kaikki ensimmäisen kentän esineet
    • Tuo näkyviin pelihahmon
    • Näyttää maskin
    • Näyttää pisteet
    • Vaihtaa taustan
    • Aukaisee ensimmäisen kentän
    • Aukaisee kaikki ensimmäisen kentän esineet
    • Näyttää nappulat kunkin kentän valitsemiseen

    Voidaan siis ilmeisesti toteuttaa seuraavanlaiset komennot nappeihin:

  • Aseta nämä komennot menunappuloihin (ja toteutetaan komentoihin reagoiminen seuraavaksi)
  • Tarkasta vielä, että olet tehnyt skriptit kummallekin nappulalle
  • Mietitään vielä komentoa "seuraava taso". On kätevämpää tehdä tällainen komento, joka toimii sitten joka tason vaihtoon, mutta tarvitsemme nyt myös jonkin "päällikön", joka johtaa touhua ja selvittää mikä taso pitää laittaa päälle kun tasoa vaihdetaan.

    Tähän rooliin sopii hyvin esiintymislava.

  • Aseta ohjelma tietämään mikä taso on menossa
  • Päätetään, että taso menuvaiheessa on nolla
  • Tee esiintymislavalle skripti, joka vastaanottaa tiedon vaihtotarpeesta ja:
  • Kun olet tehnyt tehtävän:


    Ensimmäinen taso

  • Tee kenttätausta esiintymislavalle
  • Nimeä kenttätaustasi
  • Aseta kenttätausta näkyviin
  • Piilota ylimääräiset nappulat
  • Korjaa menunäkymä jälleen oikeannäköiseksi
  • (Miten käy menulle jos klikkaat jompaa kumpaa menunappulaa?)

    Kun olet tehnyt tehtävän:

    Kenttä näkyviin

  • Ota käyttöön ensimmäisen tason kartta, remiksatussa projektissa tämä on hahmo: taso 1
  • Aseta kenttä piiloutumaan menun ollessa näkyvissä
  • Aseta kenttä näkyviin sopivassa tilanteessa
  • (Muista, että kenttä halutaan näkyviin, painettiin sitten kumpaa tahansa menun nappulaa.)

  • Aseta halutessasi tason koko (suhteessa alkuperäiseen kuvaan)
  • Aseta taso siirtymään oikeaan kohtaan pelin alkua varten (pelihahmo ilmestyy keskelle)
  • Kun olet tehnyt tehtävän:

    Pelihahmo

  • Tee pelihahmo
  • (Seiniin törmäilyn tarkistukseen tarvitsee myös jonkun hahmokohtaisen värin)

  • Nimeä pelihahmosi
  • Tällä kertaa pelissämme ei liikukaan itse pelihahmo vaan pelihahmoa "liikutellessa" kartta liikkuu. Pelissä käytetään siis side-scrolling menetelmää. Pelin toteutuksen kannalta tämä tarkoittaa, että pelihahmo nököttääkin jatkuvasti ruudun keskellä.

  • Toteuta pelihahmolle skripti, jolla se sijoitetaan keskelle ruutua ja se asetetaan näkyviin pelatessa
  • Valitse tarkkaan minkä tapahtuman perusteella nämä tehdään, ettei pelihahmo näy kun tarkastellaan kenttiä pelaamatta.

    Kun olet tehnyt tehtävän:

    BONUS - pelihahmon suunta

    Laita halutessasi pelihahmo kääntymään siihen suuntaan, johon liikutaan. Esimerkiksi useiden Scratchin omien hahmojen tapauksissa näyttää fiksulta jos vasemmalle tai oikealle liikuttaessa vaihdetaan näennäistä kulkusuuntaa.

    Kun olet tehnyt tehtävän:

    Liikkuminen

    Haluttiin siis, että liikkuessa pelihahmo pysyy paikallaan ja kartta liikkuu:

  • Tee skripti, jolla kartta liikkuu kun nuolia painetaan
  • Estä seinien sisään meno
  • Muista tehdä seinän tarkistus joka suuntaan.

    Kun olet tehnyt tehtävän:


    Kerättävät tähdet

    Lisätään nyt toimivaan kenttään ensimmäisiä pelielementtejä.

  • Piirrä tähti-hahmo
  • Nimeä tähti-hahmo
  • Tähtiä voi ilmestyä useissa eri kentissä, mutta toteutetaan nyt tähden ilmestyminen vain ensimmäiseen kenttään.

    HUOM! Muista kuitenkin, että jos käyttäjä meneekin alun menusta Kentät-näkymään niin tämän näkymän tarkoitus on myös näyttää kaikki kenttään sijoitetut pelielementit niin, että ohjelmoijan (eli sinun ^___^ ) on helppo tarkastaa, että hahmo meni oikeaan kohtaan. Miten saat tähden ilmestymään kummassakin tapauksessa?

  • Aseta tähti piiloon ja näkyviin sopivista tapahtumista
  • Mietitään seuraavaksi miten tähti sijoitetaan kartalle?

    1) Voisimme käyttää mene kohtaan palikkaa, mutta tähti pysyisi aina paikallaan vaikka kartta siirtyykin.

    2) Jotta saisimme tähden liikkumaan voisimme toki laittaa senkin vastaanottamaan tiedon nuolinäppäimistä ..mutta tällöin tähti ei tiedä pystyikö pelihahmo siirtymään, eli oliko edessä seinä vai ei.

    3) Edellistäkin ratkaisua voisi korjata vielä hieman: laitetaan taso 1 lähettämään viestejä jos pystyttiin liikkumaan! Tästäkin syntyy kuitenkin vielä ongelma sillä vaikka tähti liikkuisi oikeissa tapauksissa niin tähti ei voi liikkua kentän ulkopuolelle Scratchissä ..joten kun lähdetään tähteä kohti niin reunalla oleva tähti lähtee heti kohti pelaajaa riippumatta siitä miten kaukana sen piti olla.

    4) Hylätään koko nuolinäppäin siirtyminen ja laitetaankin kiintopisteeksi itse taso. Liikkeestä löytyy palikka, jolla tähden voi laittaa menemään taso 1:n kohdalle. Tämän jälkeen pitää vain aina kuljettaa tähti kartalla oikeaan kohtaan.

  • Aseta tähti menemään johonkin kohtaan karttaa
  • Huomaa, että voit nyt käyttää myös "Kentät"-nappulaa testatessasi kartan ulkonäköä.

    Kun olet tehnyt tehtävän:

    Maski

    Kuten äsken kuitenkin mainittiin tähden sijoittamisen 3)-ratkaisun hylkäämisen perusteeksi niin kartalle sijoitetut pelielementit jäävät ruudun reunoille jos niiden pitäisi olla ruudun ulkopuolella.

    Lisätään tästä syystä, ja pelillisen jännityksen vuoksi, peliin uusi hahmo: maski. Maskin tehtävä on piilottaa osa kentästä pelaajalta.

  • Tee maski (jaetusta projektista löytyy valmiina yhdenlainen)
  • Nimeä maskisi
  • Aseta maski ilmestymään ja katoamaan oikeissa tilanteissa
  • Jaetussa projektissa maskilla on kaksi ulkoasua, jossa toisessa on reikä pisteitä varten. Voit valita nyt maskin näkyvyyttä alustettaessa myös ulkoasun sille.

    Yleensä tekemämme hahmot ilmestyvät ruudulle siinä järjestyksessä kuin missä niitä teemmekin. Tällä kertaa maski on koko pelin ajan näkyvissä, mutta muut hahmot voivat ilmestyä tänä aikana useamman kerran, joten ei ole varmaa, että maski pysyy päällimmäisenä.

  • Aseta maski pysymään jatkuvasti päällimmäisenä
  • Aseta tässä vaiheessa myös taso 1 pysymään koko ajan alimmaisena. Tähän riittänee, että se siirtyy koko ajan tason alemmas.
  • BONUS - pelihahmo päällimmäisenä

    Maskin päällimmäisenä olon seurauksena pelihahmon puhekuplatkin jäävät sen alle, jos sellaisia haluat lisätä. Tämän vuoksi asetakin pelihahmo aina päällimmäiseksi ja maskin yhtä tasoa alemmas.

    Miten saat maskin toiseksi ylimmäksi vain mene etualalle ja mene _ tasoa taaksepäin palikoiden avulla?

    Kun olet tehnyt tehtävän:

    Pisteiden keräys

    Nyt kun hahmot, joiden pitäisi olla ruudun ulkopuolella, on piilotettu voidaan palata tähden toteutukseen. Tähti liikkuu jo halutusti, mutta siitä pitäisi saada pisteitäkin.

  • Luo jokin tapa millä voidaan muistaa paljonko pisteitä on
  • BONUS - pisteet näkyviin maskin alta

    Pisteet muuttujan arvo ei näy juuri luomamme maskin alta paitsi jos sijoitat muuttujan läpinäkyvälle alueelle.

    Yksi tapa kiertää tämä on tehdä reikä maskiin. Linkin jaetussa projektissa maskista löytyy tällainen asuste maskille. Muuttuja pitää kuitenkin vielä siirtää reiän kohdalle tai reikä pitää siirtää muuttujan kohdalle.

    Muuttujan ulkonäön saat reikään sopivaksi kun klikkaat muuttujan kuvaesitystä kerran niin, että se muuttuu värilaatikoksi.

    BONUS - pisteet piiloon kun ei tarvita

    Jos pisteet näkyvät pelinäkymässä niin ne näkyvät automaattisesti myös menun aikana ja kenttiä tarkastellessa.

  • Piilota muuttuja näkyvistä näiden ajaksi
  • Kun olet tehnyt tehtävän:

  • Toteuta tähden keräys
  • HUOM. Tee tälle oma skripti, jota kutsutaan aina kun tähti halutaan sijoittaa kenttään.

  • Korjaa pisteitä niin, että pisteitä on aina pelin alussa nolla
  • Kun olet tehnyt tehtävän:

    BONUS - tähden animointi

    Voit myös lisätä tähdelle jonkin toiminnallisuuden pisteiden lisäksi. Esimerkiksi tähti voi pienentyä tai pienentyä sykkien jatkuvasti kunnes se häviää.

    Tämä tuo haastetta peliin jos pisteet pitää kerätä esimerkiksi näin tietyssä ajassa.

    BONUS - bugi fiksi

    Jos hahmo pelin lopuksi jää tähden kohdalle niin seuraavan pelin alussa pelaaja ehtii saada tähdestä pisteen ennen kuin se siirtyy oikealle paikalleen. Tämä koska Scratchissä useat hahmot voivat vastaanottaa saman viestin "samaan aikaan", joten järjestys missä asiat tehdään on epäselvä.

    Bugin voi korjata laittamalla ennen kosketustestausta testin, joka vaikka odottaa kunnes hahmo on lähtenyt liikkeelle. Pelaaja on yleensä pelin hitain "osa".


    Tikkaat seuraavaan tasoon

    Toteutetaan seuraavaksi vielä tikkaat, joilla päästään sitten etenemään seuraavaan tasoon. Katso tarvittaessa apua seuraaviin tähdestä.

  • Tee tikkaat (tai ota käyttöön jaettu hahmo)
  • Nimeä tikkaat
  • Aseta tikkaat näkyviin ja piiloon sopivissa kohdissa peliä
  • Aseta tikkaat siirtymään tason mukana jossain tietyssä sijainnissa
  • Nyt kun tikkaat ovat vuorostaan osa tasoa niin luodaan niille vielä toiminnallisuus. Tähdet antoivat pisteitä, mutta tikkaat siirtävät seuraavalle tasolle.

    Koska tikkaita käytetään varmaan jälleen useilla eri tasoilla niin olisi kätevää, että tälle luodaan oma lähetä-vastaanota -ratkaisu tai uusi lohko. Esimerkiksi "pystytä tikkaat". Eri tasojen tikkaat joutuvat kuitenkin käynnistämään eri tasoja, esim. "Aloita taso 2", "Aloita taso 3", vaikka skripti tulee aina olemaan sama. Tehdäänkin niin, että tikkaat lähettävät vain viestin, että "vaihda seuraavaan tasoon".

    Tämä meillä olikin jo määritelty esiintymislavalla.

    BONUS - tason läpäisy

    Animoi tason läpäisy jotenkin. Laita esimerkiksi pelihahmolle näkymään jokin puhekupla.

    HUOM. Jos pelihahmosi puhekupla jää maskin alle niin korjaa se BONUS-tehtävän "pelihahmo päällimmäisenä" avulla.


    Tason vaihto

    Pelihahmon päästyä tikkaille lähetetään viesti tason vaihdosta ja esiintymislava asettaa uuden tason näkyviin, mutta tätä ennen:

  • Lisää esiintymislavan tasovaihto skriptiin "piilota kaikki" -viestin lähetys
  • Aseta kaikki ylimääräiset hahmot piiloutumaan kun vastaanotetaan edellisen kohdan viesti
  • Piiloutumisten yhteyteen voit myös laittaa hahmojen skriptien lopettavia käskyjä
  • BONUS - bugi fiksi

    Pelin lopuksi pelihahmo voi herkästi jäädä tikkaiden luokse ja Scratch alkaa näissä tapauksissa usein jättämään tikkaat pelihahmon kohdalle niin, että heti uuden pelin aluksi päästään uudelle tasolle.

    Tämän voi estää laittamalla tikkaiden ja pelihahmon kosketusta odottava skripti odottamaan ensin, että pelihahmo yleensäkään liikkuu johonkin suuntaan.

    Laitetaan seuraavaksi taso 2 toimintavalmiiksi.

  • Tee/Etsi taso 2:n kuva ja laita se näkymään oikeasta viestistä
  • Aseta taso 2 oikeaan kohtaan ja liikkumaan
  • (Voit kopioida näitä tasosta 1)

    Kartta näkymä koodarille

    Niin, että tason 2 sijainnin voi tarkistaa pitää testatessa ensin mennä tason 1 läpi ja sitä mukaa kun peli etenee niin tämä testaus muuttuu jatkuvasti hankalammaksi. Menuvalikosta pystyi menemään 'Kartat'-osioon. Tehdään tämä nyt toimintavalmiiksi jatkon helpottamiseksi

  • Luo nappulahahmoja tasojen valintaa varten
  • Kannattaa tehdä yksi tyhjä, numeroimaton nappula ja kopioida sitä sopiva määrä muita nappuloita varten.

  • Nimeä nappulahahmot
  • Aseta nappulahahmot näkyviin vain kartat-näkymään
  • (Muista, että menunappuloita klikatessa lähetettiin viestejä, joista yksi olisi nyt kätevä.)

  • Lisää jokaiselle tasonappulalle skripti, joka lähettää oikeasta tapahtumasta oikean taso _ viestin.
  • Laita tasonappulat myös lähettämään piilotusviesti
  • Nyt kun pelimme ulkonäön tarkkailu onnistuu myös nopeasti ohjelmoijaa varten niin ruvetaan lisäämään uuteen karttaamme pelielementtejä:

  • Aseta tähti vastaanottamaan viesti tasosta 2 ja laita se näkyviin oikeaan kohtaan
  • Tee sama tikkaille
  • Taikajuoma

    Valmiissa tarjotussa tasossa 2 on erikokoisia oviaukkoja ja säädetään nyt pelihahmo sen kokoiseksi, ettei se mahdu oikeanpuolimmaisesta. Tehdään tätä varten peliin taikajuoma, joka hetkeksi pienentää hahmon.

  • Tee/Etsi taikajuoman kuva
  • Nimeä taikajuomahahmosi
  • Aseta taikajuoma oikeaan kohtaan karttaa
  • Toteuta taikajuoman toiminnallisuus lähetä-vastaanota -rakenteella
  • BONUS - Tietoa taikajuomasta

    Pelaaja ei välttämättä tiedä yhtään mitä taikajuomasta tapahtuu pelissä. Laita pelihahmo kertomaan pelaajalle taikajuoman vaikutus kun päästään oikealle tasolle tai tarpeeksi lähelle taikajuomaa.

    HUOM. Jos pelihahmosi puhekupla jää maskin alle niin korjaa se BONUS-tehtävän "pelihahmo päällimmäisenä" avulla.


    Pelin loppu

    Lisää peliin haluamiasi kenttiä ja pelielementtejä.

    Pelin voi todennäköisimmin voittaa jos pääsee ylimpiin tikkaisiin/portaisiin.

    Pelin voi taas hävitä jos jää vaikka hahmon pienennyksen aikana jumiin seinään. Pelin häviäminen on kuitenkin yleisesti ottaen hankalampi testata, koska ohjelman pitää jotenkin ymmärtää tilanne mistä ei voida edetä pidemmälle.

    Esim. Seinän sisään jumittamisen voi testata siirtämällä hahmoa joka suuntaan ja varmistamalla, että se pysyy seinän sisällä. Tämä voi toisaalta mennä pieleen jos hahmoa kääntämällä asuste olisikin lähtenyt seinän sisästä pois ja vapauttanut hahmon.

    Häviön testauksen kanssa kannattaakin olla varovainen, ettei pelaaja menetä pitkälle pelaamaansa pelisessiota tilanteeseen mistä olisi oikeasti voinutkin vielä jatkaa.