← Zpět na obsah

Kapitola 12: Návrh jednoduchého programu (blokové programování)

Scratch - vizuální programování s bloky
Scratch - vizuální programování s bloky

1. Úvod: Stavíme program jako z kostek LEGO

Už víme, že počítač potřebuje přesné instrukce, aby něco udělal. Tyto instrukce nazýváme program. Ale jak takový program vytvořit? Pro začátek je nejlepší použít blokové programování. Představ si, že stavíš něco z kostek LEGO. Každá kostka má svůj tvar a funkci. Když je správně poskládáš, vytvoříš něco úžasného. V blokovém programování jsou "kostky" příkazy a ty je skládáš dohromady, abys vytvořil program.

2. Co je to blokové programování?

Blokové programování je způsob, jak vytvářet programy pomocí grafických bloků, které do sebe zapadají jako dílky puzzle. Místo psaní složitých textových příkazů jednoduše přetahuješ a spojuješ bloky.

Definice: Blokové programování

Blokové programování je vizuální způsob vytváření počítačových programů, kde se příkazy a funkce reprezentují jako grafické bloky, které se skládají dohromady.

Proč je blokové programování skvělé pro začátečníky?

Příklady blokových programovacích jazyků:

3. Základní stavební kameny programu

I v blokovém programování používáme základní nápady, které jsou důležité pro každý program.

3.1. Příkazy (Instrukce)

Každý blok je jeden příkaz, jedna instrukce pro počítač.

Příklady příkazů:

3.2. Opakování (Cykly)

Někdy chceme, aby počítač udělal něco několikrát za sebou. Místo toho, abychom psali stejný příkaz pořád dokola, použijeme blok pro opakování.

Definice: Opakování (Cyklus)

Opakování (cyklus) je část programu, která způsobí, že se jeden nebo více příkazů provede vícekrát.

Příklad: Nakreslit čtverec
Místo: Použijeme: Je to mnohem kratší a přehlednější!

3.3. Větvení (Podmínky)

Někdy se počítač musí rozhodnout, co udělá dál, podle toho, co se stane. Použijeme blok pro větvení nebo podmínku.

Definice: Větvení (Podmínka)

Větvení (podmínka) je část programu, která umožňuje počítači vybrat si, který příkaz provede, na základě toho, zda je splněna nějaká podmínka.

Příklad: Robot a zeď
Robot se rozhodne, co udělá, podle toho, jestli před ním je zeď, nebo ne.
Kategorie Scratch bloků podle funkce
Kategorie Scratch bloků podle funkce

4. Návrh jednoduchého a přehledného programu

Když skládáme bloky, je důležité, aby náš program byl jednoduchý a přehledný. To znamená, že by ho měl snadno pochopit i někdo jiný.

5. Jak začít se Scratchem: Průvodce krok za krokem

5.1. Spuštění Scratche

Jak se dostat ke Scratchi:

  1. 🌐 Otevři webový prohlížeč (Chrome, Firefox, Edge...)
  2. ⌨️ V adresním řádku napiš: scratch.mit.edu
  3. 🖱️ Klikni na "Tvoř" (nahoře na stránce)
  4. ✨ Otevře se ti editor Scratch – můžeš začít!

Poznámka: Scratch funguje přímo v prohlížeči, nemusíš nic instalovat. Pokud chceš své projekty ukládat, můžeš si vytvořit účet (zdarma).

5.2. Rozhraní Scratche – Co je kde?

Když otevřeš Scratch, uvidíš tři hlavní oblasti:

1️⃣ Paleta bloků (vlevo)
Tady najdeš všechny bloky, které můžeš použít. Jsou rozdělené do barevných kategorií:
2️⃣ Pracovní plocha (uprostřed)
Sem přetahuješ bloky a spojuješ je dohromady. Tady sestavuješ svůj program.
3️⃣ Scéna a sprite (vpravo)
Scéna: Místo, kde se tvůj program "odehrává". Tady vidíš, co tvůj program dělá.
Sprite: Postava nebo objekt, který programuješ (defaultně je to kočička 🐱).

5.3. Tvůj první program ve Scratchi: "Ahoj, světe!"

Vytvoříme program, který způsobí, že kočička řekne "Ahoj, světe!"

