﻿<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xml" href="/cjs/examples.screen.xsl" media="screen"?>
<examples chapter="Procvičování – hrátky s „printem“" directory="procvicovani">

    <note>
        Autorem původního zadání u příkladu 5 je ???.
    </note>

<!--
    <example>
        <text>
        </text>
        <hint>
        </hint>
        <solution src="procvicovani/ansi-print/.py" lang="python" />
    </example>
-->

    <example>
        <text>
            Začněmež něčím jednodušším – pomocí <code>print('\b')</code> a <code>time.sleep()</code> vytvořte počítadlo od 0 do 60, které bude uvedená čísla vypisovat stále na stejném místě obrazovky.
        </text>
        <hint>
            Dejte si pozor na to, že ve výchozím nastavení je výstup funkce <em>print()</em> bafrován, takže potlačíte-li výpis konce řádku, na konzoli se nevypíše nic!
        </hint>
    </example>

    <example>
        <text>
            Navažte na předchozí příklad a napište program, který bude na jednom a tom samém místě konzole vypisovat sekundové hodiny ve tvaru <code>00:00:00</code>. Začněte počítat od nuly a až vám tohle bude chodit, zkuste další podúlohy:
            <ul>
                <li> K vykreslování hodin použijte „iskejp-sekvence“ (nejen kvůli barvě). </li>
                <li> Program si od uživatele vyžádá vstup (<code>input()</code>) pro „aktuální“ čas, od kterého hodiny poběží, a čas budíku, na který začnou pípat (<code>chr(7)</code>). </li>
                <li> Vezměte si aktuální čas ze systému. </li>
                <li> Pro formátování času použijte systémové nástroje. </li>
            </ul>
        </text>
        <hint>
            Výpis hodin do stále stejného místa se dá zařídit mnoha velmi rozdílnými způsoby – mazáním celé obrazovky, mazáním předchozích znaků, posouváním kurzoru… Pro rozšířené zadání vás bude zajímat modul <em>datetime</em> (má trochu složitější strukturu).
        </hint>
    </example>
    
    <example>
        <text>
            Vykreslete na konzoli šachovnici (tedy střídejte bílá a tmavá pole). Pro začátek klasickou 8×8, později přes celou konzoli (s výhodou asi použijete <em>os.get_terminal_size()</em>).
        </text>
        <hint>
            Při výpisu přes celou konzoli by bylo fajn program hned neukončit, aby se neodřádkovalo. Také si dejte pozor na poslední sloupeček a podobně.
        </hint>
    </example>
    
    <example>
        <text>
            Když už umíme barvy na terminálu, nakreslete šachovnici z předchozího kroku barevně. Ať už dvoubarevně nebo generujte barvy cyklicky nebo náhodně z dostupných.
        </text>
        <hint>
            Cyklické generování je jednoduché, pro náhodné můžete použít třebas <em>random.randint()</em>.
        </hint>
    </example>

    <example>
        <text>
            Rotujte uprostřed terminálového okna vybraný text (výrazně kratší než šířka terminálu).
        </text>
        <hint>
            Jinými slovy vypisujte stále na stejném místě „rotující“ text (tedy text posouvaný postupně po jednom písmenku).
        </hint>
    </example>

    <example>
        <text>
            Implementujte ukazatel stahování souboru (nebo průběhu nějaké operace) ve stylu:
            <pre>     soubor.tgz [######7   ]</pre>
            Na každém místě v hranatých závorkách postupně běží číslice 0 až 9, místo desítky je vypsán <code>#</code> a výpis pokračuje číslem <code>0</code> o pozici dál, až dokud není vyplněna celá závorka.
        </text>
        <hint>
            Závorku udělejte vhodně širokou. Jako dobré cvičení vyplňte dosupné místo na řádce, ale nepřetečte na řádku následující.
        </hint>
    </example>

    <example>
        <text>
            Zahrejte si na molekulu: Vystartujte z náhodného místa konzole náhodným směrem a na okrajích konzole se odrážejte podle (ideálního) zákona odrazu.
        </text>
        <hint>
            Pokud bude mít terminál nějakou nestandardní barvu pozadí, můžete mít problém ji pomocí <em>ANSI-escape sekvencí</em> nastavit. Pak předpokládejte, že terminál je typu „bílé písmo na černém pozadí“.
        </hint>
    </example>


</examples>
