maanantai 3. maaliskuuta 2014

Android-ohjelmointi alkaa: Puhuva puhelin

Oppilaat ovat kovasti kyselleet uusien ohjelmointihaasteiden perään. Osa on ihan innoissaan, osa ei kehtaa valittaa. Tarkoituksenani on näyttää seuraavaksi Android-ohjelmoinnin perusteet ja ohjata innostuneet alkuun, jotta he voivat opiskella itsenäisesti eteenpäin. Valitsin Androidin, koska se on selkeästi suosituin käyttöjärjestelmä oppilaiden puhelimissa ja sen lisäksi MIT tarjoaa appien tekoon hyvin tutun näköisen kehitysohjelman, AppInventorin. Koska oppilaat viettävät suuren osan ajastaan puhelimiensa kanssa, tämä saattaisi innostaa heidät jakamaan tekemiään appeja muillekin ja mahdollisesti saada muitakin innostumaan aiheesta.



Sivulla on valmiita ohjeita englanniksi ja ainakin nyt aluksi keskityn suomentamaan niitä omille tunneilleni soveltuviksi paketeiksi. Vaikka AppInventor on logiikaltaan hyvin samanlainen Scratchin kanssa, se on myös paljon monipuolisempi. Puhelimissa on kiihtyvyysantureita ja paljon kaikkea muuta, jota voidaan käyttää hyväksi ohjelman tekemisessä. En tiedä vielä kuinka oppilaat ottavat tämän omakseen ja kuinka paljon he uskaltavat leikkiä ja harjoitella vapaa-aikanaan. Yritän pitää esimerkit riittävän helppoina ja lyhyinä, jotta jokainen saisi projektinsa valmiiksi aina kaksoistunnin päätteeksi.

AppInventor on selaimessa (pilvessä) toimiva kehitysohjelma, joka näyttää hyvin paljon Scratchiltä. Kirjoitushetkellä se toimii ainakin Firefoxilla ja Chromella. Päästäkseen käsiksi ohjelmaan, täytyy sivulle kirjautua Googletunnuksilla. Kirjautumisen jälkeen omat työt tallentuvat automaattisesti pilveen omien tunnuksien taakse ja ne ovat saatavilla mistä vain ja millä tahansa koneella. Tämä on mainiota, koska oppilaat voivat jatkaa kotonaan koulussa aloittamiaan projekteja, eikä kukaan pääse tuhoamaan toisten töitä koulun koneilta.

Kun palveluun on kirjauduttu, saadaan esiin Tervetuloa-banneri.


 Uusi projekti aloitetaan joko "New Project"-napista tai ylävalikosta Project -> Start new project


Olen luova ja nimeän oman esimerkkini Esimerkiksi.


Nyt saadaan näkyville "Designer"-osuus. Designerin ja varsinaisen ohjelmoinnin, eli "Blocks"-osan, välillä voi kulkea oikeasta yläreunasta. Designerin vasemmassa reunassa ovat erilaiset elementit, joita voi lisätä ruudulle. Keskellä "Viewer" toimii mallina puhelimen ruudulle. "Components" kertoo valitut elementit ja oikean reunan "Properties" näyttää valintamahdollisuudet kulloinkin "Components"-osassa valittuna olevalle komponentille. Tämä kuulostaa huomattavasti monimutkaisemmalta kuin mitä se on. Kärsivällisyyttä, kyllä se tästä.


Appeja voi koekäyttää omalla android-laitteella joko WiFin yli tai USB-kaapelin kautta. Ohjelmassa on myös emulaattori, jolla appeja voi kokeilla. MIT:n suosittelema WiFin käyttö on erittäin helppoa, mikäli WiFi sattuu löytymään. USB-kaapelin käytössä on ilmeisesti jotain ongelmaa, koska sitä kehotetaan käytettäväksi vasta viimeisenä vaihtoehtona. Käytän tässä omaa Sony Xperia Go-puhelintani, joka on jo aikalailla vanhentunut.

Googlen Play-kaupasta löytyy MIT AI2 Companion-ohjelma. Mikäli olet kirjautunut sisään ja sinulla on Android-laite, voit asentaa sen omalle laitteellesi klikkaamalla "Asenna"-nappia. Ohjelma asentuu laitteellesi automaattisesti. Sanomattakin lienee selvää, että tämä on ilmainen.

