Nem akármilyen hét köszöntött ránk, ugyanis április 4 és 8 között rendezik az első Digitális Témahét programját, amely keretén belül országszerte több száz általános és középiskolában jelenhetnek meg a modern digitális eszközök és szolgáltatásokat az oktatás részeként. A HelloWorld oktatási mozgalmunkkal mi is csatlakoztunk az Emberi Erőforrások Minisztériuma által kiírt kezdeményezéshez, a hét folyamán megosztva a teljes Scratch-suli tananyagunkat, amely segítségével bárki elsajátíthatja a programozás alapjait. Lentebb elolvashatod sorozatunk ötödik részét - ha többre vágysz, gyere vissza holnap is, vagy látogasd meg Robotprogramozó táboraink valamelyikét.
Az idei nyár sem maradhat HelloWorld tábor nélkül! Milyen lesz? Vegyétek a tavalyit, és szorozzátok meg kettővel :) Új helyszínnel, új programokkal és tananyagokkal készülünk. Velünk tartotok?
Közzétette: HelloWorld – 2016. március 3.
Haladó szintre lépünk azokkal, akik az elmúlt hónapokban velünk együtt programoztak. Alaposan körbejártuk már az MIT mérnökei fejlesztette Scratch programot, amely nem csupán az algoritmikus gondolkodás megalapozásában vállal hatalmas szerepet, de a modern kódnyelvek eszköztárából is számos ízelítőt kínál, ezáltal ideális bevezető a programozás tanulásához. Programoztunk vele Super Mario játékot, Space Invaderst, számológépet, legutóbb pedig egy kártyajátékkal szórakoztattuk el magunkat. Eljött az ideje, hogy barátainkat is meginvitáljuk egy saját készítésű applikáció virtuális csataterére, vagyis annak, hogy multiplayer játékot készítsünk.
Egy komolyabb erőfeszítések nélkül elkészíthető példán mutatjuk be két különböző többjátékos mód létrehozásának menetét. Ennek prezentálására most is egy klasszikus játékot választottunk, amelyen keresztül a multiplayer módok alapjaiba kínálunk betekintést. Kiszemeltünk pedig nem más, mint a nyolcvanas évek klasszikussá vált Tron filmjén alapuló fénymotoros verseny.
Alapok összeállítása
Kezdő felállásként nem kell mást tennünk, mint egy új szereplő felvételével motorunk fotóját a játéktérre importálni, és a kívánt kezdőfelületen elhelyezni. A hátteret is tetszőlegesen választhatjuk meg, bár ha a klasszikus kék és piros fénycsíkokkal kívánjuk felvértezni járműveinket, a háttérről radírozzuk le az ilyen komponenseket. Miután szereplőnk felkerült a vászonra, el is kezdhetjük programozását, méghozzá egy [Start-blokk] felhelyezésével.
A képletet bővítsük motorunk mozgatófunkcióival, vagyis rögzítsük az indítási hely koordinátáit (egyszerűen húzzuk be az aktuális pozíciónkra mutató [ugorj] függvényt a programkódunkba), állítsuk be járművünk orientációját (ha a bal oldalra helyeztük, akkor a [nézz 90 fokos irányba] műveletre lesz szükségünk), illetve adjuk még az egyre gyarapodó blokkhalmazhoz a [jelmez balra-jobbra nézhet] funkciót is (erre azért lesz szükség, hogy forduláskor ne álljon fejre a jelmezünk).
A motorunk által húzott fénycsíkot rajzolással fogjuk a vászonra varázsolni, ehhez programkódunkba építsük be tollunk színének (válasszuk a kéket) és méretének (10-es körüli érték már kellően látványos) kezdőopcióit, majd tegyük le a tollat, és a képernyőn lépkedő szereplőnk már húzza is maga után a csíkot. Persze ehhez előbb még mozgásba kell hoznunk a jelenleg még egy helyben várakozó modellünket, ehhez pedig a már összeollózott kódunk végére csupán egy [mindig] ciklust kell elhelyeznünk, melynek magjába a [menj előre 2-t] utasítást pakoljuk, és zászlókattintást követően már indul is versenyzőnk.
Mivel látjuk, hogy a játékteret szépen összefirkálta az előretartó mozgás, a rajzolóutasítások mellé elhelyezzünk még egy [töröld a rajzokat] parancsot is, így a fénycsíkunk az újraindítást követően semmissé válik. Mivel nem csupán az előrehaladást szeretnénk gyakorolni, programozási felületünkön helyezzük el a [w], [a], [s], [d] billentyűk lenyomását figyelő [Start]-blokkot, majd a gombokhoz rendeljük a kapcsolódó irányokat (le és fel esetén helyezzük a képletbe a [jelmez foroghat] parancsot, oldalirányoknál pedig a [balra-jobbra nézhet] lehetőségeket is társítsuk).
Valós időben
Az alapvető kontrollbillenytűk már az ujjainkhoz igazodva várják parancsainkat, így elkezdhetjük előkészíteni a terepet az ellenfél szereplőjének, méghozzá oly módon, hogy duplikáljuk a jelenleg egyedüliként a képernyőt uraló motorunkat. A valós idejű többjátékos mód (mivel az alapvető eszköztár csak offline multiplayerek elkészítését teszi lehetővé) valójában nem áll másból, mint az eredeti modellre beállított klaviatúrakiosztás újrakonfigurálásából, ily módon a második játékos különálló irányítási lehetőséget kap. Tehát a másolatként megjelent modellt helyezzük el a képernyőn (a szemléletesség kedvéért a már képernyőn pihenő szereplőnkkel szembe állítottuk, és ez alapján írjuk le, mit is kell módosítanunk).
A [zászlóra kattintás] blokk alatti kódban mindössze az új modell alapállapotú helyét kell átírni (tehát módosítsuk az [ugorj ide] koordinátáit), majd az irány ellentétesre váltását követően még érdemes lesz egy új színt választani tollunk alapjául. Ezt követően már csupán a mozgatóbillentyűket kell átállítanunk a betűk helyett a nyilakra, és kész is a második játékos kontrollfelülete is. Persze ezzel még csupán azt sikerült megvalósítanunk, hogy egyszerre két karakterrel tudunk mozogni a képernyőn, az ütközések azonban még nem járnak további kockázatokkal - ezen néhány apró módosítással változtatunk. Elsőként az előrehaladásra megalkotott [mindig] ciklus magjába helyezzünk el egy ha-akkor elágazást, melynek feltételeként az [érinted: játéktér széle] blokkot adjuk meg, a belsejében pedig egy üzenetküldést helyezzünk el (p2nyert néven, hisz ilyen esetben az ellenfél nyer), és a [minden feladat álljon le] funkcióval zárjuk a blokk működését. Miután ezzel végeztünk, vegyünk fel a [mindig] cikluson belül egy újabb [ha-akkor] elágazást, melynek feltételében az ellenfél színének érintését vizsgáljuk, belsejében pedig az előző képletben megalkotott üzenetküldés-lezárás kettőst helyezzük el.
A győztes kihirdetésére hozzunk létre egy új szereplőt, melynek egyik jelmezében a kék játékos, a másikban a piros játékos győzelmét jelezzük, és a startállapotú zászlóklikkelés során tüntessük el a kíváncsi szemek kereszttüzéből. Helyezzünk el a programozói felületen egy "p1nyert" és egy "p2nyert" üzenetek érkezését váró blokkot, aminek hatására a győztes jelmezének színében pompázik majd a megjelenő felirat.
Körökre osztva
Valós idejű változatunk elkészítése után már gyerekjáték lesz megalkotni a körökre osztott verziójú fénymotoros játékot, minimális kiegészítésre lesz csupán szükségünk a lépések egymásutánjának szabályozásához. Elsőként hozzunk létre két változót ([lepes1] és [lepes2] néven), az egyik értékét a programciklusunk elején (rögtön a zászlóra kattintás érzékelése után) állítsuk nullára, a másik pedig vegye fel induláskor az 1 értéket. Mivel nem szeretnénk, hogy a főprogram ezt követően folyamatos mozgást hajtson végre, távolítsuk el a [mindig] ciklus [menj] utasítását; a lépéseket ezentúl a billentyűk detektálásán belül hajtjuk majd végre. Ennek megvalósítására helyezzünk el egy [ha-akkor] elágazást az egyik lenyomás-jelzőnk alatt, melynek feltételeként a lepes2 null-egyenlőségét állítsuk be (ha az elsőként létrehozott motort programozzuk).
Az elágazás magjában egy léptető utasítást helyezzünk el (10-es érték már kellően látványos távolságot mozdít járművünkön) és mellette 1-re állítsuk a lepes2-t, míg a lepes1-et a 0 értékkel vértezzük fel. Ezen blokkot aztán tovább klónozhatjuk a többi vezérlőbillentyűre, és a második játékos motorjára is (itt arra figyeljük, hogy az egyes funkciókban a lepes1 és lepes2 értékét fel kell cserélnünk), ha pedig mindent elhelyeztünk, kész is vagyunk játékunk körökre osztott verziójával.
Mesterséges Intelligencia alapok
Ismételten elkészítettük a bemutatott program továbbfejlesztett változatát is, melyben alkottunk egy menüt a játékmódok közötti váltás kezelésére, és a két ismertetett többjátékos mód mellé egy egyedül is kipróbálható single player opciót is létrehoztunk - innen letöltheted. Itt az ellenfél kezelésére már egy egészen egyszerű mesterséges intelligenciát is kreáltunk, amely a lépéseink alapján hozza meg saját következő akcióját (vagyis ha a vezérlőbillentyűnk valamelyikét lenyomjuk, a konkurens motor egy véletlenszerűen generált érték alapján az aktuális irányához képest jobbra vagy balra elfordul). Emellett a járművünk haladásának nyomán megjelenő csíkok detektálását sem a motorok segítségével hajtjuk végre, hiszen elegánsabb, ha a saját fénycsík érintésére is veszítünk. Ennek megfelelően a vezérelhető szereplőink mozgását követő kis négyzetek segítségével küzdenek egymás ellen mintapéldánk versenyzői.
A sorozat tovább részei:
1 - Kezdjünk el programozni
2 - Támadnak az űrlények
3 - Műveletek bűvkörében
4 - Kártyajáték születik
5 - Többjátékos üzemmód
6 - 3D-s játékkészítés
7 - Extrák a programozáshoz