Postup:

  1. 1️⃣ V paletě bloků vlevo klikni na 🟡 Události
  2. 2️⃣ Najdi blok když se klikne na 🏴 a přetáhni ho do pracovní plochy
  3. 3️⃣ V paletě klikni na 🟣 Vzhled
  4. 4️⃣ Najdi blok řekni Ahoj! na 2 sekund a přetáhni ho pod předchozí blok
  5. 5️⃣ Bloky se automaticky spojí (zapadnou do sebe jako puzzle)
  6. 6️⃣ V bloku "řekni" klikni na slovo "Ahoj!" a napiš "Ahoj, světe!"
  7. 7️⃣ Nahoře nad scénou klikni na zelenou vlajku 🏴
  8. ✅ Kočička řekne: "Ahoj, světe!" 🎉

5.4. Tvůj druhý program: Nakresli čtverec

Teď vytvoříme program, který nakreslí čtverec pomocí opakování.

Postup:

  1. 1️⃣ Nejdříve přidáme rozšíření "Pero" (pro kreslení):
    → Dole vlevo klikni na ikonu "Přidat rozšíření" (+)
    → Vyber "Pero"
  2. 2️⃣ Teď sestavíme program z těchto bloků:
🟡 když se klikne na 🏴
🟢 smaž vše (z kategorie Pero - zelená)
🟢 pero dolů (z kategorie Pero)
🟠 opakuj 4x (z kategorie Řízení - oranžová)
    🔵 posuň se o 100 kroků (z kategorie Pohyb - modrá)
    🔵 otoč se doprava o 90 stupňů (z kategorie Pohyb)
  • 3️⃣ Klikni na zelenou vlajku 🏴
  • ✅ Kočička nakreslí čtverec! 🎨
  • 5.5. Důležité tipy pro práci se Scratchem

    Člověk a digitální svět

    Blokové programování je skvělý způsob, jak se naučit myslet jako tvůrce v digitálním světě. Místo toho, abychom byli jen pasivními uživateli aplikací, můžeme se stát těmi, kdo je vytváří. Učíme se tak řešit problémy, být kreativní a dávat počítači smysluplné pokyny. Tato dovednost je cenná nejen pro budoucí programátory, ale pro každého, kdo chce lépe rozumět technologiím, které nás obklopují.

    Otázky k zamyšlení

    Úkoly pro praxi

    1. Robot a čtverec: Představ si, že máš robota, který umí jen "Jdi vpřed o 1 krok" a "Otoč se doprava o 90 stupňů". Napiš mu program (pomocí opakování), aby nakreslil čtverec.
    2. Robot a překážky: Napiš program pro robota, který se pohybuje vpřed. Pokud narazí na překážku, má se otočit doprava a jít dál. Pokud nenarazí, má jít jen vpřed.
    3. Hra "Hádej číslo": Zkus si vymyslet, jak bys naprogramoval jednoduchou hru, kde si počítač myslí číslo a ty ho hádáš. Program by ti měl říkat, jestli je tvé číslo větší nebo menší. Jaké opakování a větvení bys použil?

    * Rozšíření pro pokročilé

    Od bloků k textovému kódu

    Blokové programování je přípravou na "skutečné" programovací jazyky. Porovnání:

    Scratch blok Python kód
    opakuj 10x for i in range(10):
    pokud <podmínka> tak if podmínka:
    nastav [x] na (0) x = 0

    Pokročilé koncepty ve Scratchi

    Event-driven programming

    Scratch používá událostmi řízené programování: program reaguje na události (kliknutí, stisk klávesy, zpráva). To je základ moderních aplikací a her.

    Cykly v programování - opakování bloků
    Cykly v programování - opakování bloků

    * Úkoly pro pokročilé

    1. Scratch – Klony: Vytvoř program, kde stisknutím mezerníku sprite vystřelí "kulku" (klon). Klon letí nahoru a zmizí na okraji obrazovky.
    2. Scratch – Seznamy: Vytvoř program "To-do list": uživatel může přidávat úkoly do seznamu, zobrazit seznam a mazat dokončené úkoly.
    3. Scratch – Kompletní hra: Vytvoř hru "Chytání padajících objektů": objekty padají shora, hráč je chytá dole. Použij klony, skóre (proměnná), zvyšující se rychlost (čím déle hraješ).
    4. Word – Dokumentace projektu: Napiš dokumentaci ke svému Scratch projektu: Název, Popis, Ovládání, Pravidla, Seznam sprites, Seznam proměnných, Screenshoty. Formátuj profesionálně.

    ** Rozšíření pro maturitní obory

    Od bloků k textovému kódu

    Blokové programování je skvělý start, ale profesionální programátoři používají textové jazyky. Přechod je jednodušší, než si myslíš:

    Scratch Python
    opakuj 10× for i in range(10):
    když [podmínka] tak if podminka:
    nastav [proměnná] na [hodnota] promenna = hodnota
    řekni [text] print(text)

    Další blokové nástroje

    Úvod do Pythonu – základy

    # Proměnné a výstup
    jmeno = "Anna"
    vek = 15
    print("Ahoj, " + jmeno)
    print("Je ti", vek, "let")
    
    # Podmínka
    if vek >= 18:
        print("Jsi dospělý")
    else:
        print("Jsi mladistvý")
    
    # Cyklus
    for i in range(5):
        print("Opakování č.", i)
            
    Od bloků k textovému kódu
    Od bloků k textovému kódu

    ** Úkoly pro maturitní obory

    1. Flowgorithm – Kompletní program: Vytvoř ve Flowgorithm program "Hádej číslo": počítač vymyslí číslo 1-100, hráč hádá, program říká "větší/menší", počítá pokusy. Použij While cyklus.
    2. Flowgorithm → Python: Exportuj svůj Flowgorithm program do Pythonu. Zkopíruj kód, vysvětli každý řádek. Zkus ho spustit v online Python editoru (např. replit.com).
    3. Python – První kroky: Napiš v Pythonu program, který se zeptá na jméno a věk, pak vypíše pozdrav a kolik let zbývá do plnoletosti (nebo že už je plnoletý).
    4. Scratch → Python překlad: Vezmi svůj Scratch projekt a "přelož" jeho logiku do pseudokódu, pak do Pythonu. Porovnej délku a čitelnost.
    5. PowerPoint – Srovnání jazyků: Vytvoř prezentaci "Od Scratch k Pythonu" (10-12 snímků). Srovnej syntaxi, možnosti, obtížnost. Ukaž stejný program v obou jazycích.
    6. Canva – Tahák Python: Vytvoř v Canvě jednostránkový tahák základní syntaxe Pythonu: proměnné, print, input, if, for, while. Formát A4.

    *** Rozšíření pro IT obory

    Jako budoucí IT specialista potřebuješ přejít od blokového programování k textovým jazykům. Python je ideální volba pro začátek.

    Kompletní přechod ze Scratch do Pythonu

    # Scratch: "Když klikneš na zelenou vlajku"
    # Python: Program začne automaticky
    
    # Scratch: "Zeptej se 'Jak se jmenuješ?' a čekej"
    jmeno = input("Jak se jmenuješ? ")
    
    # Scratch: "Řekni odpověď"
    print(f"Ahoj, {jmeno}!")
    
    # Scratch: "Nastav proměnnou skore na 0"
    skore = 0
    
    # Scratch: "Opakuj 10x"
    for i in range(10):
        print(f"Kolo {i + 1}")
    
    # Scratch: "Opakuj dokud skore = 10"
    while skore < 10:
        skore += 1
        print(f"Skóre: {skore}")
    
    # Scratch: "Pokud odpověď = ano"
    odpoved = input("Chceš pokračovat? (ano/ne) ")
    if odpoved == "ano":
        print("Pokračujeme!")
    else:
        print("Konec.")
            

    Hra "Hádej číslo" v Pythonu

    import random
    
    def hadej_cislo():
        """Hra kde hráč hádá náhodné číslo."""
        tajne_cislo = random.randint(1, 100)
        pokusy = 0
    
        print("Myslím si číslo od 1 do 100. Zkus ho uhodnout!")
    
        while True:
            tip = int(input("Tvůj tip: "))
            pokusy += 1
    
            if tip < tajne_cislo:
                print("Moc málo! Zkus vyšší číslo.")
            elif tip > tajne_cislo:
                print("Moc moc! Zkus nižší číslo.")
            else:
                print(f"Výborně! Uhodl jsi na {pokusy} pokusů!")
                break
    
        return pokusy
    
    # Spuštění hry
    hadej_cislo()
            

    Turtle Graphics - ekvivalent Scratch kreslení

    import turtle
    
    # Vytvoř "želvu" (jako sprite ve Scratch)
    t = turtle.Turtle()
    t.speed(1)  # Rychlost animace
    
    # Nakresli čtverec (jako ve Scratch s pohyb/otoč)
    for _ in range(4):
        t.forward(100)  # Jdi vpřed 100 kroků
        t.right(90)     # Otoč se doprava o 90°
    
    # Spirála
    t.color("blue")
    for i in range(50):
        t.forward(i * 5)
        t.right(90)
    
    # Hvězda
    t.color("red")
    for _ in range(5):
        t.forward(150)
        t.right(144)
    
    turtle.done()  # Nech okno otevřené
            

    Pygame - tvorba her jako ve Scratch

    # pip install pygame
    import pygame
    import random
    
    # Inicializace
    pygame.init()
    okno = pygame.display.set_mode((800, 600))
    pygame.display.set_caption("Moje první hra")
    hodiny = pygame.time.Clock()
    
    # Sprite (jako ve Scratch)
    hrac_x, hrac_y = 400, 300
    rychlost = 5
    
    # Herní smyčka
    running = True
    while running:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                running = False
    
        # Ovládání klávesnicí
        klavesy = pygame.key.get_pressed()
        if klavesy[pygame.K_LEFT]:
            hrac_x -= rychlost
        if klavesy[pygame.K_RIGHT]:
            hrac_x += rychlost
        if klavesy[pygame.K_UP]:
            hrac_y -= rychlost
        if klavesy[pygame.K_DOWN]:
            hrac_y += rychlost
    
        # Vykreslení
        okno.fill((255, 255, 255))  # Bílé pozadí
        pygame.draw.circle(okno, (255, 0, 0), (hrac_x, hrac_y), 20)
        pygame.display.flip()
        hodiny.tick(60)
    
    pygame.quit()
            

    *** Praktické úkoly pro IT obory

    1. Překlad projektu: Vezmi svůj nejlepší Scratch projekt a přelož ho do Pythonu (použij turtle pro grafiku).
    2. Turtle art: Vytvoř v turtle graphics umělecké dílo - spirály, fraktály nebo geometrické vzory.
    3. Text adventure: Napiš textovou adventuru v Pythonu s větvením příběhu (if/else).
    4. Pygame hra: Vytvoř jednoduchou hru v Pygame - sbírání mincí nebo vyhýbání se překážkám.

    *** Projekt pro IT obory: Správce kontaktů (část 3/4)

    Pokračujeme v projektu Správce kontaktů. V této kapitole vytvoříme hlavní program s menu a validaci vstupů.

    Krok 9: Validace vstupů (utils/validators.py)

    # utils/validators.py
    """Modul pro validaci vstupů."""
    
    import re
    
    def validuj_telefon(telefon):
        """
        Ověří platnost telefonního čísla.
        Povolené formáty: 123456789, +420123456789, 123 456 789
        """
        # Odstraň mezery
        telefon = telefon.replace(" ", "")
    
        # Regex pro české telefonní číslo
        pattern = r'^(\+420)?[0-9]{9}$'
    
        if re.match(pattern, telefon):
            return True, telefon
        return False, "Neplatný formát telefonu"
    
    def validuj_email(email):
        """Ověří platnost e-mailové adresy."""
        if not email:  # Email je volitelný
            return True, email
    
        pattern = r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$'
    
        if re.match(pattern, email):
            return True, email
        return False, "Neplatný formát e-mailu"
    
    def validuj_jmeno(jmeno):
        """Ověří, že jméno není prázdné a má min. 2 znaky."""
        jmeno = jmeno.strip()
    
        if len(jmeno) >= 2:
            return True, jmeno
        return False, "Jméno musí mít alespoň 2 znaky"
            

    Krok 10: Hlavní program (main.py)

    # main.py
    """Hlavní program - Správce kontaktů."""
    
    from models.kontakt import Kontakt
    from models.spravce import SpravceKontaktu
    from utils.validators import validuj_jmeno, validuj_telefon, validuj_email
    
    def zobraz_menu():
        """Zobrazí hlavní menu."""
        print("\n" + "=" * 40)
        print("     SPRÁVCE KONTAKTŮ")
        print("=" * 40)
        print("1. Zobrazit všechny kontakty")
        print("2. Přidat nový kontakt")
        print("3. Vyhledat kontakt")
        print("4. Smazat kontakt")
        print("5. Konec")
        print("-" * 40)
    
    def zobraz_kontakty(kontakty):
        """Zobrazí seznam kontaktů."""
        if not kontakty:
            print("\n📭 Žádné kontakty k zobrazení.")
            return
    
        print(f"\n📋 Nalezeno {len(kontakty)} kontakt(ů):\n")
        for i, k in enumerate(kontakty, 1):
            print(f"  {i}. {k}")
    
    def pridej_kontakt(spravce):
        """Přidá nový kontakt s validací."""
        print("\n➕ PŘIDÁNÍ NOVÉHO KONTAKTU")
        print("-" * 30)
    
        # Jméno
        while True:
            jmeno = input("Jméno: ")
            ok, vysledek = validuj_jmeno(jmeno)
            if ok:
                jmeno = vysledek
                break
            print(f"❌ {vysledek}")
    
        # Telefon
        while True:
            telefon = input("Telefon: ")
            ok, vysledek = validuj_telefon(telefon)
            if ok:
                telefon = vysledek
                break
            print(f"❌ {vysledek}")
    
        # Email (volitelný)
        while True:
            email = input("E-mail (volitelné, Enter pro přeskočení): ")
            ok, vysledek = validuj_email(email)
            if ok:
                email = vysledek
                break
            print(f"❌ {vysledek}")
    
        # Vytvoř a ulož kontakt
        novy = Kontakt(jmeno, telefon, email)
        spravce.pridej(novy)
        print(f"\n✅ Kontakt '{jmeno}' byl úspěšně přidán!")
    
    def vyhledej_kontakt(spravce):
        """Vyhledá kontakty."""
        print("\n🔍 VYHLEDÁVÁNÍ")
        dotaz = input("Zadej jméno nebo telefon: ")
    
        vysledky = spravce.vyhledej(dotaz)
        zobraz_kontakty(vysledky)
    
    def smaz_kontakt(spravce):
        """Smaže kontakt."""
        print("\n🗑️ MAZÁNÍ KONTAKTU")
        jmeno = input("Zadej přesné jméno kontaktu ke smazání: ")
    
        if spravce.odeber(jmeno):
            print(f"\n✅ Kontakt '{jmeno}' byl smazán.")
        else:
            print(f"\n❌ Kontakt '{jmeno}' nebyl nalezen.")
    
    def main():
        """Hlavní funkce programu."""
        spravce = SpravceKontaktu()
    
        print("\n🎉 Vítej ve Správci kontaktů!")
    
        while True:
            zobraz_menu()
            volba = input("Vyber možnost (1-5): ")
    
            if volba == "1":
                zobraz_kontakty(spravce.zobraz_vsechny())
            elif volba == "2":
                pridej_kontakt(spravce)
            elif volba == "3":
                vyhledej_kontakt(spravce)
            elif volba == "4":
                smaz_kontakt(spravce)
            elif volba == "5":
                print("\n👋 Nashledanou!")
                break
            else:
                print("\n❌ Neplatná volba, zkus to znovu.")
    
    if __name__ == "__main__":
        main()
            

    Krok 11: Commit a push

    # Přidej změny
    git add .
    
    # Commit
    git commit -m "Přidán hlavní program s CLI rozhraním
    
    - Implementováno interaktivní menu
    - Přidána validace vstupů (telefon, email, jméno)
    - Barevné emoji pro lepší UX
    - Program je nyní plně funkční"
    
    # Push na GitHub
    git push
            

    Aktuální struktura projektu

    spravce-kontaktu/
    ├── .git/
    ├── .gitignore
    ├── README.md
    ├── main.py                # ✓ NOVÉ - Hlavní program
    ├── models/
    │   ├── __init__.py
    │   ├── kontakt.py
    │   └── spravce.py
    ├── utils/
    │   ├── __init__.py
    │   └── validators.py      # ✓ NOVÉ - Validace
    ├── tests/
    │   ├── __init__.py
    │   ├── test_kontakt.py
    │   └── test_validators.py # (přidej testy pro validátory)
    └── data/
        └── kontakty.json
            

    *** Úkol pro tuto kapitolu

    1. Implementuj main.py a validators.py podle kódu výše.
    2. Spusť program: python main.py
    3. Otestuj všechny funkce: přidání, zobrazení, vyhledání, mazání.
    4. Přidej testy pro validátory (test_validators.py).
    5. Vytvoř commit a nahraj na GitHub.

    V další kapitole: Napíšeme licenci pro náš program.

    ← Zpět na obsah