https://play.google.com/store/apps/details?id=edu.mit.appinventor.aicompanion3&hl=fi

 Kun ohjelma on asentunut, klikataan ohjelman yläpalkista Connect -> AI Companion


 Klikkaamisen jälkeen tulee näkyviin QR-koodi ja sama koodi kirjainmuodossa.


Nyt pitää löytää puhelimelle/tabletille asennettu AI Companion ja käynnistää se. Tämän jälkeen kuvataan ruudulla näkyvä QR-koodi tai näpytellään kuusikirjaiminen koodi. Jos puhelin on yhdistettynä , laitteiden pitäisi löytää toisensa.




















Kun laitteet ovat löytäneet toisensa, puhelimen/tabletin näytön pitäisi päivittyä sitä mukaa, kun AppInventoriin tehdään muutoksia. Ensimmäisenä laitetaan nappi ruutuun. Laittaminen onnistuu ihan vaan klikkaamalla nappi-tekstiä ja vetämällä se ruudulla näkyvään Android-ruutuun.


"Components"-osassa valitaan nappi, jonka jälkeen sitä pääsee muokkaamaan oikeassa reunassa olevassa "Properties"-osassa.


 Napin tekstiksi voi valita esim "Puhu".


 Tämän jälkeen keskellä olevassa näytössä napin teksti vaihtuu "Puhu"-tekstiksi.


 Noin sekuntia myöhemmin myös omalla puhelimen/tabletin ruudulla olevan napin teksti vaihtuu.



Nappi ei tee vielä mitään, mutta nyt korjataan tuo puute. Oikeassa reunassa on joukko elementtejä, joista valitaan Media-ryhmä.



Media-ryhmästä valitaan "TextToSpeech" ja se vedetään samalla tavalla keskiruutuun. Ruudulle ei tule mitään näkyviin, mutta "TextToSpeech" ilmestyy "Components"-valikkoon ja ruudun alalaitaan "Non-visible Components"-osioon.


Oikeassa reunassa on Blocks-nappi, jota painamalla päästään varsinaiseen koodausikkunaan.


Tämä on nyt se Scratch-tyyppinen osio. Vasemmassa reunassa on värikoodattuja kategorioita, joita klikkaamalla saa näkyviin erilaisia palikoita. Kategoriat on valittu aina näkyviin ja komponenttien määrittelemiin. Aina näkyvät ovat käytännöllisesti katsoen samoja kuin Scratchissä. Komponenttien määrittelemissä kategorioissa on erikoispalikoita, joita tarvitaan ainoastaan kyseisten komponenttien kanssa. Esimerkiksi Button1-valikosta löytyy napin painaminen, napin painaminen pitkään, napin väriin yms liittyviä palikoita. Tutustutaan niihin myöhemmin tarkemmin. Suureen valkoiseen ruutuun rakennetaan varsinaiset scriptit.


Klikkaamalla "Button1"-kohtaa tulee näkyviin siihen liittyvät palikat. Valitaan täältä "When Button1.click do"-palikka ja vedetään se valkoiseen ruutuun. Palikan tehtävä: Kun nappia painetaan ohjelma suorittaa tämän palikan sisällä olevan käskyn.


Seuraavaksi valitaan vasemmasta reunasta "TextToSpeech1"-komponentti ja sieltä "call TextToSpeech1.speak message"-palikka ja vedetään se edellisen palikan sisään. Tämän palikan tehtävä: Muunna jatkona olevan palikan sisältö puheeksi.


 Lopputuloksen pitäisi näyttää tällaiselta. Kuten kuvasta näkyy, violetista puhe-palikasta puuttuu vielä osa.

Siihen voi periaatteessa liittää mitä vain, mutta nyt valitaan siihen oikean reunan "Text"-kategoriasta tyhjä teksti, joka on alla olevassa kuvassa ylimpänä.


Valmis tuotos pitäisi näyttää nyt tällaiselta. 
 Lisätään teksti tyhjään kohtaan. Puhe tulee englantilaisittain korostaen, joten suomenkieliset tekstit muuttuvat lähes tunnistamattomaan muotoon.
Nyt puhelimen/tabletin pitäisi sanoa "Juhuu", kun ruudulla näkyvää nappia painetaan. Omalla puhelimellani tämä vaati jonkin verran kärsivällisyyttä, mutta kyllä se sieltä sitten tuli.

