Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

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 px a py (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 1 budeme vykreslovat sprajt 2,
    • první pozice nebude x, ale nová proměnná px a
    • druhá pozice nebude y, ale nová proměnná py.
  • 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 py nastavujeme 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!