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

Podmínky a tlačítka

Od této hodiny se nám může hodit Cheat Sheet na PICO-8, je sice v angličtině, ale my stejně budeme používat jen malou část a jen pro připomenutí.

Organizace kódu

Protože budeme měnit více a více věcí, hodí se nám mít v kódu trošku pořádek.

V PICO-8 jsou nejčastěji použity tři funkce, at to:

  • _init():
    • pustí se jednou na začátku
    • používá se na nastavení počátečních věcí
  • _update():
    • pouští se 30× za vteřinu
    • používá se na reakci na tlačítka, pohyb, atd.
  • _update60():
    • pouští se 60× za vteřinu
    • jinak stejná jako _update()
    • my ji nebudeme potřebovat
  • _draw():
    • pouští se jednou za vykreslení obrazovky
    • používá se na vykreslení sprajtú, obrázků, mapy, pixelů atd.

My už dvě z těchto funkcí známe. Náš kód by se dal ale pěkně rozdělit mezi _init(), _update() a _draw() pěkně logicky.

Na konci minulé lekce jsme měli, i s pohybem sprajtu, něco jako toto:

function _init()
 sprite=1
 x=60
 y=60
 n=1
end

function _draw()
 cls()
 print(n)
 n=n+1
 spr(sprite, x, y)
 x=x+1
 y=y-2
end

Pokud ve funkci _draw() ponecháme jen řádky které vykreslují něco na obrazovku a všechny ostatní přesuneme do nové funkce _update(), tak bude náš kód vypadat nějak takto:

function _init()
 sprite=1
 x=60
 y=60
 n=1
end

function _update()
 n=n+1
 x=x+1
 y=y-2
end

function _draw()
 cls()
 print(n)
 spr(sprite, x, y)
end

Tip

Tady si můžete procvičit standardní práci s textem jako je označování (Shift + ←→↑↓), kopírováni (Ctrl + C, vyjímání Ctrl + X a vkládání Ctrl + V) které funguje jako na většině míst kde se upravuje text.

Čtení stavu tlačítka

Na to abysme zjistili jestli je zmáčknuté tlačítko, tak můžeme použít funkci btn() které v závorkách řekneme na jaké tlačítko se ptáme. Pokud se tedy budeme chtít zeptat na šipku doprava, tak tu v PICO-8 editoru napíšeme jako velké písmeno “R” (od anglického “right”, tedy “vpravo”), tudíž Shift + R. V kódu se nám potom objeví šipečka doprava, volání funkce bude tedy potom vypadat asi takto:

btn(➡️)

Tato funkce ale neudělá nic jiného, než že “vrátí” jestli je šipka doprava zmáčknutá, pokud ano, tak true, jinak false. To, že funkce něco “vrátí” (nějakou hodnotu) znamená, že se dá použít podobně jako proměnná. Pojďme si ji tedy vypsat místo našeho čísla n. Tu už nebudeme potřebovat a můžeme ji z našeho kódu smazat:

function _init()
 sprite=1
 x=60
 y=60
end

function _update()
 x=x+1
 y=y-2
end

function _draw()
 cls()
 print(btn(➡️))
 spr(sprite, x, y)
end

Když teď pustíme hru (můžeme použít zkratku Ctrl + R) tak nám sice sprajt odjede, ale v levém horním rohu bude nápis “FALSE” který se změní na “TRUE” kdykoliv budeme držet šipku doprava!

Reakce na tlačítka – podmínky

Teď přijde nejsložitější část dnešní lekce, ale taky ta nejlepší.