Nyt päätän ohjelman olevan valmis ja haluan siirtää sen omalle puhelimelleni ohjelmaksi muiden joukkoon. Ohjelman voi tallentaa kahdessa eri muodossa, joko .aia- tai .apk-muodossa. .aia on lähdekoodi, joka ei toimi puhelimella ja jonka saa auki vain AppInventorissa. .apk on asennettava paketti, jonka voi esimerkiksi lähettää sähköpostiin, avata ja asentaa puhelimeen. Toinen tapa on ladata ohjelma suoraan puhelimeen QR-koodissa olevasta osoitteesta.

Valitsen QR-koodivaihtoehdon.

Näytölle tulee QR-koodi, jonka voi lukea puhelimella vaikka AI Companion-ohjelmalla tai jollakin muulla vastaavalla QR-koodeja ymmärtävällä ohjelmalla. Koodi on toiminnassa vain kaksi tuntia, joten tämä ei ole hyvä tapa jakaa tekemääsi ohjelmaa kavereille. Jos haluat lähettää ohjelmaasi eteenpäin, lataa se koneelle ja lähetä se eteenpäin vaikka sähköpostilla.


Kuvasin koodin, sain internet-osoitteen ja latasin ohjelman. Ohjelma asentuu napauttamalla "Vahvista ja asenna"-kuvaketta.

Puhelimessa saattaa olla esto ns. kolmansien osapuolien ohjelmistoille.


Tämä hoituu asetuksissa laittamalla pukki "Tuntemattomien tahojen" kohtaan. Omassa puhelimessani Asetukset -> Suojaus -> Tuntemattomat tahot.


Nyt ohjelma asentuu normaalisti.


Ja sovellus on asennettu.



Itse koodaaminen on tässä harjoituksessa vain viiden minuutin juttu, mutta en usko että tämä sujuu kaikilla täysin ongelmitta. Kun ensimmäiset ovat saaneet harjoituksen tähän asti, voivat he ryhtyä muokkaamaan näkymää, näppäimen asettelua, lisäämään näppäimiä ja puhuttavia tekstejä, jne. Tällöin opettajalle jää aikaa selvittää mahdollisia ongelmatapauksia.

Taustavärin tai -kuvan vaihtamalla appista saa ihan eri näköisen.
Tässä oma olympia-aiheinen vesivärityöni taustakuvana.

keskiviikko 26. helmikuuta 2014

HTML-perusteet

HTML-opetus notepadia käyttäen on mielestäni hidasta ja siihen hommaan löytyykin valmiita verkkokursseja. Esittelen tässä nopeasti W3Schools-palvelun, joka on erittäin selkeä ja helppotajuinen. Sivusto on englanninkielinen, mutta opettajan johdolla käytynä ongelmia ei pitäisi tulla. Edustamallani koululla on ollut tapana opetella HTML vasta yhdeksännellä luokalla ja minulla on tällä hetkellä ATK-opetuksessa vain kahdeksasluokkalaisia. Käyn kuitenkin heidän kanssaan HTML-perusteet, jotta pääsemme tutustumaan Wikipedian muokkaukseen hivenen kivuttomammin.

W3Schoolsin etusivulta pääsee suoraan valitsemaan HTML Tutorial-linkin, joka sisältää HTML:n perusteet, XHTML:n, HTML5:n ja CSS:n perusteet. Etusivulla on myös linkit vastaaviin oppaisiin, joissa käsitellään montaa muuta web-ohjelmoinnissa tarvittavaa taitoa.

 Esimerkit ovat selkeitä ja niissä edetään hyvin pienin askelin.
Melkein jokaisessa kohdassa on "Try it yourself"-nappi, jolla saa käynnistettyä editorin. Editorissa pääsee muokkaamaan koodia helposti ja nopeasti.



Koska tekstiä on paljon ja se on englanniksi (osa omista oppilaistani koki tämän ongelmaksi), voi suuri osa tiedosta hukkua matkan varrella, vaikka koodiosaaminen tarttuisikin. Lopussa on 20 kysymystä, joilla voi testata tietojaan.
Jokaisen kappaleen yhteydessä on esimerkkejä, jotka on listattu omalle sivulleen. "Examples explained"-kohdassa esimerkit käydään läpi rautalangan kanssa, joten tämän sivun avulla kuka tahansa voi opettaa HTML-kielen perusteet.



Oppilailla oli valtavan hauskaa, kun huomasivat voivansa tallentaa esimerkiksi Facebookin aloitussivun koneelleen ja pystyvänsä muokkaamaan sen tekstejä haluamikseen.


