st.tabs, ladění cizího kódu, vyvažování hry, GitHub, nasazeníTohle je oslava, ne výuka. Řekněte to hned na začátku:
Dneska se nebudeš učit nic nového. Dneska svoji hru dokončíš, pustíš ji na internet a ukážeš ostatním. Do konce hodiny budeš mít odkaz, který můžeš poslat komukoli na světě a on si tvoji hru zahraje.
Zároveň je to hodina, kde se rozpojí rychlí a pomalí. Mějte plán: rychlí dodělávají rozšíření, pomalí dostávají hotové kusy kódu ke zkopírování. Nikdo nesmí odejít bez běžící hry. To je hlavní cíl.
Napište na tabuli. Bez tohohle si každý bude myslet, že není hotový:
Hra je hotová, když: 1. jde spustit a nespadne, 2. má začátek (výběr hrdiny), průběh (výpravy) a konec (výhra nebo prohra), 3. dá se uložit a načíst, 4. má jméno a krátký popis, 5. běží na internetu.
Cokoli dalšího je bonus.
Jediná technická novinka hodiny, protože je zadarmo a vypadá skvěle:
Tři obrazovky, jeden soubor, žádné složité přepínání. Nemusíš dělat nic chytrého — jen dáš svoje části do
with.
Doplňkově se hodí:
Tohle tě bude bavit a nenápadně tě to učí přemýšlet o číslech:
Zahraj svoji hru pětkrát. Pokaždé vyhraješ? Je moc lehká. Pokaždé prohraješ? Je moc těžká. Dobrá hra je ta, kde vyhraješ tak dvakrát ze tří pokusů.
Nástroje na doladění:
| Chci | Změním |
|---|---|
| Snadnější hru | Víc životů hrdiny, míň síly příšer, levnější lektvary |
| Těžší hru | Silnější příšery, dražší léčení, méně zlata za výhru |
| Delší hru | Víc životů na obou stranách |
| Napínavější hru | Vyšší náhoda (větší rozptyl hodů) |
Použij simulaci ze cvičení 2 — je to skutečné datové rozhodování.
Vyzkoušej cvičení s rozbitým souborem. Postup je:
- Přečti si poslední řádek chyby. Tam je napsáno co.
- Podívej se na číslo řádku. Tam je napsáno kde.
- Vypiš si proměnnou přes
st.write(promenna)těsně před chybou.- Změň jednu věc a spusť. Ne pět věcí najednou.
| Chyba | Co znamená česky |
|---|---|
NameError |
Používáš něco, co neexistuje. Překlep? |
TypeError |
Míchej čísla s texty. Chybí int() nebo str()? |
KeyError |
Ve slovníku takový klíč není |
IndexError |
Seznam je kratší, než si myslíš |
AttributeError |
Objekt tuhle věc neumí. Chybí super().__init__()? |
IndentationError |
Špatné odsazení |
Připravte se, tohle je časově nejnáročnější část. Vyzkoušejte si to předem sami.
Předpoklady (řešte před hodinou, ne na ní): - účet na GitHubu (kvůli věku doporučte školní/rodičovský e-mail, GitHub vyžaduje 13+) - účet na share.streamlit.io — přihlášení přes GitHub
Postup:
requirements.txt:
streamlitpyquestapp.pyKritické upozornění pro děti:
Aplikace na internetu si nepamatuje uložené soubory. Když se restartuje, JSON soubor je pryč. To je normální — na internetu se data ukládají do databáze, ne do souboru. Doma na počítači ukládání funguje.
Záložní plán, když nasazení selže:
- lokální síť: streamlit run app.py --server.address 0.0.0.0 a sdílet IP adresu
- prostě jen ukázka na projektoru
- nasazení jako domácí úkol s vaší pomocí přes chat
Dvě minuty na dítě, pevný formát, jinak to nestihnete:
- Jak se tvoje hra jmenuje a o čem je? (15 s)
- Ukaž, jak se hraje. (45 s)
- Co je v ní nejlepšího a proč? (30 s)
- Co bylo nejtěžší naprogramovat? (30 s)
Pravidla pro publikum: po každé prezentaci jedna pochvala a jedna otázka. Nikdy kritika. Tohle nastavte hned u prvního prezentujícího a držte.
Pro ostýchavé: nechte je ukázat hru bez mluvení, vy se doptáváte.
st.connection + databáze, případně streamlit-gsheets. Nad rámec kurzu.requirements.txt bez verzí je pro výuku v pořádku. V produkci by tam
patřilo streamlit==1.50.0.| Chyba | Příčina | Řešení |
|---|---|---|
ModuleNotFoundError na Cloudu |
Chybí requirements.txt |
Vytvořit ho v kořeni |
| App se nespustí | Špatně zvolený hlavní soubor | Musí být app.py |
Chybějící modul postavy |
Nenahrané všechny .py |
Zkontrolovat repozitář |
| Uložená hra po čase zmizí | Efemérní disk | Vysvětlit, nezkoušet opravit |
| Rozsypaná diakritika | Chybí encoding="utf-8" |
Doplnit u open() |
| Repozitář je privátní | Cloud na něj nevidí | Přepnout na veřejný |
Zopakuj si, co ses za rok naučil/a:
Proměnné. Datové typy. Vstupy. Podmínky. Paměť aplikace. Seznamy. Řetězce. Slovníky. Cykly. Funkce. Náhoda. Soubory a JSON. Třídy. Dědičnost. Moduly. Nasazení.
To je celý základ programování. Ne „dětský základ" — základ, se kterým se dělají skutečné programy. Rozdíl mezi tebou a někým, kdo tohle dělá v práci, je hlavně počet hodin.
Kam dál:
- Python dál: pygame na hry, pandas na data, requests na weby
- jiné jazyky: JavaScript pro web, C# pro Unity, GDScript pro Godot
- procvičování: umimeinformatiku.cz, Advent of Code, Codewars
Zadání:
- Přidej na začátek
st.set_page_configs názvem a ikonou hry- Vytvoř tři záložky: Výprava, Batoh, Deník
- Přesuň existující části hry do správných záložek
- Přidej čtvrtou záložku Nápověda s vysvětlením, jak se hraje
- V Nápovědě použij
st.expanderpro každou část pravidel
| Úroveň | Co má zvládnout |
|---|---|
| Minimum | Body 1–3 |
| Rozšíření | Bod 4 |
| Výzva | Bod 5 + st.container(border=True) kolem míst |
Očekávaný výsledek: hra vypadá jako skutečná aplikace, ne jako dlouhý seznam.
Zadání:
- Napiš funkci
souboj(hz, hs, pz, ps), která simuluje jeden souboj- Spusť ji tisíckrát a spočítej, kolikrát hrdina vyhrál
- Zobraz úspěšnost v procentech
- Doluď čísla ve své hře tak, aby úspěšnost byla mezi 60 a 75 %
- Otestuj takhle všechny příšery ve svém bestiáři
| Úroveň | Co má zvládnout |
|---|---|
| Minimum | Body 1–2 |
| Rozšíření | Body 3–4 |
| Výzva | Bod 5 + tabulka všech příšer se svou úspěšností |
Očekávaný výsledek: hra, která není ani nudná, ani frustrující.
Zadání:
- Spusť přiložený soubor a přečti si první chybu
- Oprav ji a spusť znovu
- Opakuj, dokud aplikace nenaběhne — je tam pět chyb
- Ke každé opravě napiš komentář, co bylo špatně
- Najdi šestou chybu, která program neshodí, ale hra kvůli ní funguje divně
| Úroveň | Co má zvládnout |
|---|---|
| Minimum | Body 1–2 |
| Rozšíření | Bod 3 |
| Výzva | Body 4–5 |
Očekávaný výsledek: běžící hra a pochopení, že chyby jsou normální.
Zadání:
- Vymysli hře vlastní název a ikonu, nastav je v
set_page_config- Přidej úvodní obrazovku s příběhem, proč hrdina vyráží
- Přidej vlastní příšeru, vlastní místo a vlastní předmět
- Přidej obrazovku vítězství, když hrdina nasbírá dost zlata
- Do patičky napiš „Vytvořil: tvoje jméno" a rok
| Úroveň | Co má zvládnout |
|---|---|
| Minimum | Body 1–2 |
| Rozšíření | Body 3–4 |
| Výzva | Bod 5 + st.balloons() při vítězství a vlastní barvy |
Očekávaný výsledek: hra, kterou nikdo jiný ve třídě nemá.
Zadání:
- Projdi kontrolní seznam „hra je hotová" a doplň, co chybí
- Vytvoř soubor
requirements.txts jediným řádkemstreamlit- Nahraj projekt na GitHub jako veřejný repozitář
- Na share.streamlit.io nasaď aplikaci a počkej na odkaz
- Odkaz vlož do sdíleného dokumentu a vyzkoušej hru někoho jiného
| Úroveň | Co má zvládnout |
|---|---|
| Minimum | Body 1–2 |
| Rozšíření | Body 3–4 |
| Výzva | Bod 5 + napsat README.md s popisem hry |
Očekávaný výsledek: veřejný odkaz na vlastní hru.
streamlit run.Není. Máš hotovou hru běžící na internetu.
Jestli chceš pokračovat: přidej druhého hrdinu, kterého ovládá počítač, vlastní obrázky přes
st.image, nebo žebříček nejlepších výsledků. A hlavně — ukaž hru někomu, kdo o programování nic neví. Ať vidí, co umíš.
Toto je jedna z možných variant, jak mohl úkol dopadnout. Tvoje řešení se může lišit a to je v pořádku.
Oficiální dokumentace se hodí, když PyQuest dokončuješ, ladíš vzhled a chystáš jeho nasazení na internet. U Streamlitu se vyplatí vracet hlavně k API referenci a k návodu pro Community Cloud.
| Co jsme použili | Oficiální dokumentace | Co tam najdeš |
|---|---|---|
st.tabs |
st.tabs |
záložky a rozdělení aplikace do více pohledů |
st.set_page_config |
st.set_page_config |
nastavení názvu stránky, ikony a rozložení |
st.expander |
st.expander |
schování nápovědy nebo delšího textu |
| Streamlit Community Cloud | Community Cloud | přehled účtu, nasazení a sdílení aplikace |
| nasazení aplikace | Deploy your app | krok za krokem, jak vystavit aplikaci na internet |
requirements.txt a závislosti |
App dependencies | kam dát requirements.txt a jak Cloud instaluje balíčky |
| Cvičení | Odkaz | Proč se hodí |
|---|---|---|
| Programování v Pythonu | umimeinformatiku.cz | Celkové zopakování |
| Týmovka | umimeinformatiku.cz | Závěrečná soutěž třídy |
| Logika a řešení problémů | umimeinformatiku.cz | Ladění a hledání chyb |
| Algoritmické myšlení | umimeinformatiku.cz | Kam pokračovat dál |