V naší funkci _update() pohybujeme naším sprajtem doleva/doprava a nahoru/dolů (podle toho jaká čísla jsme přičetli nebo odečetli od proměnných X (to jak daleko je sprajt od levé strany obrazovky) a Y (to jak daleko je shora obrazovky).

Pojďme upravit tuto funkci tak, aby se nám sprajt posouval jen vodorovně. To znamená, že nebudeme měnit hodnotu proměnné Y (tento řádek smažeme) a necháme jen řádek kde měníme X.

function _update()
 x=x+1
end

Teď se nám sprajt bude pohybovat jen po ose X, ale bude to dělat pořád a vždy uteče z obrazovky. Pokud bychom chtěli aby se hodnota X změnila jen když držíme tlačítko doprava, musíme použít “podmínku”.

Základní podmínkou ve většině programovacích jazyků je if, což znamená “jestli”. Když chceme napsat “jestli je zmáčknuté tlačítko doprava” známe už většinu toho co potřebujeme:

  • jestli – if
  • je zmáčknuté tlačítko doprava – btn(➡️)

a když se podíváme na náš Cheat Sheet (odkaz na začátku stránky) tak nápověda která začíná if ... tak jsou to dva řádky. První z nich, IF (TRUE) CLS(), je zkrácená verze která nám časem může pomoci, ale zatím ji vynecháme. Druhá verze:

if <PODMÍNKA> then
 -- IF BLOK
elseif <PODMÍNKA> then
 -- ELSEIF BLOK
else
 -- ELSE BLOK
end

Note

Cokoliv je napsáno za dvěma pomlčkami -- jsou jen komentáře. To znamená něco, co je tam napsáno jen pro lidi co kód čtou, ale počítač to přeskočí.

Cokoliv je napsáno na řádku místo -- IF BLOK se pustí (vykoná) jen pokud je <PODMÍNKA> pravdivá.

Bloky ELSEIF a ELSE teď nebudeme potřebovat, ale musíme v programu nějak označit kde kód podmínky končí. Na to, stejně jako u funkcí, použijeme klíčové slovo end.

V porovnání s naším if btn(➡️) nám chybí jen tři věci:

  • then – klíčové slovo za podmínkou,
  • “IF BLOK” – kód který chceme aby se pustil “jen někdy” (podmíněně) a
  • end – ukončení takzvaného if-u.

Naše podmínka bude to, jestli je zmáčknuté tlačítko doprava, neboli pravá šipka. A náš kód který chceme aby se pustil podmíněně je ten řádek kde měníme X. Pokud tedy nad řádek kde modifikujeme X napíšeme naše if btn(➡️) then a pod něj end, bude naše funkce _update() vypadat nějak takto:

function _update()
 if btn(➡️) then
  x=x+1
 end
end

Pusťte hru a zkuste co dělá šipka doprava. Měla by hýbat se sprajtem doprava.

Warning

Někomu se může sprajt pohybovat na druhou stranu, podle toho jak původně modifikovali proměnnou X, pokud jde na špatnou stranu, zkuste přijít na to proč. Můžou pomoci v Cheat Sheetu naznačené souřadnice obrazovky.

Finální úkoly

Teď máme tři řádky které se starají o pohyb doprava. Přidání řádků které by způsobily pohyb doleva je docela jednoduché. Zkuste vymyslet sami jak to udělat. Když si nebudete vědět rady, tak tady je pár tipů. Zkuste jich přečíst co nejméně:

  • Stačí nám upravit funkci _update().
  • Myší (nebo pomocí Shift-u a šipek) označte tři řádky (od if až do end), zkopírujte (Ctrl + C), šipkami (nebo myší) najeďte mezi ty dva end-y a zkopírované řádky vložte (Ctrl + V) a upravte rozdíly mezi pohybem doprava a doleva.
  • Rozdíly jsou dva.
  • První rozdíl je tlačítko na které chceme reagovat.
  • Druhý rozdíl je v tom co chceme udělat s proměnnou X.
  • Místo tlačítka vpravo chceme kontrolovat tlačítko vlevo. Šipku vlevo napíšeme pomocí Shift + L (“L” jako “left” – z anglického “vlevo”).
  • Proměnnou X nechceme zvětšovat, ale zmenšovat, takže místo + napíšeme -.

Funkce _update() by těď měla vypadat asi takhle:

function _update()
 if btn(➡️) then
  x=x+1
 end
 if btn(⬅️) then
  x=x-1
 end
end

Kdo chce si teď může vyzkoušet doplnit pohyb nahoru a dolů.

Tip

Zkuste sami přijít na všechno co je potřeba doplnit.

Tipy na přidání pohybu nahoru a dolů:

  • Zkopírujte si (podobně jako předtím) všech šest řádků pohybu doleva a doprava a upravte je.
  • Šipky nahoru a dolů se píšou podobně, nahoru je anglicky “up” a dolů je “down”.
  • Nový pohyb není po ose X.
  • Pohyb nahoru bude kontrolovat tlačítko ⬆️ (Shift + U).
  • Pohyb dolů tlačítko ⬇️ (Shift + D).
  • Pohyb nahoru je směrem k hornímu řádku kde je Y nula, takže jej potřebujeme zmenšovat, takže potřebujeme y=y-1.
  • Pohyb dolů je opačně jako pohyb nahoru, takže potřebujeme y=y+1.

Nakonec by naše “hra” s celou funkcí _update() měla vypadat takto:

Tip

Podívejte se i na to jak jsou řádky odsazené (kolik mezer mají zleva) a jak jsou mezi nimi volné řádky. Mít pořádek v kódu znamená lepší orientaci až s ním budeme dále pracovat!

function _init()
 y=60
 x=60
end

function _update()
 if btn(➡️) then
  x=x+1
 end
 if btn(⬅️) then
  x=x-1
 end
 if btn(⬆️) then
  y=y-1
 end
 if btn(⬇️) then
  y=y+1
 end
end

function _draw()
 cls()
 spr(1,x,y)
 print(btn(➡️))
end