Mikäli tämä kuulostaa sopivalta harjoitukselta, voi tämänkin tehdä ohjatusti. Kopioimalla jonkun verkkosivun lähdekoodi ohjelmaan esim Notepad++ (Windows) tai TextWrangler (Mac), voi sivulta etsiä tiettyjä tekstipätkiä ja muokata niitä haluamikseen.



Kun muokatun sivun tallentaa .html-muodossa, muutokset tulevat näkyviin. Nokkelimpia muutoksia tekevät joutuvat tutkimaan koodia hyvinkin paljon, jotta saavat muokattua esim. FB:n kirjautumislomakkeen vaihtoehdot haluamikseen.

Kuten sanoin, kävin omien oppilaitteni kanssa läpi vain perusteet Wikipedian kieltä varten. W3Schools-sivulta löytyisi kuitenkin ammennettavaa melkein kokonaiseksi lukuvuodeksi.  Ehkäpä joku innostuu ja kääntää tämän tärkeimmät osat suomeksi. ;)

tiistai 18. helmikuuta 2014

Koodaustunti ja Code.org

Tämä blogi on viettänyt hiljaiseloa joulukuusta saakka. Olemme käyneet oppilaitteni kanssa läpi Open Office-ohjelmistoa, FB-turvallisuutta ja tehneet tekstinkäsittelyharjoituksia. Pakollista pullaa, mutta nyt pääsemme taas tekemään jotain toivottua. Eli jatkamaan ohjelmointia. Tämä blogaus käsittelee Koodaustuntia ja sen valvomista. Kirjoitin tämän melkein kokonaan jo viime vuoden puolella, mutta unohdin viimeistellä ja lähettää tämän. Tässä tämä nyt vihdoin on.

Koodaustunti järjestettiin joulukuussa ja kävin sen läpi kaikkien oppilaideni kanssa. Ongelmien ratkominen on kuulemma paljon hauskempaa kuin matematiikka tai fysiikka, mutta vika voi olla myös minun pitämissäni matfys-tunneissa. Koodaustunti kulki ulkomailla nimellä "Hour of Code" ja sen kotisivuna on Code.org.

Scratchiä käyttäneille ensimmäiset tunnit ovat erittäin helppoja ja kivoja tehdä. Ensimmäisten tehtävien ideana on liikuttaa Angry Bird-hahmo possun luo käyttäen "liiku eteenpäin-" ja "käänny" käskyjä.



Kun tehtävä on suoritettu, näkyviin tulee onnittelulaatikko. Laatikossa on teksti "Näytä koodi", jota klikkaamalla saa näkyviin palikoista rakennetun JavaScript-koodin. Tämä kohta muuttuu mielenkiintoisemmaksi, kun tehtäviä edetään pidemmälle.


Ensimmäiset 20 tehtävää saa tehtyä noin yhdessä tunnissa, ellei jää pahasti jumiin johonkin tehtävään. Tehtävä numero 9 on osoittautunut niin hankalaksi, että se saattaa lannistaa vähemmän motivoituneet. Sen ohitettuaan oppilaat pääsevät ihan mukavasti vauhtiin. Tunneilla kannattaa noudattaa Hour of Code-sivulla ehdotettua tapaa, eli kohdatessaan ylitsepääsemättömän ongelman, hän kysyy apua ensin kolmelta muulta oppilaalta ja vasta sitten opettajalta. Tällöin opettaja saa keskittyä "Wilmaviesteihin" ja kaikkeen muuhun tärkeään. ;) Näiden 20 tehtävän jälkeen voi jatkaa vielä eteenpäinkin kirjautumalla sisään täällä.

Oppilaille ja opettajille on erilliset rekisteröitymislinkit sivun yläreunassa


Palveluun voi rekisteröityä myös Google-, FB-, Twitter- ja Hotmail-tileillä.

Opettaja voi tehdä täällä itselleen profiilin, josta pääsee rakentamaan luokille omat ryhmät. Jokainen ryhmä saa oman kuusikirjaimisen koodin, jonka syöttävät "Opettaja"-kohtaan kirjauduttuaan sisään. Tämän jälkeen opettaja voi etänä seurata oppilaiden kehitystä ja etenemistä. Väärät vastaukset ja yrityskerratkin näkyvät, joten näitä voi surutta antaa kotitehtäväksi. "En osannut"-tekosyy ei ihan riitä, opettaja voi katsoa mitä on tehty ja mikä meni pieleen. Yleisesti ottaen nämä ovat olleet oppilaiden mielestä mukavia tehdä, eikä varsinaista vahtimista ole tarvinnut tehdä.
Jokaiselle opetusryhmälle voi tehdä oman ryhmän, johon oppilaat kirjautuvat käyttäen ryhmän omaa koodia. Kuvassa koodit sotkettu.

