Kő Papír Olló!
Bevezető
A kő–papír–olló egy olyan játék, amit szinte mindenki ismer — gyors, egyszerű és bárhol elő lehet venni. Érdekesség, hogy a játék több száz éves, és már nagyon régi kultúrákban is használták döntésekhez. Most megmutatjuk, hogyan lehet ezt az egyszerű játékot micro:biten is elkészíteni, és hogyan fejleszthetjük lépésről lépésre egyre tovább.
Ebben a projektben 5 lépésre osztva fogjuk felépíteni a teljes játékot.
Most kezdjük az első lépéssel!
1. Véletlen választás
Ebben az első lépésben elkészítjük a kő–papír–olló játék legkisebb, legegyszerűbb építőelemét:
a micro:bitet megtanítjuk magától választani kő, papír vagy olló közül.
Ez még nem egy teljes játék, és nem is dönt arról, ki nyer – csak arról szól, hogy a micro:bit hogyan „dob” egy lehetőséget. A következő lépésekben erre építünk majd tovább.
Mit kell elérnünk ebben a feladatban?
A micro:bit:
érezze, ha megrázzuk,
ilyenkor válasszon egyet a három lehetőség közül,
a választást egy ikon formájában jelenítse meg,
és amíg nem rázod meg újra, addig ugyanaz az ikon legyen látható.
1. lépés: Hozz létre egy változót
Nyisd meg a Változók menüt.
Hozz létre egy új változót „eredmeny” névvel.
Tedd be az
eredmeny = 0blokkot az „Indítás” blokkba!
Ez a változó fogja tárolni, hogy a micro:bit éppen mit választott.
2. lépés: Kezeld a rázást
- Helyezd el a szerkesztőben az „amikor rázás érzékelve” blokkot a Bemenet menüből!
- Most tedd bele:
A Változók menüből húzd be az „eredmeny legyen” blokkot. - A 0 helyére a Matek menüből húzd be a „véletlenszám 0 és 10 között” blokkot, majd írt át, hogy 1 és 3 között sorsoljon számot a micro:bit!
Ezzel elérted, hogy rázáskor a micro:bit 1 és 3 között választ egy számot, és ezt elmenti az eredmeny változóba.
3. lépés: Eredmény megjelenítése
- Helyezd el a szerkesztőben az Alapok menüből az „állandóan” blokkot, ha még nincs ott.
- A Feltételek menüből tegyél egy elágazást az állandóan blokkba.
- Töltsd ki az elágazást: ha az eredény 1, mutassunk követ, 2 esetén papírt és ha 3 akkor pedig ollót. Egyébként töröljük a kijelzőt.
2. Erdedmény küldése rádión
Ebben a lépésben már nem egyedül játszik a micro:bit, hanem két eszköz együtt. Mindkét micro:bit kiválaszt egy jelet (kő/papír/olló), elküldi az eredményét rádión, és a program eldönti, ki nyert.
A végeredmény az lesz, hogy rázás után mindkét játékos látja, hogy ebben a körben nyert, vesztett, vagy döntetlen lett.
Mit kell elérnünk ebben a feladatban?
A micro:bit:
- külön tárolja a saját és az ellenfél választását,
- rázáskor sorsol egy jelet és elküldi azt rádión,
- fogadja a másik micro:bit üzenetét,
- ha mindkét választás megvan, eldönti az eredményt, megjeleníti az ikont, majd töröl mindent a következő körre.
1. lépés: Saját és ellenfél eredményének tárolása
Nyisd meg a Változók menüt.
Nevezd át az „eredmeny” változót „eredmeny_sajat”-ra
Hozz létre egy új változót „eredmeny_ellenfel” névvel
Tedd be az
eredmeny_ellenfel = 0blokkot is az „Indítás” blokkba!
Ezzel elérjük, hogy a micro:bit mindig tudja:
mit választott ő maga,
és mit kapott a másiktól.
2. lépés: Rádiócsoport beállítása
- Nyisd meg a Rádió menüt.
- Helyezd el a „rádió: csoport legyen…” blokkot az Indítás részben.
- Állítsd a csoport számát például 1-re (ugyanarra mindkét micro:bitnél).
Fontos: csak azok a micro:bitek beszélgetnek, amelyek ugyanazon a csoportszámon vannak.
3. lépés: Csere-bere
- Helyezd el egy feltételt az „amikor rázás érzékelve” blokkba: csak akkor sorsoljon, ha eredmeny_sajat == 0.
- Helyezd el benne a korábbi értékadást véletlen számmal.
- Végül helyezd át az állandóan blokkból a megjelenítést is az értékadás után!
Fontos: A külső feltételünk azért szükséges, hogy meg kelljen várjuk amíg a másik játékos is mutat.
4. lépés: Eredmény kiértékelése #1
- Helyezd el a Rádió menüből a „rádiós adat vételekor receivedNumber” blokkot.
- Állítsd az eredmeny_ellenfel változó értékét a receivedNumber-re.
- Helyezd el a feltételt: Ha a saját eredményünk NEM nulla akkor…
- Ezen belül valósítsd meg a kiértékelést. Pipa ha nyertünk, alvós vagy egyenlő ikon ha döntetlen és X ha vesztettünk.
- Ezt tartsuk meg 2 másodpercig, majd nullázzuk le az eredményeket. Így tudjuk elérni, hogy új kört játszhassunk!
- Töröld a kijelzőt.
Fontos: Figyeljük meg, hogy nem kell minden esetet kezeljünk! Ha nem nyertünk, vagy nem döntetlen, akkor biztosan vesztettünk, így a különben ágba mehet az X!
5. lépés: Eredmény kiértékelése #2
- Másold át a rádiós adat vételekor blokkból a feltételeket
- Állítsd át, hogy ne a saját eredményünk, hanem az ellenfeléét ellenőrizzük, hogy NEM egyenlő 0-val.
Fontos: Figyeljünk oda, hogy amíg a beérkező üzenetnél azt ellenőriztük, hogy a sajátunk NEM nulla, küldéskor azt ellenőrizzük, hogy az ellenfél eredménye NEM nulla! Vajon miért?
3. Függvények!
A korábbi feladatunk már nagyon szuperül tud két játékos között egy mérkőzést lejátszani, viszont a kódunkban nagy a rendetlenség. 😥
Ebben a lépésben rendet rakunk a kódban: a győztes eldöntését egy külön „kiertekeles” nevű függvénybe tesszük. Így átláthatóbb lesz a program, és ha később változtatni szeretnénk a szabályokon vagy az ikonokon, elég csak egy helyen módosítani.
Mit kell elérnünk ebben a feladatban?
A játék kiértékelését tegyük külön függvénybe, és a megfelelő helyeken csak ezt a függvényt hívjuk meg.
1. lépés: Hozz létre egy új függvényt!
Nyisd le a „Haladó”, majd azon belül a Függvények menüpontot. Itt kattints a „Függvény létrehozása…” gombra.
Hozz létre egy új függvényt „kiertekeles” névvel. A „Kész” gombra kattintással meg is el is készítetted!
A függvény egyelőre üres, de ide fog kerülni minden, ami eddig az eldöntéséről szólt.
Ettől kezdve, ha meghívod a kiertekeles függvényt, ugyanazt a folyamatot futtatod le mindenhol!
2. lépés: Átpakolás a függvénybe
- Helyezdát az „amikor rázás érzékelve” blokkból és a „rádiós adat vételekor” blokkból a megyegyező sorokat a függvénybe! (Természetesen csak az egyik helyről, a másikról pedig töröljük!)
- Emlékezzünk vissza! Ha kapunk eredményt akkor a saját, ha küldünk eredményt akkor az ellenfél eredményét ellenőrizzük! Mivel az nem ismétlődő kód azt NE másoljuk át!
Ezzel elérted, hogy rázáskor a micro:bit 1 és 3 között választ egy számot, és ezt elmenti az eredmeny változóba.
3. lépés: Függvény hívása
- Helyezd el a szerkesztőben az Függvények menüből a „hívás kiertekeles” blokkot a rázásban, ahol eddig az a kód volt ott!
- Helyezd el a szerkesztőben az Függvények menüből a „hívás kiertekeles” blokkot a rádiós adat fogadásában, ahol eddig az a kód volt ott!
4. Választás gombokkal
Ebben a lépésben már nem a micro:bit sorsol, hanem te döntöd el, hogy követ, papírt vagy ollót mutatsz.
A választást az A és B gombokkal állítod be, a rázás pedig mostantól azt jelenti: „készen vagyok, elküldöm az ellenfélnek, amit választottam”.
Mit kell elérnünk ebben a feladatban?
- Vonjuk át az ikon kirajzolást is egy függvénybe
- Gombokkal válasszunk kő, papír és olló között
- Rázással „elküldjük” a választ
1. lépés: Kirajzolás is függvénybe
Hozz létre a tanultak szerint egy ikon_kirajzolas nevű függvényt!
- Mozdítsd át a kirajzolásért felelős kódot ebbe a függvénybe!
2. lépés: Várakozik változó felvétele
Vegyünk fel egy „varakozik” változót!
Állítsuk az értékét hamis-ra!
Ez a változó abban fog segíteni, hogy egyszerre csak egy eredményt küldjünk el, és egyszerűsíti a kiértékelést is!
3. lépés: Gombokkal válasszunk!
Az A gomb lenyomásakor az
eredmeny_sajatértékét úgy változtasd, hogy visszafelé lépkedjenA B gomb lenyomásakor pedig előrefelé lépkedjen
- Figyeljük meg, hogy a két blokk 4 helyen leszámítva pontosan megegyezik! Érdemes lehet duplikálni a meglévő kódot!
4. lépés: Rázásra elküldjük a választ
Bővítsd ki a rázás feltételét: csak akkor történjen bármi, ha nem várakozunk éppen!
- A feltételen belül pedig írd bele: várakozás (arra, hogy az ellenfél mit fog mutatni) = igaz!
- Ne felejtsük el a kiértékeléskor visszaállítani a várakozás értékét hamisra! Hiszen miután kiderül ki nyerte a kört, már újból tudunk új értéket mutatni!
5. A nyertes megjelenítése
Ebben a lépésben ….
…..
Mit kell elérnünk ebben a feladatban?
A micro:bit:
…..
1. lépés: Pontszámok és név változók
…
….
2. lépés: Győztünk!
…
….
3. lépés: Ellenfél győzött
…
Fontos: a micro:bit megkülönbözteti, hogy milyen típusú adatot kapott a rádión keresztül. Így ha szöveget kapunk, akkor tudjuk, hogy a másik játékos győzött, ha pedig számot küld nekünk, akkor az csak a kő-, papír- vagy ollóhoz tartozó szám!