V dnešním článku se seznámíme s vybranými programovacími jazyky a knihovnami, které je možné použít pro výuku základů počítačové grafiky popř. pro tvorbu programů a jednoduchých her, u nichž je vyžadována nějaká forma grafického výstupu. Zaměření dále prezentovaných nástrojů přitom odpovídá znalostem a zkušenostem žáků základních škol.
Obsah
1. Programovací jazyky a knihovny určené pro výuku základů počítačové grafiky
3. Skládání složitějších programů s využitím jednotlivých bloků
4. Přednosti, zápory a omezení Scratche
7. Instalace Basicu-256 na Fedoře
8. Základní strukturované příkazy z Basicu-256
9. Grafický výstup v Basicu-256
1. Programovací jazyky a knihovny určené pro výuku základů počítačové grafiky
It's a bit like learning natural languages: the earlier the better.
Michael Kölling
V současnosti existuje a je aktivně používáno [1] několik desítek programovacích jazyků, ať již jazyků interpretovaných či překládaných do nativního kódu nebo bajtkódu. Až na několik výjimek se však jedná o jazyky, které nejsou příliš vhodné pro první seznámení dětí s návrhem algoritmů a jednoduchých aplikací. Z tohoto důvodu vzniklo a stále ještě vzniká poměrně velké množství projektů, jejichž cílem je seznámit děti předškolního věku či děti na prvním stupni ZŠ se základem algoritmizace a mnohdy i s tvorbou počítačové grafiky (protože grafický výstup či dokonce animace jsou nepochybně atraktivní). Jmenujme například projekty Logo, Scratch, BYOB, Snap!, Alice, Android App Inventor, Starlogo, Etoys, DesignBlocks, Pocket Code, Hopscotch, Blockly, Greenfoot, Processing, GameMaker nebo poněkud kontroverzní Microsoft Small Basic.
Obrázek 1: Moderní integrovaná vývojová prostředí jsou sice pro amatérské i profesionální programátory velmi užitečná, ovšem při výuce může jejich velká variabilita být v některých ohledech spíše kontraproduktivní.
Oblíbeným jazykem v této oblasti je Logo (a mnohé jeho dialekty), které jsem dříve taktéž prosazoval. Ovšem ukazuje se, že i na prvním stupni základní školy je dosti složité vysvětlit pojem úhlu, který je v Logu celkem zásadní (v programech se ovládá želvička pohybující se po ploše obrazovky). Naproti tomu nemají děti prakticky žádný problém s pochopením principu bitmapové grafiky a pixelů; možná se ani není čemu divit, neboť tato generace již vyrůstá na Minecraftu :-). I z tohoto důvodu budou v dnešním článku popsány dva dosti odlišné projekty: Scratch se zaměřením na vizuální tvorbu programů, který používá želví grafiku známou z Loga a projekt nazvaný Basic-256, v němž lze několika málo příkazy vykreslit i poměrně složité rastrové obrázky. Kromě Scratche se zmíníme i o příbuzném projektu Snap!.
Obrázek 2: Grafické uživatelské rozhraní aplikace Imagine Logo, což je jedna z moderních variant Loga.
2. Systém Scratch
Scratch uses hands-on, active learning; it is visually appealing; it allows users to express their own creativity and to build on their own experiences; it gives immediate, understandable feedback; and it allows users to avoid syntax errors without focusing on minutiae, freeing them to focus on processes and concepts.
NCWIT study
Některé v praxi používané programovací jazyky (například Python či spíše Lua) je sice možné použít pro výuku programování, ovšem pro děti předškolního věku nebo pro děti na prvním stupni základních škol se podle mého názoru příliš nehodí, a to hned z několika důvodů. Jedním z těchto důvodů je nutnost zápisu algoritmů pomocí více či méně strukturovaného textu, jehož syntaxe je hlídána buď interpretrem či překladačem. Jedná se o nejdéle používaný způsob programování, jehož počátky můžeme hledat v hluboké počítačové minulosti, protože první překladač pracující se strojovým textem byl vytvořen již v rozmezí let 1951 až 1952 Grace Hopperovou v rámci projektu A-0 (Arithmetic Language version 0), který byl později následován známým FORTRANem navrženým Johnem W. Backusem a jeho vývojovým týmem. Ovšem v průběhu oněch cca šedesáti let se znovu a znovu objevovaly více či méně úspěšné pokusy o vizuální návrh algoritmů, tj. o tvorbu programů nikoli zápisem strukturovaného zdrojového textu, ale návrhem algoritmů pomocí diagramů vytvářených například s využitím myši, gesty či v minulosti pomocí světelného pera.
Obrázek 3: Bloky, z nichž se programy tvořené ve Scratchi skládají, jsou na základě své funkce rozděleny do osmi kategorií. Povšimněte si, že prostředí Scratche bylo téměř kompletně počeštěno; jedna z mála částí ponechaná v angličtině je nápověda k jednotlivým příkazům (i když i tato část se pravděpodobně brzy přeloží).
Poměrně dobře známé jsou například pokusy o přímý „překlad“ klasických vývojových diagramů, využití takzvaných kopenogramů atd. V současnosti někteří analytici a vývojáři využívají vizuální/grafický jazyk UML (což je ovšem jen pomůcka) či BPM (návrh business procesů, ovšem s vhodně zvolenými bloky se vlastně jedná o plnohodnotný jazyk). V oblasti software určeného pro výuku programování se využívá podobný princip, jako v případě vývojových diagramů – možnost zápisu (či možná lépe řečeno deklarace) algoritmů s využitím bloků představujících jednotlivé příkazy či volané funkce, které jsou doplněny o základní strukturované příkazy určené pro tvorbu rozhodovacích podmínek a programových smyček. Na tomto principu, tj. na vylepšených a vizuálně přitažlivějších vývojových diagramech, je postaven i projekt Scratch, v němž jsou uživatelům nabídnuty základní stavební bloky, z nichž se program skládá, přičemž je ponecháno pouze na uživateli, jakým způsobem tyto bloky využije ve svých programech.
Obrázek 4: Programy se ve Scratchi tvoří přetahováním příkazových bloků z oblasti umístěné v levé části okna do střední oblasti, zde nadepsané „Skripty“ (nová verze Scratche používá nepatrně odlišný design grafického uživatelského rozhraní).
Díky způsobu implementace skládání bloků pod sebe, popř. do sebe (s využitím „zámků“, podobně jako u puzzle) je zajištěno, že program bude po syntaktické stránce vždy v pořádku, což je důležité, protože odpadá pro děti nudná oprava překlepů, hledání chybějících středníků, hlídání párovosti závorek i další činnosti spojené s prací s běžnými programovacími jazyky. Uživatel se tedy musí starat o to podstatné – o sémantiku navrhované aplikace.
Obrázek 5: Editor bitmapových spritů zabudovaný přímo ve Scratchi.
3. Skládání složitějších programů s využitím jednotlivých bloků
Tvorba programů ve Scratchi je jednoduchá a po krátkém zaučení i intuitivní – v levé části okna (Scratch verze 1) se postupně vybírají příkazové bloky, které se přetahují do prostřední části okna, kde se z těchto bloků může skládáním tvořit program či programy. Běžný příkazový blok je vizuálně představován obdélníkem s několika výčnělky připomínajícími puzzle. Programové smyčky a podmínky jsou vyobrazeny jako složitější tvary umožňující vkládání dalších bloků dovnitř svého těla. Pomocí těchto výčnělků se bloky spojují dohromady tak, aby tvořily sekvenci či dokonce strukturovaný program. V případě, že je zapotřebí sekvenci příkazů změnit, je možné bloky od sebe rozdělit, popř. vybraný blok smazat (přes menu zobrazené po stisku pravého tlačítka myši), zkopírovat (opět přes pravé tlačítko myši) či přesunout. Společně spojené bloky tvoří program, který je možné spustit doubleclickem. Na ploše Skripty je možné vytvořit i více programů, každý je tvořený množinou spojených bloků. Činnost každého bloku lze nezávisle na vlastním programu taktéž jednoduše ověřit – opět doubleclickem.
Obrázek 6: Velmi jednoduchá simulace Brownova pohybu naprogramovaná ve Scratchi.
Vizuální tvorba programů s využitím skládání příkazových bloků tvoří pouze jednu část snadnosti použití Scratche při výuce programování. Druhou částí je takzvaná pracovní (kreslicí) plocha s volitelným pozadím, po níž se mohou v závislosti na volaných příkazech pohybovat takzvané sprity, které navíc mohou při svém pohybu za sebou kreslit křivku (tj. stopu pohybu). Pod pojmem sprite je ve Scratchi myšlen rastrový obrázek, který může představovat například postavu či jiný pohyblivý nebo i statický předmět ve hře, zatímco pozadí umístěné na pracovní plochu (taktéž se jedná o rastrový obrázek) je většinou neměnné a může představovat pozadí hry, místnost, ve které se odehrává nějaký dialog atd. Scratch díky možnosti prakticky neomezeného pohybu spritů po pracovní ploše s volitelným kreslením cesty (stopy pohybu), kterou sprity vykonaly, umně integruje jak možnosti programovacích jazyků typu Karel či Baltazar (sprity umístěné a pohybující se po pomyslné šachovnici) a taktéž výše zmíněného programovacího jazyka Logo s neodmyslitelnou želvou, která se může pohybovat libovolným směrem po ploše.
Obrázek 7: Program pro vykreslení spirály, v němž se používá proměnná i programová smyčka.
Obrázek 8: Spirála vykreslená předchozím programem.
4. Přednosti, zápory a omezení Scratche
Projekt Scratch se po relativně krátké době po svém představení veřejnosti stal velmi populární a to nejenom mezi učiteli základních škol (v USA a dalších zemích), ale i na středních školách a na školách vysokých (především na fakultách netechnického zaměření, to je ovšem již téma přesahující zaměření tohoto článku). Důvodů, které vedly k této popularitě bylo a je několik, největším však zůstává možnost vytvoření i poměrně složitého programu bez toho, aby byl uživatel nucen zdlouhavě studovat syntaxi a sémantiku jazyka, učit se ovládat vývojové prostředí nebo prostředí interpretru a navíc ještě reagovat na různá mnohdy kryptická chybová hlášení (ze syntaxe většiny běžných programovacích jazyků vyplývá, že například chybějící uzavírací závorka nebo klíčové slovo ukončující nějaký blok, vede ke vzniku chybového hlášení na jiném místě v programu, než kde se skutečně chyba nachází, což může být zejména pro začátečníky velmi frustrující).
Obrázek 9: Program sloužící pro vykreslení květu složeného z kružnic.
Další předností Scratche je jeho orientace na tvorbu multimediálních programů a taktéž možnost snadno prezentovat výsledný projekt na Internetu, což děti může motivovat k tvorbě i poměrně komplikovaných aplikací (prozatím je tato možnost vykoupena nutností používat Flash, což může v některých případech sdílení projektů komplikovat, nicméně elegantní řešení tohoto problému nabízí dále zmiňovaný projekt Snap!). Nesmíme zapomenout ani na to, že další přednosti Scratche by se mohly objevit při jeho použití v učebnách vybavených interaktivními tabulemi – jedná se vlastně o ideální aplikaci, která by mohla možnosti těchto tabulí plně využít.
Obrázek 10: Výsledek běhu programu z obrázku číslo 6.
Musíme se však zmínit i o některých problémech, kterými projekt Scratch trpí. Mnohé problémy či možná lépe řečeno omezení částečně vyplývají z toho, že jeho tvůrci nechtěli zbytečně komplikovat uživatelské rozhraní Scratche ani počet dostupných funkcí. Z těchto snah o minimalismus vyplývá mj. i například neexistence funkcí umožňujících práci se soubory, funkcí pro komunikaci přes počítačovou síť atd. Tento nedostatek je možné řešit nainstalováním různých modifikací (modů) Scratche, které však nejsou oficiálně podporovány. Ovšem mnohem závažnější je nemožnost tvorby vlastních stavebních bloků, které by nahrazovaly podprogramy/procedury/funkce. Právě z tohoto důvodu vzniklo několik rozšíření Scratche, především projekt BYOB – Build Your Own Block, který byl nahrazen novějším projektem nazvaným Snap! (http://snap.berkeley.edu/).
Obrázek 11: Výsledek běhu programu, v němž jsou použity proměnné a řídicí bloky.
5. Projekt Snap!
Jak již bylo naznačeno v předchozí kapitole, je Snap! dalším nástrojem, který je možné v případě potřeby využít pro výuku základních konceptů používaných při programování. Zjednodušeně řečeno je možné říci, že Snap! je obdobou Stratche a projektu BYOB (Build Your Own Block) přeneseného do prostředí Webu (HTML5+CSS+JavaScript), čímž odpadá nutnost instalace celého relativně velkého běhového prostředí Scratche a navíc se díky tomu, že Snap! běží přímo ve webovém prohlížeči, může tento projekt používat na širokém spektru různých zařízení, včetně tabletů a smartphonů (zde bude limitujícím faktorem velikost displeje). Navíc díky této vlastnosti projektu Snap! odpadají problémy s jeho nasazením do výuky (administrátoři se nemusí starat o instalaci ani o udržování projektu). Prakticky všechny důležité vlastnosti Scratche zůstaly zachovány a navíc mají uživatelé možnost tvorby vlastních bloků a tím pádem i jednoduchého rozšiřování možností programovacího „jazyka“ (viz též screenshot číslo 14).
Obrázek 12: Prostředí programu Snap!
Obrázek 13: Editor spritů (stále se jedná o webovou aplikaci).
Obrázek 14: Vytvoření nového bloku uživatelem.
6. Basic-256
Dostáváme se k poněkud kontroverznímu tématu – k použití programovacího jazyka BASIC pro výuku programování resp. pro tvorbu jednoduché počítačové grafiky. Pod pojmem „BASIC“ se může skrývat široké množství programovacích jazyků, které mnohdy nemají s původním prakticky nestrukturovaným BASICem známým z dob osmibitových mikropočítačů prakticky nic společného. Mnohdy právě naopak: některé moderní jazyky, v jejichž názvu se vyskytuje slovo „BASIC“ jsou plně strukturované, některé podporují objektově orientované programování (založené buď na třídách či na posílání zpráv objektům), mnohé BASICy nabízí uživatelům i pokročilé datové typy, jako jsou asociativní pole atd. A právě takovým poměrně moderním dialektem BASICu je Basic-256 zmíněný v tomto článku. Důvod, proč je zde tato aplikace zmíněna je jednoduchý – v Basic-256 se velmi snadno pracuje s grafikou, což je samozřejmě pro potřeby výuky ideální (je například velmi snadné vytvořit si programovou pomůcku pro výuku matematiky či geometrie).
Obrázek 15: Informace o projektu Basic-256.
Jak již bylo napsáno v předchozím odstavci, Basic-256 se od klasické školy BASICu v mnoha ohledech odklání, což je ostatně jen dobře. Jedná se o interpret doplněný o jednoduché vývojové prostředí s grafickým uživatelským rozhraním, který byl navržen s ohledem na to, aby se tento dialekt mohl použít při výuce programování, především na středních školách (podle mého názoru se však hodí spíše na základní školy). Tomu odpovídá jak jednoduchost a přehlednost vlastního vývojového prostředí, tak i sémantika jazyka, která samozřejmě podporuje strukturované programování. Na Internetu je dostupná cca 300stránková učebnice programování, v níž jsou použity příklady naprogramované právě v Basicu-256. Nejedná se však v žádném případě o učebnici, která by pouze popisovala syntaxi tohoto jazyka, právě naopak – ukázána je například práce se základními datovými strukturami (seznamy, zásobníkem, frontou) spolu s vysvětlením, jak jsou tyto datové struktury a operace nad nimi interně implementovány. Kromě toho lze v této učebnici najít i mnohé základní algoritmy, například řazení prvků v posloupnosti.
Obrázek 16: Uživatelské rozhraní je velmi jednoduše ovladatelné.
7. Instalace Basicu-256 na Fedoře
Podívejme se nyní na postup při instalaci balíčku Basic-256 do systému Fedora. Tento balíček sice není součástí standardních repositářů, ovšem i tak je jeho instalace velmi snadná.
Nejprve je nutné stáhnout RPM určený pro vaši verzi Fedory, což zajistí jeden z následujících příkazů (předpokládám, že dnes se již nové verze Fedory provozují výhradně na strojích s 64bitovou architekturou, v případě potřeby však balíček Basic-256 existuje i ve 32bitové variantě):
wget http://download.opensuse.org/repositories/home:/zhonghuaren/Fedora_21/x86_64/basic256-1.1.4.0-9.1.x86_64.rpm
či:
wget http://download.opensuse.org/repositories/home:/zhonghuaren/Fedora_22/x86_64/basic256-1.1.4.0-9.1.x86_64.rpm
Celý průběh stažení balíčku může vypadat takto:
wget http://download.opensuse.org/repositories/home:/zhonghuaren/Fedora_21/x86_64/basic256-1.1.4.0-9.1.x86_64.rpm --2015-07-16 12:24:38-- http://download.opensuse.org/repositories/home:/zhonghuaren/Fedora_21/x86_64/basic256-1.1.4.0-9.1.x86_64.rpm Resolving download.opensuse.org (download.opensuse.org)... 2001:67c:2178:8::13, 195.135.221.134 Connecting to download.opensuse.org (download.opensuse.org)|2001:67c:2178:8::13|:80... failed: Connection refused. Connecting to download.opensuse.org (download.opensuse.org)|195.135.221.134|:80... connected. HTTP request sent, awaiting response... 302 Found Location: http://ftp.linux.cz/pub/linux/opensuse/repositories/home:/zhonghuaren/Fedora_21/x86_64/basic256-1.1.4.0-9.1.x86_64.rpm [following] --2015-07-16 12:24:38-- http://ftp.linux.cz/pub/linux/opensuse/repositories/home:/zhonghuaren/Fedora_21/x86_64/basic256-1.1.4.0-9.1.x86_64.rpm Resolving ftp.linux.cz (ftp.linux.cz)... 2001:718:801:230::cd, 147.251.48.205 Connecting to ftp.linux.cz (ftp.linux.cz)|2001:718:801:230::cd|:80... failed: Connection refused. Connecting to ftp.linux.cz (ftp.linux.cz)|147.251.48.205|:80... connected. HTTP request sent, awaiting response... 200 OK Length: 520184 (508K) [application/x-rpm] Saving to: basic256-1.1.4.0-9.1.x86_64.rpmâ 100%[======================================] 520,184 3.04MB/s in 0.2s 2015-07-16 12:24:39 (3.04 MB/s) - basic256-1.1.4.0-9.1.x86_64.rpmâ saved [520184/520184]
Následně se provede instalace příkazem:
sudo yum localinstall --nogpgcheck basic256-1.1.4.0-9.1.x86_64.rpm
Opět se jen pro úplnost podívejme na průběh instalace:
sudo yum localinstall --nogpgcheck basic256-1.1.4.0-9.1.x86_64.rpm Loaded plugins: langpacks, refresh-packagekit Examining basic256-1.1.4.0-9.1.x86_64.rpm: basic256-1.1.4.0-9.1.x86_64 Marking basic256-1.1.4.0-9.1.x86_64.rpm to be installed Resolving Dependencies --> Running transaction check ---> Package basic256.x86_64 0:1.1.4.0-9.1 will be installed --> Processing Dependency: libQt5Core.so.5()(64bit) for package: basic256-1.1.4.0-9.1.x86_64 --> Processing Dependency: libQt5Gui.so.5()(64bit) for package: basic256-1.1.4.0-9.1.x86_64 --> Processing Dependency: libQt5Multimedia.so.5()(64bit) for package: basic256-1.1.4.0-9.1.x86_64 --> Processing Dependency: libQt5Network.so.5()(64bit) for package: basic256-1.1.4.0-9.1.x86_64 --> Processing Dependency: libQt5PrintSupport.so.5()(64bit) for package: basic256-1.1.4.0-9.1.x86_64 --> Processing Dependency: libQt5SerialPort.so.5()(64bit) for package: basic256-1.1.4.0-9.1.x86_64 --> Processing Dependency: libQt5Sql.so.5()(64bit) for package: basic256-1.1.4.0-9.1.x86_64 --> Processing Dependency: libQt5WebKit.so.5()(64bit) for package: basic256-1.1.4.0-9.1.x86_64 --> Processing Dependency: libQt5Widgets.so.5()(64bit) for package: basic256-1.1.4.0-9.1.x86_64 --> Running transaction check ---> Package qt5-qtbase.x86_64 0:5.3.2-4.fc21 will be installed ---> Package qt5-qtbase-gui.x86_64 0:5.3.2-4.fc21 will be installed --> Processing Dependency: libxcb-render-util.so.0()(64bit) for package: qt5-qtbase-gui-5.3.2-4.fc21.x86_64 --> Processing Dependency: libxcb-keysyms.so.1()(64bit) for package: qt5-qtbase-gui-5.3.2-4.fc21.x86_64 --> Processing Dependency: libxcb-image.so.0()(64bit) for package: qt5-qtbase-gui-5.3.2-4.fc21.x86_64 --> Processing Dependency: libxcb-icccm.so.4()(64bit) for package: qt5-qtbase-gui-5.3.2-4.fc21.x86_64 ---> Package qt5-qtmultimedia.x86_64 0:5.3.2-1.fc21 will be installed --> Processing Dependency: libopenal.so.1()(64bit) for package: qt5-qtmultimedia-5.3.2-1.fc21.x86_64 --> Processing Dependency: libQt5Quick.so.5()(64bit) for package: qt5-qtmultimedia-5.3.2-1.fc21.x86_64 --> Processing Dependency: libQt5Qml.so.5()(64bit) for package: qt5-qtmultimedia-5.3.2-1.fc21.x86_64 ---> Package qt5-qtserialport.x86_64 0:5.3.2-1.fc21 will be installed ---> Package qt5-qtwebkit.x86_64 0:5.3.2-1.fc21 will be installed --> Processing Dependency: libQt5Sensors.so.5()(64bit) for package: qt5-qtwebkit-5.3.2-1.fc21.x86_64 --> Processing Dependency: libQt5Positioning.so.5()(64bit) for package: qt5-qtwebkit-5.3.2-1.fc21.x86_64 --> Running transaction check ---> Package openal-soft.x86_64 0:1.15.1-2.fc21 will be installed ---> Package qt5-qtdeclarative.x86_64 0:5.3.2-1.fc21 will be installed --> Processing Dependency: libQt5XmlPatterns.so.5()(64bit) for package: qt5-qtdeclarative-5.3.2-1.fc21.x86_64 ---> Package qt5-qtlocation.x86_64 0:5.3.2-1.fc21 will be installed ---> Package qt5-qtsensors.x86_64 0:5.3.2-1.fc21 will be installed ---> Package xcb-util-image.x86_64 0:0.3.9-2.fc21 will be installed ---> Package xcb-util-keysyms.x86_64 0:0.3.9-2.fc21 will be installed ---> Package xcb-util-renderutil.x86_64 0:0.3.8-3.fc21 will be installed ---> Package xcb-util-wm.x86_64 0:0.4.1-2.fc21 will be installed --> Running transaction check ---> Package qt5-qtxmlpatterns.x86_64 0:5.3.2-1.fc21 will be installed --> Finished Dependency Resolution Dependencies Resolved ================================================================================ Package Arch Version Repository Size ================================================================================ Installing: basic256 x86_64 1.1.4.0-9.1 /basic256-1.1.4.0-9.1.x86_64 1.8 M Installing for dependencies: openal-soft x86_64 1.15.1-2.fc21 fedora 185 k qt5-qtbase x86_64 5.3.2-4.fc21 updates 2.9 M qt5-qtbase-gui x86_64 5.3.2-4.fc21 updates 4.8 M qt5-qtdeclarative x86_64 5.3.2-1.fc21 updates 2.8 M qt5-qtlocation x86_64 5.3.2-1.fc21 updates 166 k qt5-qtmultimedia x86_64 5.3.2-1.fc21 updates 685 k qt5-qtsensors x86_64 5.3.2-1.fc21 updates 194 k qt5-qtserialport x86_64 5.3.2-1.fc21 updates 60 k qt5-qtwebkit x86_64 5.3.2-1.fc21 updates 10 M qt5-qtxmlpatterns x86_64 5.3.2-1.fc21 updates 1.1 M xcb-util-image x86_64 0.3.9-2.fc21 fedora 13 k xcb-util-keysyms x86_64 0.3.9-2.fc21 fedora 9.5 k xcb-util-renderutil x86_64 0.3.8-3.fc21 fedora 11 k xcb-util-wm x86_64 0.4.1-2.fc21 updates 23 k Transaction Summary ================================================================================ Install 1 Package (+14 Dependent packages) Total size: 25 M Total download size: 23 M Installed size: 80 M Is this ok [y/d/N]: y Downloading packages: (1/14): openal-soft-1.15.1-2.fc21.x86_64.rpm | 185 kB 00:00 (2/14): qt5-qtbase-5.3.2-4.fc21.x86_64.rpm | 2.9 MB 00:00 (3/14): qt5-qtbase-gui-5.3.2-4.fc21.x86_64.rpm | 4.8 MB 00:00 (4/14): qt5-qtdeclarative-5.3.2-1.fc21.x86_64.rpm | 2.8 MB 00:00 (5/14): qt5-qtlocation-5.3.2-1.fc21.x86_64.rpm | 166 kB 00:00 (6/14): qt5-qtmultimedia-5.3.2-1.fc21.x86_64.rpm | 685 kB 00:00 (7/14): qt5-qtsensors-5.3.2-1.fc21.x86_64.rpm | 194 kB 00:00 (8/14): qt5-qtserialport-5.3.2-1.fc21.x86_64.rpm | 60 kB 00:00 (9/14): qt5-qtwebkit-5.3.2-1.fc21.x86_64.rpm | 10 MB 00:00 (10/14): qt5-qtxmlpatterns-5.3.2-1.fc21.x86_64.rpm | 1.1 MB 00:00 (11/14): xcb-util-image-0.3.9-2.fc21.x86_64.rpm | 13 kB 00:00 (12/14): xcb-util-keysyms-0.3.9-2.fc21.x86_64.rpm | 9.5 kB 00:00 (13/14): xcb-util-renderutil-0.3.8-3.fc21.x86_64.rpm | 11 kB 00:00 (14/14): xcb-util-wm-0.4.1-2.fc21.x86_64.rpm | 23 kB 00:00 --------------------------------------------------------------------------- Total 13 MB/s | 23 MB 00:01 Running transaction check Running transaction test Transaction test succeeded Running transaction Installing : qt5-qtbase-5.3.2-4.fc21.x86_64 1/15 Installing : qt5-qtxmlpatterns-5.3.2-1.fc21.x86_64 2/15 Installing : qt5-qtserialport-5.3.2-1.fc21.x86_64 3/15 Installing : xcb-util-wm-0.4.1-2.fc21.x86_64 4/15 Installing : openal-soft-1.15.1-2.fc21.x86_64 5/15 Installing : xcb-util-keysyms-0.3.9-2.fc21.x86_64 6/15 Installing : xcb-util-image-0.3.9-2.fc21.x86_64 7/15 Installing : xcb-util-renderutil-0.3.8-3.fc21.x86_64 8/15 Installing : qt5-qtbase-gui-5.3.2-4.fc21.x86_64 9/15 Installing : qt5-qtdeclarative-5.3.2-1.fc21.x86_64 10/15 Installing : qt5-qtlocation-5.3.2-1.fc21.x86_64 11/15 Installing : qt5-qtsensors-5.3.2-1.fc21.x86_64 12/15 Installing : qt5-qtwebkit-5.3.2-1.fc21.x86_64 13/15 Installing : qt5-qtmultimedia-5.3.2-1.fc21.x86_64 14/15 Installing : basic256-1.1.4.0-9.1.x86_64 15/15 Verifying : xcb-util-renderutil-0.3.8-3.fc21.x86_64 1/15 Verifying : qt5-qtlocation-5.3.2-1.fc21.x86_64 2/15 Verifying : basic256-1.1.4.0-9.1.x86_64 3/15 Verifying : qt5-qtxmlpatterns-5.3.2-1.fc21.x86_64 4/15 Verifying : qt5-qtsensors-5.3.2-1.fc21.x86_64 5/15 Verifying : qt5-qtdeclarative-5.3.2-1.fc21.x86_64 6/15 Verifying : qt5-qtbase-5.3.2-4.fc21.x86_64 7/15 Verifying : xcb-util-image-0.3.9-2.fc21.x86_64 8/15 Verifying : qt5-qtbase-gui-5.3.2-4.fc21.x86_64 9/15 Verifying : qt5-qtserialport-5.3.2-1.fc21.x86_64 10/15 Verifying : xcb-util-keysyms-0.3.9-2.fc21.x86_64 11/15 Verifying : qt5-qtmultimedia-5.3.2-1.fc21.x86_64 12/15 Verifying : qt5-qtwebkit-5.3.2-1.fc21.x86_64 13/15 Verifying : openal-soft-1.15.1-2.fc21.x86_64 14/15 Verifying : xcb-util-wm-0.4.1-2.fc21.x86_64 15/15 Installed: basic256-1.1.4.0-9.1.x86_64 Dependency Installed: openal-soft.x86_64 0:1.15.1-2.fc21 qt5-qtbase.x86_64 0:5.3.2-4.fc21 qt5-qtbase-gui.x86_64 0:5.3.2-4.fc21 qt5-qtdeclarative.x86_64 0:5.3.2-1.fc21 qt5-qtlocation.x86_64 0:5.3.2-1.fc21 qt5-qtmultimedia.x86_64 0:5.3.2-1.fc21 qt5-qtsensors.x86_64 0:5.3.2-1.fc21 qt5-qtserialport.x86_64 0:5.3.2-1.fc21 qt5-qtwebkit.x86_64 0:5.3.2-1.fc21 qt5-qtxmlpatterns.x86_64 0:5.3.2-1.fc21 xcb-util-image.x86_64 0:0.3.9-2.fc21 xcb-util-keysyms.x86_64 0:0.3.9-2.fc21 xcb-util-renderutil.x86_64 0:0.3.8-3.fc21 xcb-util-wm.x86_64 0:0.4.1-2.fc21 Complete!
Poznámka – stejný balíček určený původně pro Fedoru 21 mi ve skutečnosti bez jakýchkoli problémů pracoval i v poněkud obstarožní Fedoře 19, protože nedošlo k zásadním změnám v požadovaných knihovnách.
Obrázek 17: Do bitmapy je možné vykreslit mřížku, což je velmi užitečné, neboť se tak zvýrazní souřadnicový systém.
8. Základní strukturované příkazy z Basicu-256
V Basicu-256 jsou k dispozici prakticky všechny základní příkazy určené pro tvorbu strukturovaných programů složených z funkcí, subrutin (podprogramů), programových smyček a rozvětvení. Nalezneme zde i typicky BASICovou smyčku typu For-Next, která je podle mého názoru čitelnější, než podobně koncipovaná smyčka používaná v jazycích C, C++, Java či JavaScript. Podívejme se jen ve stručnosti na základní příklady:
i = 1 while i<1000 print i i=i*2 end while 1 2 4 8 16 32 64 128 256 512
for i=10 to 0 step -2 print i next i 10 8 6 4 2 0
x=10 do print x x=x/2 until x<0.1 10 5 2.5 1.25 0.625 0.3125 0.15625
for i=0 to 20 print i; if i % 2 =0 then print " sude" else print " liche" endif next i Zaciname 0 sude 1 liche 2 sude 3 liche 4 sude 5 liche 6 sude 7 liche 8 sude 9 liche 10 sude 11 liche 12 sude 13 liche 14 sude 15 liche 16 sude 17 liche 18 sude 19 liche 20 sude
Obrázek 18: Práce s rastrovou grafikou je v Basicu-256 skutečně snadná.
Kromě strukturovaných řídicích konstrukcí lze v Basicu-256 používat i (nechvalně) známé absolutní skoky, tj. příkazy typu GOTO a GOSUB), ovšem čísla řádků jsou nahrazena mnohem čitelnějšími textovými návěštími (label). Čísla řádků jsou považována za speciální typ návěští a jejich použití je doporučováno pouze při převodu starších programů do Basicu-256.
x: print "Old school style" goto x Old school style Old school style Old school style ... ... ...
Obrázek 19: Zobrazení průběhu funkce.
9. Grafický výstup v Basicu-256
Vývojové prostředí Basicu-256 obsahuje kromě velmi jednoduchého textového editoru i možnost zobrazení okna s hodnotami proměnných a taktéž grafickou oblast, do níž je možné provádět vykreslování. Ostatně právě možnost práce s grafikou, i když jsou k dispozici pouze základní vykreslovací příkazy, je pro jazyk určený pro výuku programování nedocenitelná. Zajímavé je, že grafickou plochu je možné zvětšit a dokonce lze vykreslit i mřížku a zvýraznit tak obrázek složený z (větších) pixelů. Taktéž je podporována práce se sprity, což relativně snadným a pochopitelným způsobem studentům přibližuje techniku používanou v 2D hrách. Ostatně podívejme se na trojici demonstračních příkladů, v nichž jsou použity základní grafické příkazy pro vymazání obrazovky, vykreslení bodu a taktéž pro vykreslení úsečky:
Obrázek 20: Lissajousovy obrazce.
Obrázek 21: Pokud je vykreslování pomalé, je možné zakázat automatické obnovování bitmapy po každém příkazu; o obnovení se postará explicitně zavolaný příkaz refresh.
10. Odkazy na Internetu
- Seriál Letní škola programovacího jazyka Logo
http://www.root.cz/serialy/letni-skola-programovaciho-jazyka-logo/ - Scratch: oficiální stránka projektu
http://scratch.mit.edu/ - Scratch: galerie projektů vytvořených ve Scratch
ihttp://scratch.mit.edu/galleries/browse/newest - Scratch: nápověda
file:///usr/share/scratch/Help/en/index.html - Scratch: obrazovky nápovědy
file:///usr/share/scratch/Help/en/allscreens.html - Scratch (Wikipedie CZ)
http://cs.wikipedia.org/wiki/Scratch - Scratch (programming language)
http://en.wikipedia.org/wiki/Scratch_(programming_language) - Scratch Modification
http://wiki.scratch.mit.edu/wiki/Scratch_Modification - Scratch Lowers Resistance to Programming
http://www.wired.com/gadgetlab/2009/03/scratch-lowers/ - Snap!
http://snap.berkeley.edu/ - Prostředí Snap!
http://snap.berkeley.edu/snapsource/snap.html - Alternatives to Scratch
http://wiki.scratch.mit.edu/wiki/Alternatives_to_Scratch - Basic-256 home page
http://www.basic256.org/index_en - Basic-256 Language Documentation
http://doc.basic256.org/doku.php - Basic-256 Art Gallery
http://www.basic256.org/artgallery - Basic-256 Tutorial
http://www.basic256.org/tutorials - Why BASIC?
http://www.basic256.org/whybasic - A book to teach ANYBODY how to program a computer (using BASIC)
http://www.basicbook.org/