Opettaja pääsee seuraamaan jokaisen oppilaan kehitystä ja etenemistä. Ongelmakohdat erottuvat heti.

Tämä sivusto toimii hienosti alustuksena Scratchille tai vaikka tapana antaa läksyä ATK-tunneilta.

perjantai 13. joulukuuta 2013

Seitsemäs tunti: Tasohyppelypelin täydentäminen

Pareton-periaatteen mukaan ensimmäinen 80 % työstä saadaan tehdyksi 20 %:ssa ajasta. Viimeistelyyn, eli viimeiseen 20 %:in, kuluu 80 % työajasta. Tämä on suurinpiirtein totta myös tässä pelissä. Hahmon liikuttelun ja perustoimintojen tekemiseen ei mene paljoakaan aikaa, mutta visuaalinen hiominen on erittäin hidasta homma.

Tässä käyn läpi muutaman esimerkkinä tekemäni idean. Oppilailla oli vapaat kädet tehdä mitä halusivat  ja suurin osa tunnistani kuluikin visioiden suunnitteluapuna tai vikojen syiden etsimiseen. Hour of Code-sivustolta löysin hyvän periaatteen. Kohdatessaan koodiin liittyvän ongelman he kysyvät ensin kolmelta oppilastoveriltaan ja vasta sen jälkeen opettajalta. Tällä tavoin oppilaat joutuvat myös tulkkaamaan kavereidensa tekemiä koodeja, joka on yllättävän haastavaa isolle osalle. Ilmeisesti oman skriptin logiikka on itsestään selvä, koska sen on itse päätellyt ja tehnyt, mutta hivenen toisenlainen logiikka ei meinaa heti aueta ja nopea turhautuminen vie innon auttamiselta. Tämä tapa olisi pitänyt ottaa käyttöön heti aluksi.

Sitten esimerkkeihin.

Teen neljänteen kenttään kaksi liekkiä, joihin osuessaan kissa palaa ja siirtyy aloituskohtaan. Animoin liekit siten, että ne suurenevat ja pienenevät tasaisin väliajoin.

Kun esiintymislava vaihtuu neljänneksi, skripti lähettää "neljäs kenttä"-viestin. Viestin avulla piilotetaan edellisen postin lopussa liikkuneet palkit ja aloitetaan liekkien skriptit.


Teen uuden hahmon. Piirrän liekin, kopioin sen ja muutan sitä hivenen. Nämä kaksi ovat nyt pienen liekin animoitu versio. Kopioin liekin taas ja piirrän siitä reilusti suuremman version

Tarkoituksena on, että liekki roihuaa pienenä ja välillä leimahtaa isommaksi. Kissa voi hypätä liekin yli vain silloin, kun liekki on pieni.




Koska liekki on hahmo, sitä ohjataan sen omilla skripteillä. Haluan liekkien näkyvän vasta neljännessä kentässä, joten ne varmuuden vuoksi piilotetaan vihreää lippua painettaessa. Kun kenttä vaihtuu neljänneksi, esiintymislava lähettää viestin "neljäs kenttä". Tämä aloittaa liekkien animointiskriptin. Ensiksi liekki muutetaan näkyväksi. Isoa ja pientä liekkiä on kaksi erilaista. Pieni liekki vaihtaa asua viisi kertaa, jonka jälkeen iso liekki vaihtaa asua kaksi kertaa. Pieni liekki on siis näkyvissä kaksi ja puoli kertaa niin kauan kuin iso liekki.


Haluan kissan kupsahtavan vähän eri tavoin liekistä. Haluan sen muuttuvan mustaksi ja pomppaavan korkealle. Ensin teen kopion kissasta ja maalaan sen oranssit kohdat mustiksi.

Teen uuden skriptin liekkikuolemaa varten. Olen käyttänyt punaista väriä vain liekissä, joten käytän sitä aloittamaan tämän skriptin. Tuohon voisi laittaa myös "Koskettaako hahmoa X tai koskettaako hahmoa Y", jolloin X ja Y olisivat liekkihahmojen nimet.

