Náhodná čísla
Příprava na začátek
Na začátek si připravíme pár změn:
- Přidáme si další sprajt na pozici 2 (takže v druhé “záložce” budou dva obrázky vedle sebe).
- Nachystáme si další dvě proměnné, nazvěme je třeba
pxapy(jako “padající x” a “padající y”) a nastavíme je tak, aby ukazovaly doprostřed vršku obrazovky (pokud si nepamatujete velikost, tak je v Cheat Sheetu). - Nový sprajt vykreslíme po vykreslení našeho stávajícího. Pamatujte, že
všechny tři parametry nového volání funkce
spr()(na novém řádku, nepřepisujte tu co už máme) budou jiné:- místo sprajtu
1budeme vykreslovat sprajt2, - první pozice nebude
x, ale nová proměnnápxa - druhá pozice nebude
y, ale nová proměnnápy.
- místo sprajtu
- Jako poslední věc, náš původní sprajt nakreslíme doprostřed spodku obrazovky.
Udělali jsme hodně změn, pro kontrolu náš kód pro změněné funkce zopakujeme.
Funkce _init():
function _init()
x=60
y=120
px=60
py=0
end
Funkce _draw():
function _draw()
cls()
spr(1,x,y)
spr(2,px,py)
print(btn(➡️))
end
Padání druhého sprajtu
Padání dolů
Pamatujete si jak jsme udělali, že se nám sprajt pohyboval sám? Stačí měnit
jeho pozici ve funkci _update() bez jakékoliv podmínky (bez if-u). Zkusme
ho poslat jen dolů.
To znamená, že jeho pozici Y (máme ji uloženou v proměnné py) pokaždé
zvětšíme o jedničku. A protože to je změna pozice a není to vykreslování, tak
tuto změnu přidáme do funkce _update():
py=py+1
Reset pozice
Hra už může začít být zábavná, ale sprajt jednou spadne dolů a zmizí. Jakou
hodnotu má proměnná py když přestane být sprajt vidět? Výška obrazovky je 128
pixelů, takže jakmile je posunutý o 128 pixelů dolů, tak je mimo obrazovku.
A protože to se stane jen někdy, tak nám to říká, že bychom mohli použít “podmínku” a když spadne moc nízko, tak ho zase přesunout nahoru.
Protože neměníme vykreslování, ale pozici, tak tuto změnu uděláme ve funkci
_update(). Pro zopakování podmínka vypadá takto:
if <podmínka> then
-- co se má udělat když je <podmínka> pravda
end
To, co chceme udělat je, že nastavíme jeho pozici zpátky tam kde začínal.
Protože jsme měnili jen jeho Y pozici, tak ji stačí nastavit zpátky na nulu:
py=0.
No a podmínka kdy to chceme udělat je jen pokud je py větší než 127. Toto
můžeme napsat přímo jako py > 127. Takže naše _update() funkce bude vypadat
asi takto:
function _update()
-- tady jsou reakce na tlačítka
py=py+1
if py > 127 then
py=0
end
end
Teď bude padat druhý sprajt shora dolů a jakmile spadne mimo obrazovku, objeví se znovu nahoře.
Jak fungují náhodná čísla
Dost často je větší zábava když je hra méně předvídatelná. Třeba kdyby náš
sprajt nepadal pořád na stejném místě, ale svoji pozici X (tedy proměnnou
px) měl nastavené na náhodné číslo. Zvlášť pokud budeme chtít aby bylo trošku
zábavné ho chytat. Na to abychom mohli získat nějaké náhodné číslo slouží
funkce rnd(<maximum>). Když jí dáme nějaké maximum, tak nám tato funkce
“vrátí” (dá nám nazpátek) náhodné číslo mezi nulou a maximem.
Použijeme naše volání funkce print() abychom si to vyzkoušeli. Všichni
změníme naše print(btn(➡️)) na print(rnd(10)). Když hru pustíme, tak se nám
číslo mění tak rychle, že ho nestihneme ani přečíst. To je proto, že pokaždé
když vykreslíme obrazovku, tak se nám vybere jiné číslo.
Note
Zkuste si změnit program tak, aby vybral jen jedno číslo na začátku a to se poté neměnilo.
Když chceme vybrat jen jedno číslo na začátku, tak musíme funkci rnd() zavolat
jen jednou. A funkce která se volá jen jednou, a to na začátku, je _init().
A když to číslo chceme uložit, tak na to už umíme použít proměnnou. Přidáme si
tedy do funkce _init() řádek cislo=rnd(10) a vypisování změníme na
print(cislo). Naše dvě funkce teď budou vypadat takto:
Funkce _init():
function _init()
x=60
y=120
px=60
py=0
cislo=rnd(10)
end
Funkce _draw():
function _draw()
cls()
spr(1,x,y)
spr(2,px,py)
print(cislo)
end
Když teď spustíme hru, tak se nám každému vybere jiné číslo. A pokaždé když ji
spustíme (stačí zmáčknout Ctrl + R), tak bude to číslo jiné. Je to sice
desetinné číslo, ale to nám nevadí. Důležité je, že je to číslo, které bude
vždy menší než 10 (protože jsme zavolali rnd(10)).
Vylepšení resetu pozice
Teď už nám chybí jen jedna věc aby hra alespoň vypadala zábavně. A to aby druhý
sprajt padal pokaždé z jiného místa. Vlastně stačí když pokaždé jakmile se
nastaví jeho Y pozice (proměnná py) na nulu, nastavíme jeho X pozici
(proměnnou px) náhodně daleko od levého kraje obrazovky.
Note
Zkuste se nad tímto zapřemýšlet a přijít na to sami.
Tip
Proměnnou
pynastavujeme na nulu na dvou místech!
Řešení
Pozici py nastavujeme na nulu na dvou místech. Jednou ve funkci _init() a
jednou v podmínce uvnitř funkce _update(). Na obou místech stačí hned pod
řádek py=0 přidat tento řádek:
py=rnd(120)
Note
Proč jsme zvolili právě maximum 120?
A máme něco, co může za chvilku vypadat i jako hra!