Navrhujeme projekt
| Analyzujeme projekt | Programujeme
| Úlohy
Čo budeme robiť
-
hľadať súčty, ktoré nám vygeneruje počítač, čakať kedy dosiahneme bingo
Čo už musíme vedieť
-
pracovať s tlačidlami, definovať na ne udalosti
Naučíme sa
-
vytvárať štvorcovú hraciu plochu z tlačidiel, dávať na tlačidlá rôzne Popisy,
kontrolovať splnenie zložitejšej podmienky
Navrhujeme projekt
Celkom zaujímavou hrou pre jedného hráča
alebo pre hráča a počítač je matematické Bingo: na hracej ploche 5x5 políčok
sa nachádza 25 čísel z nejakého rozsahu napr. od 2 do 20 (pre väčšie deti
môžeme voliť väčšie čísla). Počítač potom generuje príklady na sčítanie
(pre žiakov vyšších tried môžeme použiť aj iné matematické operácie). Úlohou
hráča je nájsť na hracej ploche výsledok pre tento príklad alebo stlačiť
tlačidlo pass, ak sa na hracej ploche výsledok nenachádza.
Ak hráč výsledok našiel správne, toto číslo z hracej plochy zmizne. Hra
končí, keď sú v niektorom z riadkov, stĺpcov alebo uhlopriečok všetky čísla
"zmiznuté". Ak hráč výsledok neurčí správne alebo si nevšimne, že toto
číslo sa na hracej ploche ešte nachádza,
pripočíta sa mu to do počtu chýb. |
|
Analyzujeme projekt
Hracia plocha pre Bingo bude veľkosti 5x5
a sú to tlačidlá – mohli by to byť aj korytnačky, ale s tlačidlami bude
riešenie jednoduchšie.
Na každom z nich bude v jeho Popise
(položka v pravoklikovom menu Zmeň)
zrejme zapísané číslo, ktoré počítač vygeneruje.
Ďalšie dve tlačidlá budú určené na začatie novej hry (tlačidlo Nová
hra) a na to, aby hráč mohol "preskočiť"
daný príklad, ak sa jeho výsledok nenechádza na hracej ploche (tlačidlo
pass).
Na stránke sa ešte nachádza niekoľko textov:
-
text1,
do ktorého počítač vygeneruje príklad, napr. na sčítanie dvoch čísel od
1 do 10
-
text2 s oznamom
Počet
chýb
-
text3
na počítanie chýb, v ktorom je na začiatku hodnota 0
-
text4
s červeným oznamom BINGO, keď hráč vyhrá
Programujeme
Na začiatok zrušme korytnačku k1,
ktorá sa nachádza na stránke pri spustení Imagine – v jej pravoklikovom
menu vyberme Zruš k1.
Hraciu plochu by sme mohli opäť vytvárať
kopírovaním cez Schránku, ale po predošlých aktivitách určite každého napadne,
že vytvoríme triedu.
Čo majú všetky tlačidlá–bingo spoločné?
-
veľkosť, zvoľme napr. 40x40 bodov
-
udalosť priZapnutí,
ktorá zistí, či hráč uhádol správne číslo, teda to, ktoré je výsledkom
vygenerovaného príkladu a potom zistí, či pri tomto ťahu hráča nevzniklo
bingo – na to môžeme definovať príkaz kontrola
-
procedúru kontrola,
ktorá zistí, či je v niektorom riadku, stĺpci alebo uhlopriečke bingo,
t.j. všetky tlačidlá v tomto útvare majú prázdny Popis
Čo majú naopak odlišné?
Vytvorme triedu Bingo,
ktorá bude mať premennú veľkosť
a udalosť priZapnutí, ktorá vyvolá príkaz kontrola.
Definovanie samotného príkazu kontrola
necháme do editora procedúr – mohli by sme ju definovať aj v riadku, ale
v editore to bude prehľadnejšie.
? nováTrieda "Tlačidlo "Bingo
[veľkosť [40 40] priZapnutí [kontrola]]
Pozrime sa do Pamäte, dvokliknime na triedu Bingo
a v záložke procedúry zadefinujme aspoň veľmi jednoduchú procedúru kontrola,
v ktorej vyprázdnime položku Popis
tlačidla, na ktorom vznikla udalosť priZapnutí
– zatiaľ bude táto procedúru takáto jednoduchá preto, že ešte možno nemáme
celkom predstavu, čo by sme do nej zapísali.
viem kontrola
nechPopis "||
koniec
Na vytvorenie tlačidiel hracej plochy použijeme
globálnu procedúru hraciaPlocha,
ktorá vytvorí všetkých 25 tlačidiel–Bingo:
? ed "hraciaPlocha
viem hraciaPlocha
urobTu "x -140
urobTu "y 110
urobTu "náhodnéČíslo
2+náhodne 19
opakuj 5
[urobTu "r poč
opakuj 5
[urobTu
"s poč urobTu "náhodnéČíslo 2+náhodne 19
nové "Bingo
[meno (slovo :r :s)
poz (zoznam :x :y)
popis (:náhodnéČíslo)] urob "x :x+40]
urob "x -140 urob "y :y-40]
koniec
Vytvorme hraciu plochu a vyskúšajme klikať
na jednotlivé tlačidlá:
? hraciaPlocha
Vzniklo 25 tlačidiel po 5 v riadkoch, v
každom z nich je nejaké číslo do 20, keď klikneme na tlačidlo, toto číslo
z neho zmizne.
Vložme na stránku nové tlačidlo, zmeňme
mu meno na nováHra,
Popis
na Nová hra a definujme zatiaľ udalosť
priZapnutí
na zavolanie procedúry hraciaPlocha,
vyskúšajme toto tlačidlo.
Na stránku vložme ešte ďalšie tlačidlo,
zmeňme mu meno na pass,
Popis
na pass.
Poznámka: Popis a meno tlačidiel
volíme rovnaké, aby si ich ľahko zapamätali.
Na stránku vložme text,
v ktorom sa bude objavovať príklad – všimnime si, že má meno text1,
zmeňme mu font, veľkosť a farbu tak, ako sa nám to páči.
Kedy sa má objaviť nový príklad?
-
pri začatí novej hry,
-
pri správnom alebo nesprávnom určení výsledku
tohto príkladu, t.j. pri udalosti priZapnutí
niektorého tlačidla–Binga z hracej plochy,
-
pri stlačení tlačidla pass
Keďže miest, odkiaľ potrebujeme vyvolať generovanie
nového príkladu je niekoľko, vytvorme opäť globálny príkaz:
? ed "generujPríklad
viem generujPríklad
urobTu "sčítanec1 1+náhodne
10
urobTu "sčítanec2 1+náhodne
10
urob "súčet :sčítanec1+:sčítanec2
text1'nechHodnota (slovo
:sčítanec1 "+ :sčítanec2 "=)
koniec
Poznámka: Všimnime si, že premenné
sčítanec1
a sčítanec2
sú len lokálne, ale premenná súčet
je globálna – budeme ju potrebovať pri kontrolovaní hodnoty na stlačenom
tlačidle–Bingo.
Teraz doplňme volania tejto procedúry na
všetky tri spomínané miesta:
-
otvorme dialóg Zmeň tlačidla nováHra
a za volanie príkazu hraciaPlocha
doplňme volanie príkazu generujPríklad
-
vojdime do Pamäte a zmeňme príkaz kontrola
tak, aby sa Popis vyprázdnil iba vtedy, ak je hodnota v globálnej
premennej súčet
rovnaká ako hodnota na tomto tlačidle. Po skontrolovaní tejto hodnoty opäť
vyvolajme príkaz na vygenerovanie nového príkladu:
viem kontrola
ak Popis=:súčet [nechPopis
"||]
generujPríklad
koniec
-
otvorme dialóg Zmeň tlačidla pass
a do jeho udalosti priZapnutí
tiež zapíšme volanie príkazu na vygenerovanie nového príkladu na sčítanie
Vyskúšajme všetky tlačidlá.
Čo nám ešte chýba?
Príkaz kontrola
by mal vedieť zistiť, či
-
po hráčovom ťahu vznikla chyba, t.j. hráč
klikol na tlačidlo, na ktorom nebol správny výsledok, vtedy treba zvýšiť
počet hráčových chýb, ktoré môžeme mať uložené napr. v texte alebo
či pri tomto ťahu–kliknutí na tlačidlo
nevzniklo náhodou bingo, t.j. či v niektorom riadku, stĺpci alebo uhlopriečke
nemajú všetky tlačidlá–Bingo prázdny Popis,
vtedy ukážeme nápis BINGO, ktorý môžeme mať pripravený tiež v texte
Mohli by sme kontrolovať celú hraciu plochu,
ale keďže sme si dobre pomenovali tlačidlá (podobne ako sme zvyknutí v
matematike označovať matice), môžeme skontrolovať len riadok a stĺpec,
v ktorom naozaj mohlo nastať bingo podľa toho, na ktoré tlačidlo hráč naposledy
klikol. Úlohu kontroly riadku, stĺpca a uhlopriečok si pre jednoduchosť
rozdeľme na 3 časti:
riadok, v ktorom mohlo zvniknúť
bingo určuje prvý prvok z mena tlačidla, na ktoré hráč klikol, t.j.
treba skontrolovať celý riadok napr. tak, že prejdeme všetky tlačidlá v
tomto riadku a zistíme, či majú prázdny Popis
stĺpec, v ktorom mohlo vzniknúť
bingo určuje druhý prvok z mena tlačidla,
na ktoré hráč klikol, t.j. treba skontrolovať celý stĺpec napr. tak, že
prejdeme všetky tlačidlá v tomto stĺpci a zistíme, či majú prázdny Popis
uhlopriečky sú len 2, takže ich
môžeme kontrolovať vždy alebo zistiť, či tlačidlo leží na niektorej z nich
a iba vtedy ju skontrolovať
Na to, aby sme vedeli, ktoré texty ukázať pri popisovaných situáciách položme
najprv na stránku ďalšie tri texty. Všetkým upravme font, veľkosť a farbu
tak ako sa nám to páči:
-
oznam Počet chýb
-
k nemu blízko text3
s zatiaľ s hodnotou 0, do ktorého budeme spočítavať hráčove chyby
-
text4
s oznamom BINGO, ktorý na začiatku hry skryjeme a ukážeme iba keď vznikne
bingo
v pravoklikovom menu vyberme Zmeň
prejdime do záložky Vzhľad a ukryme text4
odškrtnutím položky Vidno. V pravoklikovom
menu tlačidla novaHra
do udalosti priZapnutí doplňme ukrytie
tohto textu za doterajšie volania: hraciaPlocha
generujPríklad text4'skryMa
Doprogramujme príkaz kontrola
triedy Bingo:
-
viem kontrola
ak2 Popis=:súčet [nechPopis
"||][text3'nechHodnota text3'hodnota+1]
; je 5 prázdnych Popisov v riadku?
urobTu "r prvý mojeMeno
urobTu "jeBingo "áno
opakuj 5 [ak pre slovo
:r poč [Popis]<>"|| [urob "jeBingo "nie]]
ak :jeBingo [text4'ukážMa
ukonči]
;
je 5 prázdnych Popisov v stĺpci?
urobTu "s posledný
mojeMeno
urobTu "jeBingo "áno
opakuj 5 [ak pre slovo
poč :s [Popis]<>"|| [urob "jeBingo "nie]]
ak :jeBingo [text4'ukážMa
ukonči]
;
leží tlačidlo na hlavnej uhlopriečke?
ak (prvý mojeMeno)=(posledný
mojeMeno)
[urobTu "jeBingo "áno
opakuj 5 [ak
pre slovo poč poč [Popis]<>"|| [urob "jeBingo "nie]]
ak :jeBingo
[text4'ukážMa ukonči]]
; leží
tlačidlo na vedľajšej uhlopriečke?
ak (prvý mojeMeno)+(posledný
mojeMeno)=6
[urobTu "jeBingo "áno
opakuj 5 [ak
pre slovo poč 6-poč [Popis]<>"|| [urob "jeBingo "nie]]
ak :jeBingo
[text4'ukážMa ukonči]]
generujPríklad
koniec
Príkaz je dosť dlhý – je to zrejme najdlhší
príkaz, ktorý sme v našom tutoriály zapísali – myslíme si však, že po predchádzajúcom
rozbore je jasný.
Úlohy
-
Doplňte do projektu vynulovanie hodnoty v
text3
pri štarte hry – chyby budeme počítať iba v rámci jednej hry.
-
Pri stlačení tlačidla pass
na chvíľu zobrazte k príkazu v text1
aj výsledok.
-
Keď hráč urobil chybu, do text1
zobrazte k príkladu aj výsledok. Zároveň namiesto
tlačidla pass zobrazte tlačidlo
s nápisom rozumiem. Po jeho
stlačení, keď si hráč uvedomí, aký bol správný výsledok, sa tu opäť objaví
tlačidlo pass a vygeneruje sa nový príklad.
-
Pokiaľ je zobrazené tlačidlo rozumiem
nech nefunguje stláčanie tlačidiel triedy "Bingo.
využite príkaz pre všetkyOd
"Bingo [nechReaguje "nie]
. Samozrejme po stlačení tlačidla rozumiem
nezabunite vrátiť reagovanie týchto tlačidiel.
-
Ak hráč stlačil tlačidlo pass
a pritom sa na hracej ploche nachádzal výsledok tohto príkladu,
nech je na to upozornený nejakým zvukom – uvedomte si, že musíte prejsť
všetky tlačidlá a zistiť, či sa na niektorom z nich nenachádza rovnaká
hodnota ako v premennej súčet.
-
Keď má tlačidlo už prázdny Popis,
nech nereaguje na ďalšie stláčanie, t.j. nebude sa to počítať ako hráčova
chyba.
-
Do hry doplňte hru počítača – hráč a počítač
sa striedajú: počítaču sa tiež vygeneruje príklad. Ak sa výsledok nachádza
na hracej ploche, program automaticky nájde toto tlačidlo a vyprázdni mu
Popis.
Potom sa vygeneruje príklad pre hráča, ktorý
hrá rovnako ako predtým. Ak sa bingo podarí získať počítaču, t.j. ak ťahal
a nájdením výsledku vzniklo 5 práznych políčok v riadku, stĺpci alebo v
uhlopriečke, oznámi sa to nápisom BINGO pre POČÍTAČ. Upravte a zobrazte
tento nápis ak bingo získa hráč.
-
Počítajte, koľkokrát vyhral bingo hráč a koľkokrát
počítač.
© Monika Tomcsányiová