Kun hahmo koskettaa punaista väriä se vaihtaa asua mustaksi kissaksi ja pomppaa ylöspäin. Lisäsin perään sekunnin odotuksen, jottei hahmo pysty ohjaamaan lennon aikana. Tämän jälkeen hahmo siirretään aloituskohtaan ja asuste vaihdetaan takaisin kissan asuksi.

Seuraavaksi tehdään laskuri kissan elämille. Alussa kissalla on viisi elämää, jotka vähenevät yhdellä jokaisen kuoleman jälkeen. Teen uuden hahmon, joka toimii laskurina. Piirrän sille kuusi asua, jotka ovat jäljellä olevien elämien määrä tukkimiehen kirjoituksella ja viimeisenä "Peli loppui"-teksti.

Joka kerta, kun kissa osuu liekkiin tai putoaa alas, skripti lähettää viestin "Kuolema".


Jäljellä olevien elämien skripti alkaa "Kuolema"-signaalista. Kun "Kuolema" vastaanotetaan, laskuri vaihtaa seuraavan asusteen. Ohjelma pysäyttää kaiken, kun saavutetaan kuudes asu eli "Peli loppui".


Oppilaat lisäsivät kenttiinsä kolikoita ja rinnakkaisia bonuskenttiä. Pienet ES-tölkit kasvattivat kissaa tai kasvattivat sen nopeutta. Hauskin hahmo oli Scratch-kissa, joka oli puettu Super Marion vaatteisiin ja viiksiin. Aika oli rajoittavana tekijänä, sillä kenttiä tarvittaisiin reilusti yli kymmenen, jotta peli pysyisi mielenkiintoisena. Nyt nopeimmat saivat aikaiseksi vähän yli kymmenen kenttää, jotka pelaa läpi parissa minuutissa. Idea kävi kuitenkin kaikille selväksi ja tekeminen oli hauskaa. Ohjelmointiin tuli kerrankin paljon toistoa, kun samoja hahmoja pystyi käyttämään useissa eri kentissä ja vain niiden ohjaus ja sijoitus vaihtelivat kentän mukaan.

Jälkikäteen ajateltuna tämä olisi ollut tehokkaampi harjoitus esim. neljän hengen ryhmien ryhmätyöskentelynä. Kaikki olisivat ensin yhdessä suunnitelleet juonen, sitten massatuottaneet kenttiä ja vihollisia itsenäisesti. Tällöin valmiin tuotoksen pelattavuus olisi ollut huomattavasti parempi. No, ehkäpä ensi kerralla sitten.

maanantai 2. joulukuuta 2013

Kuudes tunti: Tasohyppelypelin aloittaminen

Tasohyppelypelit, kuten Super Mario, ovat jonkun verran pois muodista, mutta jokainen oppilas kuitenkin tuntee genren. Teemme ensimmäisellä kaksoistunnilla perusteet liikkumiselle, putoamiselle ja kentän vaihtumiselle. Viikon päästä lisätään kenttiä, taustakuvia, kävelyanimaatioita ja muuta sen sellaista.

Härkää sarvista ja aloittamaan.

Aloitan kentästä. Koska kyseessä on tasohyppely, piirrän kissalle ... tasoja. :) Ideana on kävellä ja hyppiä kentän vasemmasta laidasta oikeaan, jolloin kissa pääsee seuraavaan kenttään.


Kissa on perusasetuksilla jättimäinen tällaiseen peliin, joten pienennän sitä reippaasti


 Nyt kissa on suurinpiirtein oikeassa mittakaavassa kenttään nähden.


Sitten ryhdytään rakentamaan kissan liikuttelua. Oikea-vasen -liikuttelu tehdään samalla tavalla kuin rallipelissäkin. 


Haluan kissan putoavan alaspäin, joten pystysuuntaisen liikkeen aikaansaamiseksi teen uuden muuttujan.



"y vel" tulee sanoista Y velocity, eli pystysuuntainen nopeus. Ohjelmaan rakennetaan "painovoima", joka muuttaa pystysuuntaista nopeutta koko ajan. Kissa siis kiihtyy alaspäin mennessään. Kissan nopeus siis. ;) Skriptiä luetaan jatkuvasti ja joka kerta alaspäin suuntautuva nopeus kasvaa 0,3 askelta (toisin sanoen ylöspäin suuntautuva nopeus pienenee 0,3:lla askeleella eli se kasvaa -0,3 askelta). Ohjelma muuttaa hahmon y-sijaintia muuttujan y vel verran.


