Gratulujeme!
Gratulujeme, váš program funguje a jste na konci kurzu Lua! Ema začala sezónu s 30 mincemi a osela tři záhony. Kdykoli Hugo platil víc než trh, prodala úrodu jemu a zbytek odvezla na trh. Sezónu skončila se 174 mincemi. A každý řádek programu jste napsali sami.
Poslední vylepšení. Ema chce vyzkoušet novou plodinu: rajčata. Ve vašem programu to znamená dva nové řádky dat, záznam v seznamu plodiny a položku v seznamu plan, a nic víc. Ceník, setí, růst, stodola, Hugo i trh pracují s tím, co je v seznamech, takže si rajčata najdou místo všude sama. Sledujte i mince: semínka rajčat stojí přesně těch 6 mincí, které Emě zbyly, a díky <= je koupit může.
Co jste se naučili. Podívejte se, jak si v programu našla místo každá lekce kurzu:
- Základy Lua:
print, program, který běží shora dolů, a komentáře, které ho dělí na části. Když se něco pokazilo, chybová hláška vám řekla, na kterém řádku. - Proměnné a typy: lokální proměnné jako
mincea celá čísla, která vypíše%d. S desetinným číslem jako3.5by%dskončilo chybou. - Podmínky rozhodují, jestli má Ema dost mincí, jestli je záhon zralý, jestli Hugo platí víc než trh a jestli je co vypsat.
- Cykly procházejí plán, dny a záhony, cyklus v cyklu.
for priplatek = 2, 0, -1počítá dolů awhile truev Hugově scénáři není nekonečný, protože se u každéhoyieldzastaví. - Tabulky jako seznamy drží plodiny, plán, záhony i počasí.
table.insertdo nich přidává,#zahonyje počítá,table.concatspojuje texty atable.sortje řadí. - Funkce dělí program na části s jasnými úkoly:
najdiPlodinuhledá,serazeneNazvyřadí aprodejvypisuje a vrací mince. Díky výchozím hodnotám parametrů fungovalo dál i staré voláníprodej(stodola). - Tabulky jako slovníky: každá plodina je záznam,
rust[dnes]vyhledá počasí a stodola počítá úrodu podle názvů. Klíče s háčky a čárkami se píšou do hranatých závorek,["déšť"], protože Lua v názvech zná jen písmena bez diakritiky. A protožepairsnemá pořadí, klíče se před vypsáním řadí. - Řetězce:
string.formatskládá řádky pomocí%sa%da..spojuje zbytek. Texty s háčky a čárkami, třeba"dýně", se dají bez obav vypisovat i spojovat. - Objekty a metatabulky: třída
Zahondrží data a metody záhonu pohromadě.__indexnajde metody,zahon:roste()předá záhon jakoselfa__tostringz něj udělámrkev 2/3. - Korutiny: Hugův scénář se zastaví u
coroutine.yielda další den pokračuje uprostřed svého cyklu, s proměnnými, jak je nechal.
Lua ve vašem počítači. Tady programy spouštěl váš prohlížeč. Jinde je můžete spouštět několika způsoby:
- Online, bez instalace: na oficiální ukázce lua.org/demo.html si Lua 5.4 vyzkoušíte přímo z prohlížeče. Vložte do ní program a spusťte ho.
- macOS: pomocí Homebrew nainstalujete Lua v Terminálu příkazem
brew install lua. Program uložte jakomain.luaa v jeho složce ho spusťte příkazemlua main.lua. - Ubuntu a Debian: Lua nainstalujete příkazem
sudo apt install lua5.4a program spustíte příkazemlua5.4 main.lua. - Windows: stáhněte si hotové soubory Lua ze stránek LuaBinaries. Program se jmenuje
lua54.exe, takže svůj program spustíte příkazemlua54 main.lua.
Programy pište v editoru, který rozumí jazyku Lua, třeba ve Visual Studio Code s rozšířením „Lua“ od autora sumneko (Lua Language Server). Chyby označuje už při psaní, ještě než program spustíte.
Chybové hlášky jsou stejné jako tady, jen se dvěma drobnými rozdíly: první řádek začíná názvem příkazu, třeba lua: , a výpis pod stack traceback: končí řádkem [C]: in ?. Například když má plán překlep, příkaz lua main.lua vypíše tohle:
lua: main.lua:101: attempt to index a nil value (local 'plodina')
stack traceback:
main.lua:101: in main chunk
[C]: in ?Příbuzní jazyka Lua. Naučili jste se standardní Lua 5.4. Potkáte ale i příbuzné jazyky:
- Luau, jazyk Robloxu, vyrostl z Lua 5.1. Má věci, které standardní Lua nemá:
mince += 5a podobné,continuev cyklech, texty s hodnotami ve zpětných apostrofech,`Mince: {mince}`, a nepovinné typy,local mince: number = 5. Všechna čísla jsou v něm desetinná, takžeprint(10 / 2)vypíše5. A hry v Robloxu používají kromě jazyka, který znáte, i vlastní objekty Robloxu, jakogame,workspacea události. - LuaJIT je velmi rychlá verze Lua 5.1, kterou používá herní engine LÖVE, Defold i Neovim. Lua 5.1 nemá
//a nerozlišuje celá a desetinná čísla. - Doplňky do World of Warcraft používají Lua 5.1 a PICO-8 malý jazyk podobný jazyku Lua.
Co dál. Teď znáte Lua od print až po metatabulky a korutiny. Pár nápadů, co dělat dál:
- Vylepšujte svůj program. Děda Josef by mohl být druhý obchodník s vlastní korutinou a Ema by prodávala tomu, kdo platí víc. Sezóna by mohla být delší, záhon by mohl dostat metodu
zahon:jeZraly()a ve vašem počítači může být počasí náhodné, pomocímath.random: tam žádný test nepotřebuje pokaždé stejný výstup. Nejvíc se naučíte, když řešíte vlastní problémy. - Hry v LÖVE. LÖVE je bezplatný engine pro 2D hry a celou hru v něm píšete v Lua: co se stane v každém snímku, co se vykreslí a co udělá stisk klávesy.
- Roblox Studio. Hry pro Roblox se píšou v Luau, v Roblox Studiu. Skoro všechno z tohoto kurzu tam funguje a přidáte k tomu objekty a události Robloxu.
- Neovim. Textový editor Neovim se nastavuje a rozšiřuje v Lua, takže pro něj teď můžete psát vlastní nastavení a doplňky.
- Příručka Lua. Referenční příručka Lua 5.4 popisuje celý jazyk a všechny jeho funkce (anglicky). A kniha Programming in Lua od Roberta Ierusalimschyho, jednoho z autorů Lua, ho vysvětluje do hloubky.
A pokud si chcete vyzkoušet další jazyk, čekají na vás kurzy Pythonu, JavaScriptu a C.
Jak psát:
Pokyny
Na konec seznamu plodiny přidejte rajčata: {nazev = "rajčata", dny = 4, cenaSemen = 2, cena = 7}. A na konci seznamu plan chce Ema 3 semínka rajčat: {nazev = "rajčata", seminka = 3}. Nic jiného neměňte. Program pak vypíše všechno ze začátku lekce:
CENÍK
mrkev: semínko za 2, prodej za 5
dýně: semínko za 5, prodej za 20
jahody: semínko za 4, prodej za 12
pšenice: semínko za 1, prodej za 3
rajčata: semínko za 2, prodej za 7
Záhon 1: mrkev x4 za 8 mincí
Záhon 2: pšenice x6 za 6 mincí
Záhon 3: dýně x2 za 10 mincí
Na jahody x2 nemá Ema dost mincí
Záhon 4: rajčata x3 za 6 mincí
Mince: 0
Den 1 (slunečno): mrkev 1/3, pšenice 1/2, dýně 1/6, rajčata 1/4
Den 2 (slunečno): mrkev 2/3, pšenice 2/2, dýně 2/6, rajčata 2/4
Hugo: pšenice 6 x 4 = 24
Den 3 (déšť): mrkev 3/3, pšenice 2/2, dýně 4/6, rajčata 4/4
Den 4 (zataženo): mrkev 1/3, pšenice 1/2, dýně 5/6, rajčata 1/4
Hugo: mrkev 4 x 7, pšenice 6 x 5, rajčata 3 x 9 = 85
Den 5 (slunečno): mrkev 2/3, pšenice 2/2, dýně 6/6, rajčata 2/4
Hugo: dýně 2 x 21, pšenice 6 x 4 = 66
Den 6 (zataženo): mrkev 3/3, pšenice 1/2, dýně 1/6, rajčata 3/4
Trh: mrkev 4 x 5 = 20
Konec sezóny: 195 mincíPokud rajčata záhon nedostanou, zkontrolujte podmínku pro nákup semínek: Emě zbylo přesně 6 mincí a to stačí.
Začněte programovat zdarma
7/7