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
Scratch löytyy vapaasti verkosta osoitteesta scratch.mit.edu ja sivustolla kukin oppilas voi tehdä itselleen tunnuksen, jolloin projektit tallentuvat kätevästi Scratchin servereille. (Tunnusta tehdessä nuorimmat oppilaat tarvitsevat huoltajan sähköpostin, jonka avulla unohtuneen salasanan voi palauttaa. Tässä tarkoituksessa voi hyvin toimia myös opettajan sähköposti. Sähköpostin voi myöhemmin vaihtaa asetuksista.)
Selain-Scratch tallentaa kirjautumisen jälkeen projektia automaattisesti aina kun peli laitetaan käyntiin (vihreä lippu). Lisäksi projektia voi tallentaa oikeasta ylälaidasta oman tunnuksen vierestä.
Jos työskentely-ympäristössä ei ole tarjolla verkkoa voi tietokoneelle myös ladata Scratchin offline-version: scratch.mit.edu/scratch2download/ Tässä versiossa projektin tallennuksesta pitää huolehtia itse. Offline Scratch näyttää tältä.
Scratchin selainversio koostuu kolmesta alueesta, vasemmaisimpana on esiintymislava ohjelman suoritukselle ja sen alla tilaa erinäisille pelin hahmoille, keskellä ikkunaa on työkalupakki ja oikealla on tilaa ohjelmoinnille. Aivan ikkunan vasemmassa ylälaidassa on maapallon kuva Scratch-logon vieressä, tästä voi valita kieleksi mm. suomen.
Opettajalle: Videotykillä Scratchiä ohjatessa ikkuna on herkästi hyvin ahdas. Lisää ohjelmointitilaa saa painamalla pientä harmaata nuolta esiintymislavan ja työkalupakin välissä. Myös ohjelmointitilan skriptejä voi zoomata oikean alalaidan + -napilla.
Työkalupakissa alussa tärkeimmät työkalulokerot ovat Ohjaus ja Liike. Aloitetaan raahaamalla hiirellä ohjauksesta "kun painetaan välilyönti" ohjelmointitilaan. Kaikki työkalupakin palikat, joissa on kaareva ylälaita, ovat toimintoja joista ohjelma käynnistyy. Tämän jälkeen ohjelmalle pitää lisätä sisältöä. Avataan työkalulokero Liike ja raahataan sieltä palikka "liiku 10 askelta" ohjelmointitilaan ja asetetaan se edellisen palikan alle niin, että ne yhdistyvät.
Palikoita voi ottaa ohjelmointitilaan myös ilman, että niitä yhdistää, jolloin ne ovat nopeasti käytettävissä.
Ohjelmasi tulisi nyt siis näyttää tältä:
Edellinen ohjelma siirtää kissaa jatkuvasti yhteen suuntaan ja se on lopulta ikkunan reunassa. Muutetaan ohjelman palikoita niin, että liikkuminen tapahtuukin nuoli näppäimestä ja liikkumisen suunta valitaankin itse. (Liiku 10 askelta siirtää hahmoa aina 10 askelta siihen suuntaan kuin mihin hahmo osoittaa.)
Vaihdetaan "kun painetaan" palikan näppäin nuoli oikealle näppäimeksi ja vaihdetaan sininen liiku-palikka "muuta x 10 askeleella"-palikaksi.
Tehdään toinen samankaltainen palikkapari missä on oranssi "kun painetaan" ja sininen "muuta x 10 askeleella". Valitse oranssiin palikkaan nuoli vasemmalle. Millainen numero pitää valita askelten määräksi, jotta kissa liikkuu vasemmalle?
Vedetään vielä kaksi "kun painetaan"-palikkaa ohjelmointitilaan ja valitaan niihin "nuoli ylös" ja "nuoli alas". Mitkä siniset liiku-palikat pitää valita toiminnallisuudeksi, jotta kissa liikkuu oikeaan suuntaan nuolinäppäimestä painettaessa?
Kun olet kokeillut itse miten saat liikkumisen voit tarkistaa ratkaisusi klikkaamalla kuvaa. |
Edellä tehty liikkuminen toimii suurimman osan ajasta, mutta jos ohjelmaa suoritettaessa painetaan kahta eri nuolta yhtä aikaa niin hahmo liikkuu vain toiseen suunnista.
Jotta edelliseltä puutteellisuudelta vältyttäisiin niin voidaan toteuttaa skripti, joka käynnistyy pelin alussa, ja joka ikuisesti tarkastelee onko jokin nuolinäppäin painettuna. Voit katsoa miten tämä ohjelmoidaan täällä.
Aloitetaan itse pelin tekeminen ja lisätään ikkunaan pallo poukkoilemaan. Tarkoituksena olisi saada pallo kimpoilemaan kissasta ja reunoista.
Uusi hahmo saadaan tähtipainikkeista kissan ruudun alapuolelta. Valitse "Piirrä uusi hahmo" ja piirrä aukeavaan piirto-ohjelmaan pallo. Piirtää voit pensselillä tai ympyrä-työkalulla ja värin voit valita alempaa. Kun olet valmis paina OK.
Uusi hahmo ilmestyy tähtinappuloiden alapuolelle kissan viereen. Kissalle tekemäsi ohjelmat näet taas painamalla kissaa sillä ohjelmointi alueella näkyy vain yhden hahmon ohjelmat kerrallaan. Valitaan pallo ja lisätään sille liikkumistoiminto.
Koska pallon tulee liikkua itsestään niin valitaan, että se aloittaa liikkumisen kun peli käynnistetään oikean ylänurkan lippu-painikkeesta. Ohjaus-työkalupakista löytyy tähän sopiva aloituspalikka. Laitetaan tällä kertaa liikkumispalikaksi "liiku 10 askelta", jotta pallo liikkuisi aina menosuuntaansa.
Jos nyt painat lippukuvaketta niin huomaat, että pallo liikahtaa vain kerran. Koska halutaan, että pallo jatkaisi tämän jälkeen liikkumista ikuisesti (kunnes peli lopetetaan) niin haetaan ohjaus-työkaluista vielä haarukkapalikka: "ikuisesti". Lisätään ikuisesti-palikka niin, että liiku-palikka jää sen sisään.
Nyt pallo kuitenkin liikkuisi vain ikuisesti reunaa kohti. Reunoista pomppaamiseen tarkoitettu palikka löytyy liike-työkaluista. Missä kohdassa ohjelmaa pomppaaminen tulee suorittaa? Kokeile löydätkö pomppaus-palikalle oikean kohdan ja tarkasta sitten täältä saitko suorituksen oikeannäköiseksi.
Lisätään pallolle toinenkin pomppaustilaisuus. Tämän voit rakentaa edellisen pomppauspalikan alle sillä halutaan, että ohjelma tarkastaa tarpeen kummallekin pomppaukselle peräkkäin eikä liiku ennen kuin kummatkin pomppaukset on mahdollisesti suoritettu.
Halutaan siis, että jos pallo osuu kissaan niin käännytään kissasta pois päin. Aloitetaan "jos"-kohdasta. Ohjaus-työkalupakista löytyy haarukkapalikka "jos". Lisää se toistaiseksi irralliseksi työtilaan. Palikassa on jos kohdan jälkeen tilaa kertoa millä ehdolla "jos" halutaan suorittaa. Etsitään nyt Tuntoaisti-työkalupakista koskettaako-palikka ja raahataan sen jos-palikan tyhjään lokeroon. Valitaan koskettaako-palikkaan Hahmo1, eli kissa.
Ollaan siis kirjoitettu "jos kosketetaan kissaan".
Tämän jälkeen halutaan kirjoittaa loppu osa eli "niin osoitetaan poispäin kissasta". Tämä kirjoitetaan jos-palikan sisään. Hyödyllisiä palikoita olisivat seuraavat:
Miten siis saadaan pallo osoittamaan kissasta poispäin?
Kun pallo ollaan saatu kääntymään oikeaan suuntaan on pomppaus suoritettu sillä pallolla on jo liikkumistoiminnallisuus. Rakentamamme kääntymispalikkasetti on kuitenkin vielä irrallinen itse ohjelmasta, joten lisätään se nyt ohjelmaan reunasta pomppauksen perään.
Kokeile nyt peliäsi ja koita ohjailla kissan avulla palloa. Jos kissa liikkuu liian hitaasti voit nopeuttaa kissaa tai hidastaa palloa.
Jos haluat pallon liikkeestä jännemmän niin lisää liikkumisen perään pieni kääntyminen. Tämän saat sinisellä palikalla: käänny 15 astetta. Jos pallo kääntyy liian voimakkaasti voit pienentää käännyttävien asteiden määrää.
Itse pelaamiseen tarvittavat toiminnot on jo saatu tehtyä, joten tarvitaan vielä jokin syy miksi palloa pitää ohjata. Tehdään ikkunan alalaitaan alue, jolle pallon päästessä peli loppuu.
Piirretään nyt aluksi alue taustakuvaan eli valitaan hahmojen vierestä esiintymislava ja tämän jälkeen keskimmäisestä osasta ikkunaa välilehti "Taustat". Valitse taustakuvan vierestä "Muokkaa" ja piirrä esimerkiksi neliötyökalulla alalaitaan kissalla suojeltava alue.
Valitaan jälleen pallo, koska on sen toiminnallisuus vahtia minne se menee. (Välilehtenä on todennäköisesti nyt Asusteet, joten vaihda se Skripteihin.)
Halutaan siis, että "jos osutaan alalaidan maalattuun alueeseen niin peli loppuu". Aloitetaan jälleen jos-osuudesta ja rakennetaan toiminnallisuus irrallisena ennen kuin lisätään se ohjelmaan.
Jos-palikka löytyy jälleen Ohjaus-työkaluista ja ehdoksi halutaan tällä kertaa tunnistus, että minkä väriseen väriin kosketaan. Kun olet kerännyt nämä palikat työpöydälle voit painaa "koskettaako väriä"-palikan väriruutua ja klikata taustan värikästä alalaitaa, jotta tunnistetaan oikea väri.
Tämän jälkeen halutaan koota osa "niin lopetetaan peli". Pelin lopetus tarkoittaa tällä kertaa, että pallo pysähtyy. Pallo on kuitenkin ohjelmoitu liikkumaan ikuisesti, joten ainoa keino pysähtyä on pysäyttää skripti. Tämä palikka löytyy Ohjaus-työkalupakin alimmista palikoista.
Ylimääräinen tehtävä: |
Lisäksi voit pelin lopuksi saada hahmot juttelemaan keskenään. Keskustelun palikat löytyvät Ulkonäkö-työkaluista. Voit laittaa pallon ajattelemaan "Voitin!" parin sekunnin ajan ja sitten kissan sanomaan "Kiva peli!" tämän jälkeen:
Kummatkin kannattaa ohjelmoida ennen kuin skripti pysäytetään. Pallon ajattelemaan saamiseen riittää, että vetää ajattelu-palikan "jos koskettaa väriä" palikan sisään, mutta kissa ei tiedä, että pallo on osunut maaliin jos pallo ei ensin kerro siitä. Pallo voi lähettää ympärilleen viestin Ohjaus-työkalujen Lähetä-palikalla ja vastaavasti kissalle voidaan luoda uusi skripti, joka alkaa Kun vastaanotetaan viesti.
Pallo: |
Kissa: |
Sen lisäksi, että pallo liikkuu ja voi päästä väritetylle alueelle maaliin olisi kiva jos pelissä olisi monipuolisempia haasteita. Seuraavaksi onkin ohjeet kahteen eri vaihtoehtoiseen jatkoon. Voit valita haluatko tehdä pelin missä pallolla yritetään osua laatikoihin mistä saa pisteitä vai haluatko tehdä kaksin pelin missä kummallakin puolella kenttää on maali ja maalia vahtiva hahmo.
Tehdään ensiksi uusi hahmo, joka tulee olemaan laatikko mihin pallon tulisi osua. Uusi hahmo saatiin tähtinappulasta.
Halutaan siis, että "jos laatikkoon osuu pallo niin laatikko häviää ja saadaan piste". Voitaisiin ohjelmoida, että ikuisesti tarkistetaan osuuko laatikkoon hahmo, mutta muutetaan hieman sanamuotoa, jotta toteutus ei olisi niin raskas: "kunnes laatikkoon osuu pallo". Ohjaus-työkaluista löytyy tähän odota kunnes-palikka ja laitetaan tämän lauseen jatkeeksi koskettaako hahmoa2.
Askarrellaan sitten toiminnon sisältö, eli haluttiin, että laatikko häviää. Ulkonäkö-työkaluista löytyy hahmon hävittämiseen tarvittava piilota.
Kirjoitettu ohjelma ei kuitenkaan vielä tee mitään, koska mikään tapahtuma ei aloita ohjelman suoritusta. Otetaan Ohjaus-työkaluista sopiva aloituspalikka, jotta laatikko tarkkailee palloa pelin alusta lähtien.
Sitten vielä saatu piste. Tätä varten Scratchissä on muuttujia, eli lokeroita mihin voidaan laittaa muistiin joku luku. Voit ajatella esimerkiksi, että sinulla on kaveri, jota voit aina vetää hihasta ja kysyä, että mikäs tämä muistettava luku olikaan. Muuttujat löytyvät Muuttujat-työkaluista. Klikkaa Uusi muuttuja nappulaa siellä ja anna muuttujan nimeksi "pisteet". (Valitse, että kaikki hahmot tuntevat muuttujan.) Nimen idea on, että jos sinulla on useita muuttujia (kavereita) niin tiedät keneltä kysyä saadaksesi haluamasi luvun.
Ohjelman suoritustilassa tulisi nyt näkyä muuttuja "pisteet" ja sen arvo.
Palataan muokkaamaan laatikon toiminnallisuutta. Haluttiin siis, että laatikkoon osumisesta saa pisteen. Muuttujat-työkaluista löytyy tähän tarkoitukseen palikka, joka muuttaa muuttujan arvoa tietyllä määrällä "askelia".
Jos nyt kokeilet miten peli toimii niin toisella kierroksella huomaat, että laatikko ei oikeastaan ikinä ilmesty takaisin. Tämä johtuu siitä, että laatikko piilotetaan, mutta sitä ei ikinä aseteta takaisin näkyväksi. Lisää siis näkymiseksi asettaminen ihan ohjelman alkuun.
Toinen asia mitä ei ikinä aseteta takaisin alkutilaan on pisteiden määrä. Lisää pallon skriptin alkuun, että muuttujan "pisteet" arvo asetetaan nollaan.
Testaa peliäsi joitakin kertoja ja varmista, että kaikki toimii halutusti yhdellä laatikolla.
Lisätään vielä toiminnallisuus, että pallo kimpoaa laatikoista. Käytetään tässä viestin lähettämistä muille hahmoille sillä jos laatikko häviää kun pallo osuu siihen niin pallo ei enää huomaakaan osuvansa laatikkoon.
Viestin lähettämistä voidaan ajatella vaikka niin, että hahmo huutelee ympäristöönsä, että jotain tapahtui ja muut hahmot voivat siis kuulla tämän. Lisätään siis laatikon toimintaan, että ennen piiloutumista se Lähettää viestin "osuma". Viestin nimen voi valita lähetä-palikan nuolesta ja sieltä "uusi...".
Nyt on lähetetty viesti, mutta kukaan ei vielä kuuntele. Siirrytään pallon toiminnallisuuksiin. Lisätään uusi ohjelma, joka alkaa kun vastaanotan viestin. Palikan nuolesta klikkaamalla voit valita kuunneltavaksi viestiksi "osuman". Voitaisiin päättää nyt, että pallo kääntyy ensin kohti laatikkoa ja sitten kääntyy päinvastaiseen suuntaan, mutta koska pelissä on tarkoitus olla lopulta paljon laatikoita osuttavana niin olisi hankala tietää mitä laatikkoa kohti on osoitettava. Lisätään siis toiminnallisuudeksi, että pallon suunta muuttuu tietyllä astemäärällä.
Testaile nyt mikä on hyvä astemäärä, että kääntyminen näyttää kimpoamiselta.
Nyt peli on valmis. Klikkaa laatikkoa hahmolistassa hiiren oikealla korvalla ja valitse ensin, että laatikko näkyy ja sitten kopioi sitä. Aina kopioimisen jälkeen siirrä ikkunaan ilmestynyt laatikko haluamaasi paikkaan.
Lisäksi, koska suojeltava alue on ikkunan alalaita niin voit myös poistaa kissalta toiseen suuntaan liikkumisen.
Kaksinpelissä siis kummallakin pelattavalla hahmolla on oma maalinsa mitä suojella, joten alkuun pitää muokata Esiintymislavan taustaa. Koska ohjelman ikkuna on pitempi vaakasuuntaan niin piirretäänkin toinen maali ikkunan vasempaan laitaan ja toinen oikeaan. Jos halutaan tietää voittaja niin maalit kannattaa myös piirtää eri väreillä.
Lisätään nyt peliin toinen hahmo. Voit piirtää uuden hahmon tai valita sen Scratchin valmishahmoista, jotka löytyvät tähtinappulasta missä on kansion kuva.
Jos toinen tai molemmat hahmoista ovat liian suuria voi niitä pienentää klikkaamalla niitä nappulalla, jossa on neljä nuolta sisäänpäin. Voit myös kääntää hahmoa klikkaamalla sitä hiiren oikealla korvalla ja valitsemalla "käännä hahmoa". Tämän jälkeen raahaa hahmoa hiirellä kunnes se kääntyy.
Pelaajahahmojen ei tarvitse liikkua kuin pystysuuntaan, joten poista kissalta sivusuuntiin liikkuminen ja kirjoita uudelle hahmolle pystysuuntaan liikkumiset. Uutta hahmoa ei tietenkään voi liikuttaa samoista nappuloista kuin kissaa, joten valitse tähän tarkoitukseen esimerkiksi jotkut päällekkäiset kirjaimet näppäimistön toiselta puolelta.
Nyt kun maaleja on kahden värisiä pitää pallon myös tarkkailla osumistaan kumpaankin väriin. Lisää pallolle toinen "jos osutaan väriin" toiminnallisuus edellisen perään.
Samaten pallo kimpoaa vasta kissasta, joten pallolle pitää tehdä toinen samanlainen kimpoaminen uudesta hahmosta.
Lisätään hahmoille lyhyt keskustelu pelin päätteeksi. Keskustelu käynnistyy kun pallo osuu jompaankumpaan maaliin. Kuitenkin vain pallo tietää mihin väriin se milloinkin osuu ja hahmot eivät tiedä asiasta mitään. On siis tarpeen lisätä toiminnallisuus, että pallo ilmoittaa kaikille ympäristöönsä, että se on osunut johonkin väriin.
Ohjelmoidaan siis, että kun pallo osuu toiseen väreistä niin se lähettää viestin "joku voitti". Ja tämä toiminnallisuus pitää lisätä kummankin väritunnistuksen sisään niin, että viesti kertoo kumpi voitti. Viestin nimi voidaan valita lähetä-nappulan nuolesta "uusi..." ja kirjoittamalla viestin nimi.
Nyt tarvitaan siis vielä toiminnallisuudet, että hahmot oikeasti kuuntelevat palloa. Lisätään siis kummallekin toiminnan aloittava kun vastaanotan niin, että hahmo vastaanottaa aina tiedon omasta voitostaan. (Voit tehdä toiminnallisuuden ensin yhdelle voitolle ja sitten tehdä saman toiselle.) Kun viesti on vastaanotettu niin lisätään ohjelman sisällöksi, että hahmo sanoo "Voitin!" 2 sekuntia. Puhuminen löytyy Ulkonäkö-työkaluista.
Tämän jälkeen toisen hahmon tulee vastata, joten lähetetään sille viesti, että sen tulee vastata. Lisätään toiselle hahmolle myös viestin vastaanotto ja sen valitaan, että hahmo sen jälkeen sanoo 2 sekuntia "Kiva peli!".
Jos haluat lisätä lisähaasteita peliin voit lisätä kenttään esteitä, joista pallo kimpoaa. Voit käyttää tähän "Pisteitä palikoista" ohjeiden laatikoita ja päättää itse häviävätkö esteet kun niihin osuu vai ei.