Jos nuolta ylöspäin painetaan, ylöspäin suuntautuva nopeus muuttuu 5:ksi. Vaikka se muuttuu 5:ksi, se lähtee pienenemään heti ja hetken päästä kissa alkaa taas pudota. Nuoli ylös saa siis aikaan hypyn.


 Kissa putoaa nyt kaikkien palkkien läpi, joten hahmolle pitää kertoa jotenkin minkä päällä voi seistä. Eli kissan koskettaessa mustaa väriä (tasoissa) putoaminen pysäytetään.


Kissan ylöspäin suuntautuvassa liikkeessä on kyse ennemminkin lentämisestä kuin hypystä, sillä kissa suuntaa kulkunsa ylöspäin riippumatta siitä, onko sillä jotain mistä ponnistaa vauhtia. Lisätään hyppykomentoon ja-lause, johon laitetaan hypyn onnistumisen ehdoksi mustan värin koskettaminen ja nuolinäppäimen painaminen.


Kissan pitäisi ilmestyä takaisin aloituskohtaan, kun se on pudonnut rotkoon. Muuten kenttää ei voida kokeilla uudelleen. Tämä tehdään jos-lauseella, joka aktivoituu hahmon pudotessa tietyn korkeuden alapuolelle. Kun y-sijainti on haluttua pienempi, lause nollaa nopeuden ja siirtää hahmon aloituskohtaan.


Tämänhetkisellä koodilla kissa kulkee tasojen läpi. Tämä ei ole toivottavaa ja se pitää saada estettyä jotenkin. Tämän voisi tehdä muuttujallakin, mutta tässä esimerkissä käytetään negaatiota eli ei-lausetta. 


Tasojen alareunat maalattiin ruskeaksi ja liikuttelun ehtoihin laitetaan ja-lauseen sisään nuolinäppäimen painaminen ja ei-ruskean koskettaminen. Tämä tarkoittaa siis sitä, ettei hahmoa saa liikutettua sivusuunnassa mikäli se koskettaa ruskeaa väriä.


Nyt kaikki alkaa olla hienosti. Kentän oikeasta reunasta pitäisi päästä seuraavaan kenttään, joten tehdään sinne samantyyppinen rajaus kuin y-suunnallekin. Jos hahmo menee tiettyä x-koordinaattia pidemmälle, se siirretään aloituskohtaan. Samalla skripti lähettää "Seuraava kenttä"-viestin.


Esiintymislavan täytyy olla ensimmäinen kenttä, kun peli aloitetaan. Kun sitten vastaanotetaan "Seuraava kenttä"-viesti, vaihdetaan tausta seuraavaksi.


Taustakuvissa pitäisi aloituskohdan olla aina samalla korkeudella. Tällöin ei tarvitse säätää putoamiskuolemalle ja seuraavan kentän aloitukselle mitään taustakohtaisia palautuskoordinaatteja. Tämä onnistuu helpoimmin kopioimalla tausta ja pyyhkimällä kaikki muu aloitustasoa lukuunottamatta pois.


Kopioinnin jälkeinen muokkaus

 Ja sitä seuraava muokkaus. Tähän teen liikkuvia tasoja, joiden päälle pitää pystyä hyppäämään.

Tässä harmaat tasot liikkuvat ylös- ja alaspäin eri tahdeissa.


"Odota kunnes"- palikka toimii jos-lauseen tavoin, mutta pysäyttää koodin siihen asti, että ehto täytetään. Laitan esiintymislavan ilmoittamaan viestillä, kun se vaihtaa esiintymislavaksi kolmosen. Tällä viestillä  saan aloitettua kenttiin kuuluvat animaatiot ja voin ohjata samoja hahmoja eri tavoin eri kentissä.


Harmaat tasot ovat kaksi erillistä hahmoa, joille teen omat skriptit. Kun peli aloitetaan, ne piilotetaan. En halua, että ne tulevat näkyviin ennen kolmatta kenttää, joten ne näytetään vasta kun "Kolmas kenttä"-viesti vastaanotetaan. Haluan hahmojen menevän vain ylös ja alas, joten laitan niille sellaiset skriptit. Toinen aloittaa menemällä ylöspäin, toinen alaspäin.

Tätä samaa jatketaan seuraavalla kerralla, lisään tunnin myöhemmin.