Program.cs — úvodní obrazovka hry CsQuestTenhle blok je jen pro vás — dětem ho nepromítejte. Je to plán, podle kterého se řídíte.
| Fáze | Co se děje | Čas |
|---|---|---|
| Rozjezd | dotnet --version, dotnet new console, dotnet run |
20 min |
| První výpis | Změna textu → dotnet run → jiný výsledek |
15 min |
| Výklad + ukázky | Bloky 4–10, střídáte mluvení a promítání kódu | 45 min |
| Cvičení | Děti pracují samy, vy obcházíte | 55 min |
| Závěr | Kdo chce, ukáže svoji vizitku hrdiny | 5 min |
Dnešní hodina nemá naučit programovat. Má vytvořit zážitek „napsal jsem řádek a počítač ho udělal". Všechno ostatní (podmínky, cykly, třídy) staví na tomhle pocitu. Pokud dítě odchází a chce doma pokračovat, hodina se povedla, i kdyby nerozumělo slovu „proměnná".
Druhý, skrytý cíl: nebát se červené chybové hlášky. Kdo dnes uvidí CS1002
třikrát a pokaždé to opraví, ten příště chybu jen přečte a jde dál.
string a int, ale neřešte, co je typ.
Říkejte „krabice na text" a „krabice na číslo". Typy přijdou 2. hodinu.Console.WriteLine je prostě „příkaz vypiš".
Metody přijdou v 10. hodině.Main. Stačí věta: „Moderní C# to umí i bez toho."
Kdo se zeptá, ukažte mu učitelský blok Technické pozadí na konci výkladu.Jak pracovat se smíšenou úrovní. Každé cvičení má tři stupně: Minimum, Rozšíření, Výzva. Slabším řekněte, že stačí Minimum a je to úspěch. Rychlíkům dejte hned Výzvu a pak je posaďte jako pomocníky k někomu, kdo se trápí. Vysvětlování je nejlepší způsob, jak se něco naučit — a vám to ušetří půl hodiny běhání.
Tohle je úplně první věc, kterou uděláte. Podrobný návod i s obrázkovým popisem je na samostatné stránce Než začneme: C# ve Visual Studio Code — tady je jen rychlá verze na tabuli.
dotnet --version
Ověření, že .NET vůbec je. Musí vypsat něco jako 8.0.204.
První číslo musí být 8 nebo vyšší.
Když příkaz vypíše command not found nebo 'dotnet' is not recognized,
SDK chybí nebo je potřeba otevřít nový terminál. Nově nainstalované programy
se do už otevřeného okna nepropíšou.
dotnet new console -o CsQuest
cd CsQuest
Vyrobení projektu. Vznikne složka CsQuest se souborem Program.cs.
Zdůrazněte, že tohle se dělá jednou za projekt, ne pokaždé.
Děti budou chtít projekt pojmenovat po sobě. Nechte je — jen ať si pamatují,
do které složky se pak mají přepnout příkazem cd.
dotnet run
Jediný příkaz, kterým se program spouští. Přeloží a spustí. Poprvé to trvá pár sekund.
Zdůrazněte: dotnet Program.cs nefunguje. A hlavně — příkaz musí běžet
uvnitř složky projektu, jinak vypíše MSB1003.
Tohle je největší motivační trik celé hodiny. Postup si předem vyzkoušejte, ať před dětmi neváháte.
VS Code Terminál
┌──────────────────┐ ┌──────────────────┐
│ Program.cs │ │ > dotnet run │
│ │ Ctrl+S │ │
│ Console.WriteLine│─────────►│ Ahoj, tady │
│ ("Ahoj..."); │ │ CsQuest! │
└──────────────────┘ └──────────────────┘
Kód a výsledek musí být vidět zároveň. Terminál ve VS Code se otevírá dole
(Ctrl+`), takže to jde samo — jen ho zvětšete tažením za horní hranu.
Naučte děti rutinu: napiš → Ctrl+S → klikni do terminálu → šipka nahoru →
Enter. Šipka nahoru vytáhne poslední příkaz, takže dotnet run nepíšou pořád dokola.
Dokud dítě přepíná mezi okny naslepo, nevidí souvislost mezi kódem a výsledkem. Obejděte třídu a zkontrolujte, že rutinu má opravdu každý.
Jak to předvést dramaticky.
Napište na projektoru tenhle jediný řádek a spusťte. Pak před zraky dětí
změňte text na "🔥 AHOJ SVĚTE 🔥" a spusťte znovu.
Tady většinou nastane ten moment, kdy si děti uvědomí, že mají nad obrazovkou moc. Nechte je pak deset vteřin jenom přepisovat ten text. Vyplatí se to.
Tlačítko Spustit vlevo funguje i na téhle stránce — vyzkoušejte si to hned teď.
Děti budou zapomínat středník. Počítejte s tím, že hlášku CS1002: ; expected
uvidíte dnes padesátkrát. Neopravujte to za ně — ukažte jim číslo řádku v hlášce
a nechte je najít chybu samy. Potřetí už to zvládnou bez vás.
Velká a malá písmena. console.writeline není Console.WriteLine.
C# je na tohle přísný a hláška CS0103 zní děsivě. Napište na tabuli
velkými písmeny: C# ROZLIŠUJE VELKÁ A MALÁ PÍSMENA.
Zapamatuj si:
C# (čti „sí šarp") je programovací jazyk. Píšeš v něm příkazy pro počítač — a počítač je udělá přesně v tom pořadí, v jakém je napíšeš. Nic si nedomýšlí, nic nepřeskočí. V C# jsou napsané weby, firemní systémy i hry v Unity.
Jednoduchá představa:
Program je recept. Každý řádek je jeden krok receptu. Počítač je kuchař, který umí jenom číst a poslouchat — nikdy nevaří od oka a nikdy nepřeskočí krok. Když v receptu chybí tečka, kuchař se zastaví a zeptá se.
Klikni vlevo na Spustit a podívej se na výstup. Pak prohoď dva řádky a spusť znovu.
Program.cs ──► překladač ──► běžící program
(tvůj text) (dotnet) (text v konzoli)
Proč to má dva kroky. Tvůj text není program — je to jen text. Než se dá spustit, musí ho překladač přeložit do řeči, které rozumí počítač.
To je rozdíl proti Pythonu nebo JavaScriptu: C# se vždycky nejdřív přeloží a až potom spustí. Právě proto ti překladač umí říct o chybě dřív, než program vůbec poběží.
Příkaz dotnet run dělá obojí naráz: přelož a spusť.
Tři věci najednou:
Console.WriteLine(...) vypíše text a odřádkuje.Console.Write(...) vypíše text a zůstane na místě — další výpis
naváže hned za ním.Console.WriteLine() bez ničeho v závorce vypíše prázdný řádek.
Hodí se na mezery mezi částmi.Středník je tečka na konci věty. Každý příkaz jím končí. Když chybí,
překladač si myslí, že věta pokračuje, a nahlásí CS1002: ; expected.
Pořadí se dodržuje přesně. Co je v kódu výš, vypíše se dřív. Žádná magie — prohoď řádky a spusť znovu.
Console = konzole, tedy to černé okno s textem.. = „u ní", „její".WriteLine = „napiš řádek".( ) = závorky, do kterých dáváš, co se má napsat.Celé to čti jako větu: „Konzole, napiš řádek s tímhle textem."
Text musí být v uvozovkách. Tomu, co je mezi nimi, se říká řetězec
(anglicky string). Bez uvozovek by si překladač myslel, že jde o jméno
nějakého příkazu, a zahlásil CS0103.
Zpětné lomítko \ je kouzelná značka. Říká „další znak ber jinak":
| Zápis | Co udělá |
|---|---|
\n |
odřádkuje uprostřed textu |
\t |
udělá tabulátor (odsazení) |
\" |
napíše uvozovku, aniž by text skončil |
\\ |
napíše jedno zpětné lomítko |
Emoji a české znaky můžeš psát normálně — C# umí celý Unicode.
Když napíšeš Console.WriteLine("Řekl "ahoj" a šel");, řetězec skončí
u druhé uvozovky a zbytek překladač nepochopí. Buď použij \",
nebo dovnitř dej jednoduché uvozovky: "Řekl 'ahoj' a šel".
Proměnná je krabice se jménem, do které si odložíš hodnotu.
Zápis se čte zprava doleva: „vezmi "Arkon" a ulož to do krabice jmeno."
string jmeno = "Arkon"; — krabice na text, proto string.int uroven = 3; — krabice na celé číslo, proto int.
Čísla se nepíšou do uvozovek! "3" je text, 3 je číslo.jmeno = "Elara"; — bez string na začátku, protože krabice už existuje.
Jen do ní dáváš něco jiného. Proto pro-měnná: její obsah se dá měnit.Jména si vymýšlíš ty, ale bez mezer a bez háčků: jmeno, ne jméno hrdiny.
Zvyk v C# je psát je takhleMalymVelkym (tzv. camelCase).
Bez proměnné bys jméno hrdiny psal do programu desetkrát. S proměnnou ho napíšeš jednou a na deseti místech použiješ její jméno. Když se hrdina přejmenuje, měníš jedno místo. Tohle je důvod, proč proměnné existují.
Dva způsoby, jak spojit text s proměnnou:
+ — funguje, ale při třech proměnných se to stane nečitelnou změtí
uvozovek a plusů.$"..." — před uvozovky napíšeš dolar a proměnnou pak píšeš
rovnou do textu ve složených závorkách. Tohle používej.Dolar říká překladači: „v tomhle textu hledej složené závorky a nahraď je hodnotami."
Uvnitř {} může být i výpočet: {uroven + 2} vypíše číslo o dvě větší.
Nezapomeň na dolar. Bez něj se vypíše doslova {jmeno} i se závorkami —
a je to nejčastější „proč mi to nefunguje" dnešní hodiny.
Počítá se úplně normálně: + - * (krát) / (děleno).
Dvě věci, které překvapí:
% je zbytek po dělení. 12 % 5 je 2. Bude se hodit u kostky,
střídání hráčů a náhody.12 / 5 je 2, ne 2,4.
Zbytek se zahodí. Když chceš desetinný výsledek, potřebuješ jiný typ krabice
(double) — a to je téma příští hodiny.Řádek zlato = zlato - cena; vypadá matematicky nesmyslně, ale čti ho jako
příkaz: „spočítej zlato - cena a výsledek ulož zpátky do zlato."
Rovnítko v programu není rovnost, ale ukládání.
Console.Write("Jak se jmenuje tvůj hrdina? ");
string jmeno = Console.ReadLine();
Console.WriteLine($"Vítej, {jmeno}!");
Console.ReadLine() počká, až uživatel něco napíše a zmáčkne Enter,
a ten text ti vrátí. Výsledek si musíš uložit do proměnné, jinak se ztratí.
Všimni si Console.Write (bez Line) v otázce — díky tomu zůstane kurzor
na stejném řádku hned za otazníkem. Vypadá to jako opravdová konverzace.
Pozor: ReadLine vrací vždycky text. I když uživatel napíše 42,
dostaneš text "42", se kterým se nedá počítat. Na převod slouží
int.Parse(...) — viz další ukázka.
Dole v dílně uvidíš políčko Standardní vstup (stdin). Tady v prohlížeči
totiž není klávesnice konzole, takže odpovědi napíšeš dopředu:
každý řádek = jedna odpověď na jedno Console.ReadLine().
Console.ReadLine() — jeden řádek na jedno čtení.int.Parse("12") znamená „vezmi text a udělej z něj číslo". Bez toho by
sila * 2 skončilo chybou, protože text se nedá násobit.
Když uživatel napíše něco, co číslo není (třeba dvanáct), program spadne
na FormatException. To je v pořádku — dnes to nebudeme ošetřovat,
jen si toho všimni, až se to stane.
V konzoli nemáš obrázky — kreslí se znaky. A to jde překvapivě dobře.
new string('=', 30) vyrobí text z třiceti rovnítek.
Čti: „nový text ze znaku =, třicetkrát". Znak je v jednoduchých
uvozovkách, text ve dvojitých.jmeno.PadRight(26) doplní text mezerami do délky 26 znaků,
takže svislítka jsou pod sebou. Bez toho by se rámeček rozjel.Zkus si místo = dát ─, ═ nebo *. A zkus změnit 30 na 50.
Tohle je první moment, kdy z textu vznikne něco, co vypadá jako hra. Děti tady začnou samy vymýšlet vlastní rámečky — nechte je.
Věci, které dětem dnes neříkejte, ale vy je vědět potřebujete.
Proč tam není Main. Od C# 9 / .NET 5 existují top-level statements:
překladač kolem vašeho kódu Main dogeneruje sám. Starší tutoriály a hlavně
starší školní materiály ukazují plnou podobu:
using System;
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Ahoj");
}
}
Obojí je platné C# a dělá totéž. My držíme celý rok krátký zápis, protože u dvanáctiletých je každý řádek „takhle se to prostě musí napsat" zbytečná zátěž. Třídy přijdou v 16. hodině a tam se k plné podobě vrátíme.
Proč není potřeba using System;. Nové projekty mají zapnuté implicit usings
(v .csproj je <ImplicitUsings>enable</ImplicitUsings>), takže System,
System.Linq, System.Collections.Generic a další jsou k dispozici automaticky.
Stejné nastavení má i běhové prostředí těchto stránek. Když dítě using System;
napíše, nic se nestane — je to povolené, jen nadbytečné.
Co běží v prohlížeči. Tlačítko Spustit na téhle stránce nikam neposílá kód.
Uvnitř prohlížeče běží skutečný překladač Roslyn (přeložený do WebAssembly),
který kód přeloží a spustí a vrátí text, který program vypsal do konzole.
Rozdíly proti dotnet run na počítači:
| Funguje | Nefunguje |
|---|---|
| texty, čísla, podmínky, cykly | práce se soubory (File, Directory) |
List, Dictionary, LINQ |
síť (HttpClient) |
| třídy, metody, výjimky | Thread.Sleep, Task.Delay |
Console.ReadLine() přes políčko stdin |
Console.ForegroundColor (barvy) |
U kódu, který sáhne na zakázanou věc, se tlačítko Spustit vůbec nenabídne — generátor stránky to pozná podle textu kódu a zobrazí jen kód s vysvětlením.
Console.ReadLine() může vrátit null. Když vstup dojde, vrací null
a ve VS Code kvůli tomu svítí žlutá vlnovka (CS8600). Je to varování, ne chyba,
program se přeloží a poběží. Dětem to nevysvětlujte; kdo se zeptá, řekněte
„to znamená co když tam uživatel nic nenapíše — vyřešíme to později".
Správné ošetření (?? "", TryParse) přijde v 7. hodině u podmínek.
Kultura a desetinná čárka. 12.5.ToString() vypíše na českém systému 12,5.
Dnes to nevadí, ale až se objeví desetinná čísla, počítejte s dotazem
„proč má učitel čárku a já tečku".
Console.WriteLine s dalším řádkem.Co si z toho odnést: tři příkazy, tři řádky výstupu, přesně v tom pořadí, v jakém jsou napsané. Nic víc v tom není.
\n uprostřed věty.\t mezi dvě slova — o kolik se odsadí?\"uvozovek\".\ a za ním písmeno, které nic neznamená (třeba \q)?Co si z toho odnést: \n je odřádkování, \t je tabulátor, \" je uvozovka
uvnitř textu. Zpětné lomítko není písmeno, ale pokyn.
int zlato = 50; a vypiš ji dalším řádkem.{sila + obrana}.Co si z toho odnést: hodnoty jsou nahoře na jednom místě, výpis dole. Když změníš jméno nahoře, změní se všude dole. To je celé kouzlo proměnných.
Console.ReadLine() — jeden řádek na jedno čtení.Co si z toho odnést: Console.ReadLine() přečte řádek, int.Parse(...) z něj
udělá číslo. V prohlížeči odpovědi předepíšeš do políčka stdin — na počítači
je budeš normálně psát na klávesnici.
32 na 50. Nezapomeň i na PadRight!═ za *, # nebo ─.{sila + obrana + uroven}.Co si z toho odnést: PadRight drží svislítka pod sebou. U čísla se musí
nejdřív říct .ToString(), protože zarovnávat jde jen text.
Program.cs(3,42): error CS1002: ; expected
Chybová hláška není nadávka, je to adresa. Čti ji zleva:
Program.cs — ve kterém souboru,(3,42) — řádek 3, sloupec 42,CS1002 — kód chyby (dá se vygooglit),; expected — co překladač čekal a nenašel.Jdi na řádek 3 a podívej se na jeho konec. Chybí středník.
Pravidlo pro dnešek: vždycky oprav první chybu shora. Jedna chyba jich často vyvolá dalších pět. Po opravě té první zmizí i ostatní.
| Hláška | Co to znamená | Jak to opravit |
|---|---|---|
CS1002: ; expected |
chybí středník | dopiš ; na konec řádku |
CS1010: Newline in constant |
neuzavřená uvozovka | doplň druhou " |
CS0103: The name ... does not exist |
překlep nebo malé písmeno | Console.WriteLine, ne console.writeline |
CS0029 / CS1503 |
míchá se text a číslo | u čísla použij int.Parse(...) |
CS0165: Use of unassigned variable |
proměnná nemá hodnotu | přiřaď jí něco při vytvoření |
MSB1003 |
špatná složka v terminálu | cd do složky projektu |
vypíše se {jmeno} |
chybí dolar | napiš $"..." |
Tvoje zadání:
Napiš program, který vypíše vizitku tvého hrdiny. Musí obsahovat:
- Nadpis
=== VIZITKA HRDINY ===na prvním řádku💡 Poradit
Použij jedenConsole.WriteLinea celý nadpis dej do uvozovek.
NapříkladConsole.WriteLine("=== VIZITKA HRDINY ===");. Nezapomeň na středník na konci.- Proměnné
jmenoapovolanis tvými hodnotami💡 Poradit
Text se ukládá do krabice typustring. Napiš typ, jméno krabice, rovnítko a hodnotu v uvozovkách.
Napříkladstring jmeno = "Arkon";a pod tostring povolani = "Kouzelník";.- Výpis obou proměnných pomocí interpolace
$"..."💡 Poradit
Před uvozovky napiš dolar a proměnnou vlož do složených závorek.
NapříkladConsole.WriteLine($"Jméno: {jmeno}");. Bez dolaru se vypíše doslova{jmeno}.- Čísla
uroven,silaazivotya jejich výpis💡 Poradit
Celá čísla se ukládají do krabiceinta nepíšou se do uvozovek.
Napříkladint uroven = 3;. Vypíšeš je stejně jako text:Console.WriteLine($"Úroveň: {uroven}");.- Poslední řádek s výpočtem bojové hodnoty přímo v interpolaci
💡 Poradit
Do složených závorek smíš napsat i počítání, ne jen jméno proměnné.
NapříkladConsole.WriteLine($"Bojová hodnota: {sila * 2 + uroven}");.
| Úroveň | Co má zvládnout |
|---|---|
| Minimum | Body 1–3 fungují |
| Rozšíření | Přidat prázdné řádky Console.WriteLine(); mezi sekce a další proměnnou (zlato) |
| Výzva | Vypsat i „životy po zásahu" jako {zivoty - 25} a přidat emoji do nadpisu |
Očekávaný výsledek: sedm až devět řádků textu s nadpisem, údaji o hrdinovi a spočítanou bojovou hodnotou.
Kde se zaseknou:
CS1002 místo hledání očima.int sila = "12"; nejde přeložit (CS0029).
Řekněte: „uvozovky znamenají text, a text se nedá násobit".{jmeno}. Nechte je chvíli hledat samy —
když to najdou, zapamatují si to nadosmrti.console.WriteLine → CS0103. Na tabuli velkými písmeny:
C# ROZLIŠUJE VELKÁ A MALÁ PÍSMENA.string jméno sice C# povolí, ale poraďte
psát bez diakritiky — jinak se jim překlepy hledají špatně.Kdo je hotový dřív: ať přidá proměnnou int zlato a řádek
Console.WriteLine($"Po nákupu lektvaru: {zlato - 30} zlaťáků");.
Otázka na závěr cvičení: „Kolik míst musíš změnit, když se hrdina přejmenuje?" Odpověď je jedno — a to je celý smysl proměnných.
Tvoje zadání:
Vezmi vizitku z prvního cvičení a dej ji do rámečku ze znaků.
- Horní a dolní čára z 34 znaků
═💡 Poradit
Nemusíš psát 34 znaků ručně.new string('═', 34)vyrobí text z 34 stejných znaků.
Pozor: znak je v jednoduchých uvozovkách, protože je to jeden jediný znak.
Celý řádek:Console.WriteLine(new string('═', 34));- Uprostřed nadpis
CSQUEST💡 Poradit
Stačí obyčejnýConsole.WriteLines mezerami na začátku textu.
NapříkladConsole.WriteLine(" CSQUEST");. Mezery uvnitř uvozovek se počítají.- Každý údaj na řádku se svislítkem
║na začátku i na konci💡 Poradit
Svislítko dej dovnitř textu v interpolaci.
NapříkladConsole.WriteLine($"║ Jméno: {jmeno} ║");. Zatím se to nebude zarovnávat — to je další bod.- Svislítka srovnaná pod sebou pomocí
PadRight💡 Poradit
jmeno.PadRight(20)doplní text mezerami na délku 20 znaků, takže všechny řádky budou stejně dlouhé.
NapříkladConsole.WriteLine($"║ Jméno: {jmeno.PadRight(20)} ║");.
U čísla musíš nejdřív říct.ToString():{uroven.ToString().PadRight(20)}.- Pod rámečkem prázdný řádek a hláška „Hrdina připraven."
💡 Poradit
Prázdný řádek vyrobíšConsole.WriteLine();úplně bez textu v závorce.
Pak přidej ještě jeden normální výpis s hláškou.
| Úroveň | Co má zvládnout |
|---|---|
| Minimum | Body 1–3 fungují (rámeček je, zarovnání ještě ne) |
| Rozšíření | Body 4–5, svislítka přesně pod sebou |
| Výzva | Vyrobit rámeček s rohy ╔ ╗ ╚ ╝ a vodorovnou dělicí čárou uvnitř |
Očekávaný výsledek: rámeček, ve kterém jsou svislítka přesně pod sebou. Tohle je hodina, kdy si děti poprvé řeknou „to vypadá jako opravdová hra".
Kde se zaseknou:
new string("═", 34) nejde (CS1503).
Znak = jednoduché uvozovky, text = dvojité. Napište to na tabuli.PadRight na čísle. uroven.PadRight(19) nejde, protože číslo není text.
Nejdřív .ToString(), pak PadRight. Tohle je dnes nejtěžší moment hodiny —
klidně jim to řešení rovnou ukažte a jděte dál.PadRight i v čáře.═ na klávesnici není. Nechte je zkopírovat ze zadání
nebo použít obyčejné =. Nezdržujte se s tím.Kdo je hotový dřív: rohy ╔ ╗ ╚ ╝ a ╠ ╣ uprostřed. Vyžaduje to trpělivost
s počítáním znaků a je to skvělá „tichá" práce.
Otázka na závěr cvičení: „Proč nepíšeme 34 rovnítek ručně?" Odpověď: aby stačilo změnit jedno číslo, když chceme rámeček širší.
Tvoje zadání:
Hrdina jde do obchodu a pak do boje. Spočítej, jak dopadne.
- Proměnné
zlato = 150,cenaMece = 90,sila = 12,zivoty = 100💡 Poradit
Čtyři krabice typuintpod sebou, každá na svém řádku.
Napříkladint zlato = 150;. Žádné uvozovky — jsou to čísla.- Vypiš, kolik zlata zbude po nákupu meče
💡 Poradit
Odečti cenu od zlata rovnou v interpolaci.
NapříkladConsole.WriteLine($"Zbude {zlato - cenaMece} zlaťáků.");.- Zlato opravdu změň — po nákupu ho musí být míň i v proměnné
💡 Poradit
Napišzlato = zlato - cenaMece;. Čti to jako příkaz: „spočítej rozdíl a ulož ho zpátky do zlata."
Zkráceně jde napsat izlato -= cenaMece;.- Meč přidá 5 k síle — spočítej nový útok jako
sila * 2💡 Poradit
Nejdřív zvyš sílu:sila = sila + 5;(nebosila += 5;).
Pak vypiš útok:Console.WriteLine($"Útok: {sila * 2}");.- Drak ubere 35 životů — vypiš, kolik zbude, a kolik je to celých desítek
💡 Poradit
Odečti životy stejně jako zlato. Celé desítky získáš celočíselným dělením:{zivoty / 10}.
Zbytek po dělení dá{zivoty % 10}— vyzkoušej si oba.
| Úroveň | Co má zvládnout |
|---|---|
| Minimum | Body 1–3 fungují |
| Rozšíření | Body 4–5 a mezi sekcemi prázdné řádky |
| Výzva | Přidat druhý nákup (lektvar za 25) a ověřit, že zlato klesá postupně |
Očekávaný výsledek: program, ve kterém se hodnoty proměnných postupně mění a každá změna je vidět ve výpisu.
Kde se zaseknou:
zlato = zlato - cenaMece; jim přijde jako nesmysl. V matematice to neplatí.
Vysvětlete přes krabici: „vyndej, co je v krabici, odečti a dej zpátky."
Tohle je nejdůležitější myšlenka celého cvičení.100 / 3 je 33, ne 33,33. Děti to považují za chybu.
Řekněte: „celá čísla neumí desetinná místa, to bude příště".% je pro ně nové. Ukažte na hodinách: 75 % 60 je 15 minut.Kdo je hotový dřív: ať přidá lektvar za 25 zlaťáků, který vrátí 20 životů, a vypíše konečný stav hrdiny.
Otázka na závěr cvičení: „Co bude v proměnné zlato na konci programu
a proč to není 150?"
Tvoje zadání:
Napiš program, který si hrdinu nechá vytvořit uživatelem.
- Zeptej se na jméno pomocí
Console.WriteaConsole.ReadLine()💡 Poradit
Nejdřív otázka bez odřádkování, pak čtení odpovědi do proměnné.Console.Write("Jméno hrdiny: ");string jmeno = Console.ReadLine();- Zeptej se na povolání a obojí vypiš
💡 Poradit
Úplně stejně jako u jména — dalšíConsole.Writea další proměnná.
Pak vypiš obojí jednou interpolací:Console.WriteLine($"{jmeno} je {povolani}.");- Zeptej se na sílu a převeď odpověď na číslo
💡 Poradit
Console.ReadLine()vrací text, i když napíšeš číslice. Na číslo ho převedeš pomocíint.Parse(...).int sila = int.Parse(Console.ReadLine());- Spočítej a vypiš útok jako
sila * 2💡 Poradit
Když je síla opravdu číslo, můžeš s ní počítat rovnou ve složených závorkách.Console.WriteLine($"Útok: {sila * 2}");
Kdyby síla zůstala textem, program by tady spadl.- Výsledek vypiš jako hotovou vizitku s čárou nahoře i dole
💡 Poradit
Před výpis a za výpis dejConsole.WriteLine(new string('-', 30));.
Uprostřed použijPadRight, ať to drží tvar.Pozor: odpovědi se v prohlížeči píšou dopředu do políčka Standardní vstup (stdin) pod kódem — každý řádek je jedna odpověď.
| Úroveň | Co má zvládnout |
|---|---|
| Minimum | Body 1–2 fungují (ptá se na jméno a povolání) |
| Rozšíření | Body 3–4 s int.Parse a výpočtem |
| Výzva | Zeptat se i na obranu a spočítat bojovou hodnotu sila * 2 + obrana |
Console.ReadLine() — jeden řádek na jedno čtení.Očekávaný výsledek: program, který se zeptá na tři věci a vypíše z nich vizitku. Na počítači je to první opravdová interakce — děti to budou zkoušet dokola.
Kde se zaseknou:
Console.ReadLine(); bez string jmeno =
a pak se diví, že jméno „zmizelo". Přirovnejte to k tomu, že něco chytnete
a hned pustíte na zem.int.Parse skončí sila * 2 chybou CS0019.
Věta na zapamatování: „z klávesnice chodí vždycky text."int.Parse(null) skončí chybou.dotnet run opravdu zastaví a čeká na Enter.
Někdo si bude myslet, že se program zasekl.CS8600 u string jmeno = Console.ReadLine(); je jen varování.
Ignorujte ho, program funguje.Kdo je hotový dřív: ať se zeptá i na obranu a vypíše bojovou hodnotu. Nebo ať se zeptá na počet lektvarů a spočítá, kolik životů celkem doplní.
Otázka na závěr cvičení: „Proč musí být u síly int.Parse a u jména ne?"
Console.ReadLine() — jeden řádek na jedno čtení.Tvoje zadání:
Spoj všechno dohromady a vytvoř úvodní obrazovku své hry.
- Velký nadpis hry ze znaků — aspoň tři řádky
💡 Poradit
Čára, název, čára. Na čáry použijnew string('═', 44), na název obyčejnýConsole.WriteLines mezerami na začátku.- Krátký popis světa (2–3 věty)
💡 Poradit
Každá věta jedenConsole.WriteLine. Mezi odstavce dej prázdný řádek pomocíConsole.WriteLine();.
Uvnitř věty můžeš použít\n, když chceš zalomit ručně.- Vizitka hrdiny z proměnných, zarovnaná
💡 Poradit
Vezmi to, co jsi dělal ve cvičeních 1 a 2: proměnné nahoře, výpis sPadRightdole.
U čísel nezapomeň.ToString()předPadRight.- Seznam tří míst, kam se dá jít, očíslovaný
💡 Poradit
Tři výpisy pod sebou, každý začíná číslem.
NapříkladConsole.WriteLine(" [1] Temný les");. Hranaté závorky vypadají v konzoli dobře.- Na konci se zeptej „Kam se vydáš?" a odpověď zopakuj
💡 Poradit
Console.Write("Kam se vydáš? ");a pakstring volba = Console.ReadLine();.
Odpověď vypiš zpátky:Console.WriteLine($"Vydáváš se do oblasti {volba}. Hodně štěstí!");
Že program zatím nikam nejde, je v pořádku — rozhodování přijde v 7. hodině.
| Úroveň | Co má zvládnout |
|---|---|
| Minimum | Body 1–3 (nadpis, popis, vizitka) |
| Rozšíření | Body 4–5 se seznamem míst a otázkou |
| Výzva | Celá obrazovka v jednom rámečku, šířka řízená proměnnou sirka |
Console.ReadLine() — jeden řádek na jedno čtení.Očekávaný výsledek: obrazovka, která vypadá jako úvod skutečné textové hry. Tohle je výstup hodiny — nechte děti obrazovky navzájem ukázat.
Kde se zaseknou:
Console.ForegroundColor tady v prohlížeči nefunguje
a ve VS Code to zbytečně komplikuje. Řekněte, že barvy si dáme později.Kdo je hotový dřív: proměnná int sirka = 44; a všechny čáry i PadRight
odvozené od ní. Když pak změní jedno číslo, přizpůsobí se celá obrazovka.
Otázka na závěr hodiny: „Co by tvoje hra měla umět jako první věc příště?" Odpovědi si poznamenejte — v dalších hodinách se na ně dá odkazovat.
Console.ReadLine() — jeden řádek na jedno čtení.Uprav svůj soubor
Program.cstak, aby úvodní obrazovka CsQuestu obsahovala:
- vlastní název hry místo „CsQuest" a nadpis v rámečku ze znaků,
- alespoň šest údajů o hrdinovi v proměnných (jméno, povolání, domov, úroveň, životy, zlato),
- alespoň jeden výpočet přímo v interpolaci (útok, bojová hodnota, zlato po nákupu),
- seznam tří míst, kam se dá vydat,
- a na konci otázku, na kterou uživatel odpoví, a program odpověď zopakuje.
Ulož snímek obrazovky (nebo soubor
Program.cs) a přines na příští hodinu.
Úkol je schválně otevřený — nejde o správnou odpověď, ale o to, aby si dítě sedlo doma k počítači a znovu si otevřelo VS Code. Pokud to udělá, návyk je založený.
Na začátku příští hodiny si vyhraďte pět minut na promítnutí tří až pěti domácích úkolů. Nehodnoťte správnost, komentujte nápady. Kdo úkol nemá, nic se neděje — 2. hodina začíná od nuly u proměnných a typů.
Kdo nemá doma .NET, může úkol udělat přímo na téhle stránce v prohlížeči a výsledek poslat jako zkopírovaný text. Nikdo nemá výmluvu.
Zálohujte za ně. Řekněte jim, ať vám soubor Program.cs pošlou
e-mailem nebo do sdílené složky. Za tři měsíce budete rádi,
že máte zálohu, když někomu spadne notebook.
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.
Console.ReadLine() — jeden řádek na jedno čtení.Oficiální dokumentace je místo, kam se programátoři chodí podívat, když si chtějí něco ověřit nebo zjistit víc detailů. Je většinou v angličtině, ale to nevadí — zkus se orientovat podle názvu příkazu a podle ukázek kódu.
| Co jsme použili | Oficiální dokumentace | Co tam najdeš |
|---|---|---|
Console.WriteLine |
Console.WriteLine |
výpis textu s odřádkováním a všechny varianty |
Console.Write |
Console.Write |
výpis bez odřádkování |
Console.ReadLine |
Console.ReadLine |
přečtení řádku od uživatele |
string |
Typ string |
textové proměnné a co s nimi jde dělat |
int |
Celočíselné typy | rozsahy celých čísel |
$"..." |
Interpolace řetězců | vkládání proměnných a výpočtů do textu |
\n, \t, \" |
Escape sekvence | seznam všech speciálních znaků |
int.Parse |
int.Parse |
převod textu na číslo |
PadRight |
String.PadRight |
doplnění textu mezerami zprava |
PadLeft |
String.PadLeft |
doplnění textu mezerami zleva |
new string(znak, počet) |
Konstruktor String |
vyrobení textu z opakovaného znaku |
% (zbytek) |
Aritmetické operátory | dělení, zbytek a celočíselné dělení |
| Top-level statements | Program bez Main |
proč nám stačí psát rovnou příkazy |
dotnet new / dotnet run |
Příkazy .NET CLI | všechny příkazy pro práci s projektem |
Nechte děti dokumentaci vidět, ale nenuťte je číst ji. Stačí, když si zapamatují, že existuje a že se tam dá dojít přes Google dotazem typu „c# console writeline docs".
Užitečný trik: ve VS Code stačí najet myší na Console.WriteLine
a zobrazí se stejná nápověda přímo v editoru. To děti ocení víc než odkaz.
Pro rychlejší studenty, kteří dokončí cvičení dřív, nebo na posledních 10–15 minut.
| Cvičení | Odkaz | Proč se hodí |
|---|---|---|
| Programování — základy | umimeinformatiku.cz | Pořadí příkazů a čtení kódu bez ohledu na jazyk |
| Želví grafika | umimeinformatiku.cz | Program jako posloupnost příkazů — přesně dnešní téma |
| Proměnné a výrazy | umimeinformatiku.cz | Co je v krabici po několika přiřazeních |
Želví grafika je zde obzvlášť vhodná, protože procvičuje přesně tu dovednost, kterou děti dnes použily — přemýšlet o výsledku jako o posloupnosti příkazů, které se provedou v pořadí.
Nedávejte to celé třídě naráz. Použijte to jako záložní aktivitu pro tři až pět nejrychlejších dětí, aby nerušily ostatní. Mějte odkaz připravený v záložkách prohlížeče, ať ho nemusíte hledat.
Dobrá alternativa pro rychlíky: ať si ve svém programu zkusí vyrobit
rámeček s rohy ╔ ╗ ╚ ╝. Zabaví je to na deset minut a naučí je to počítat znaky.