Úvod O Karlovi Ovládání Příklady O aplikaci Blog
Programuj!

O Karlovi

drawing

Ahoj, vítá tě prostředí Karel. Pokud jsi tu poprvé a nevíš, kdo nebo co Karel je, nemusíš se bát. Karel jsem já, ten robot napravo. Ty jsi tu jistě proto, že se chceš naučit programovat, a přesně s tím já ti ze začátku pomohu. Budu po tobě chtít, abys pro mě programoval jednoduché příkazy, které mi umožní fungovat v mé místnosti.

Pokud tě zajímá více o mé historii, můžeš se kouknout na stránku na Wikipedii, kterou o mně lidé napsali.

Jsem robot, tedy počítač, který neumí fungovat bez programu, proto tě vyzývám, abys zavítal do sekce příkladů, kde mě můžeš naučit zadané věci. Já tě na oplátku naučím úplné základy programování. Zjistíš, že složité úkoly se řeší jejich rozdělením na jednodušší části. Ty jednodušší se popisují samostatně až po základní pokyny. Takové pokyny umím již "od narození", nebo lépe řečeno "z továrny". Umím udělat krok, otočit se doprava nebo doleva, položit cihlu, udělat značku. To ostatní mě musíš naučit.

Pokud bys byl snad úplně ztracený, jsou k příkladům přiložená i řešení, se kterými si můžeš svůj postup zkontrolovat.

Chápu, že je toho takhle na začátek docela hodně. Nejprve bychom se měli naučit ovládat prostředí, ve kterém se budeme společně učit. V následující kapitole ti popíšu ovládání aplikace, ve které jsem doma.

Ovládání

drawing

Jistě se ti teď honí hlavou: "Jak mám ale Karla ovládat, jak ho mám učit, co mám vůbec dělat". Ty i Karel jste z toho asi trochu zmatení, a proto je tu připravený přehled ovládání. Pokud si něčím nebudeš jistý, jistě nalezneš odpovědi na své otázky zde.

Na stránce s aplikací Karla se nachází několik oblastí.

Horní panel tvoří tmavá lišta stejná jako na této stránce. Z leva obsahuje Menu , přepínač volby jazyka, uprostřed je ikona aplikace a nápis Karel, který odkazuje zpět na tuto stránku. Vlevo je pak nástroj s trojicí ovládacích prvků pro běh programu. Krajní prvky provádí spuštění a zastavování běhu Karla, symbol brouka uprostřed slouží pro krokování programu.

Hlavní část je rozdělena do tří oddílů:

  • Místnost s robotem - v levém oddílu je nahoře prostorový (3D) náhled na našeho hrdinu a jeho pole, po kterém se pohybuje. Pod tímto náhledem je prostor s ovládacími a zobrazovacími prvky - této části aplikace se říká Rychlý přístup.
  • Blokový editor - prostor v prostřední části pro sestavování příkazů ovládajících robota pomocí vizuálních bloků.
  • Textový editor - prostor pro zápis a ladění programů v jazyce Karel.

Jednotlivá okna se aktivují kliknutím myši do prostoru daného okna. Rozměry oken lze měnit a přizpůsobit si tak vzhled podle potřeby, například některé ze tří oken zcela skrýt. Změny oken se provádí myší pomocí táhel mezi prvky. Lze nastavit výchozí pozici rozložení těchto oken přes hlavní menu a položku Nastav okna. Poté se vždy při restartu aplikace nastaví na tyto rozměry a tlačítko v rychlém přístupu bude okna resetovat právě do tohoto rozložení.

Místnost s robotem

Místnost zobrazuje prostorovou scénu s robotem. Po aktivaci oblasti (kliku myší) se v levém horním rohu objeví nápis v červeném poli "Ovládáš", který signalizuje, že nyní můžeme robotem přímo posunovat anebo měnit náhled.

V režimu "Ovládáš" je možná přímá interakce uživatele s robotem pomocí kláves:

  • W pro krok vpřed
  • A pro otočení vlevo
  • D pro otočení vpravo
  • O pro označení nebo odznačení aktuální Karlovy pozice
  • P pro položení cihly
  • Z pro zvednutí cihly
  • I pro odebrání nebo vrácení políčka před Karlem

Pro dotyková zařízení lze vyvolat ovládání pomocí tlačítka v Ovládání na panelu nástrojů Rychlý přístup.

Pohyb kamerou v místnosti se provádí s využitím myši. Otáčení a posunování se provádí pomocí myši technikou táhni a pusť - stiskneme-li levé tlačítko myši a budeme ho držet, pohybem myši měníme polohu, natočení a pozici, ze které pozorujeme tuto prostorovou scénu. Budeme-li držet současně klávesu Shift, dochází k posunutí scény. Klávesa Ctrl scénou otáčí se středovým bodem v pozici kurzoru myši. Kolečkem na myši dosáhneme zvětšení, resp. zmenšení zobrazení. V panelu pod scénou je tlačítko umožňující návrat do výchozí polohy scény.

V levém horním rohu místnosti se mohou objevovat kontextové bubliny upozorňující na konkrétní stav aplikace. Mohou to být tyto:

  • Počítadlo - Pokud je spuštěn program, zobrazuje, kolik iterací interpretu bylo třeba pro vykonání programu udělat. Kliknutím se vymaže.
  • Ovládáš - Pokud je místnost aktivována a je možné robota přímo ovládat, zobrazí se toto upozornění. Po kliknutí na něj se přímý režim vypne.
  • Běží - Pokud je prováděn program, zobrazí se toto upozornění. Po kliknutí na něj se provádění příkazu zastaví (podobně jako kliknutím na tlačítko Stop).

Rychlý přístup

Pod scénou s robotem je sada ovládacích prvků Rychlý přístup. Jedná se o jednoduchou sadu nástrojů, které usnadňují práci s aplikací a informují o aktuálním stavu aplikace. Mezi tyto prvky patří:

  • Reset kamery - Vrátí kameru místnosti na základní pozici.
  • Reset oken - Vrátí velikosti oken aplikace do výchozího nastavení.
  • Smaž konzolu - Vymaže obsah konzole.
  • Ovládání - Zobrazí tlačítka pro přímé ovládání robota.
  • Posuvník rychlosti - Nastavuje rychlost interpretu jazyka, na pravé straně lze nastavit i přímo číselně. Číslo reprezentuje procento maximální rychlosti robota. Lze nastavit i v programu pomocí příkazů rychle a pomalu.
  • Konzole - Zde robot vypisuje hlášení o svém aktuálním stavu, nejčastěji chybová hlášení.
  • Proměnné - Zde robot vypisuje všechny definované proměnné a jejich hodnoty.

Blokový editor

Pomocí vizuálních bloků se sestavují příkazy robota Karla. Základem je definování příkazů a podmínek. Nový příkaz je hnědý blok, který vytáhneme ze sekce Základ do volné plochy - to se provádí pomocí myši metodou táhni a pusť. Příkaz musíme pojmenovat a do jeho těla můžeme umístit konstrukce složené z elementárních příkazů, bloků řízení toku, podmínek a matematických operací s proměnnými. Bloky se umísťují do sebe. Přesný popis práce s bloky je patrný z příkladů. Volnou plochu s bloky lze zvětšovat a zmenšovat pomocí kolečka myši. Bloky mají své kontextové menu, které se vyvolá pravým tlačítkem myši. Je možné k bloku přidat textový komentář, blok lze sbalit, takže je viditelný jen jeho název, lze ho duplikovat, deaktivovat nebo smazat. Smazání bloku lze též provést jeho předtažením do koše.

Pokud vytvoříme v prostoru s bloky hotové příkazy, ty jsou automaticky transformovány do programového kódu. Tento kód je přítomen v pravé části s textovým editorem, po kliknutí na prvek v listě popsaný jako "Bloky".

Tlačítko terče slouží k vystředění blokové pracovní plochy. Pod těmito tlačítky se nachází ikona koše, která zpřístupňuje smazané struktury. Struktury se mažou uchopením a přetažením do toolboxu anebo právě na tuto ikonu koše.

Při načtení hotového příkladu je blok sbalený. Abychom si ho prohlédli, je třeba levým tlačítkem myši vyvolat kontextové menu a blok rozbalit.

Textový editor

Prostor umožňuje vytvářet, editovat a ladit textové programy v jazyku Karel. Záložka Kód slouží k přímému zápisu a editaci programů, záložka Bloky je textová reprezentace blokového editoru, kterou není možné editovat. Editor ukazuje číslování řádků, má barevně zvýrazněnou syntaxi příkazů jazyka Karel a při psaní napovídá možné varianty (možnost tzv. autokompletace). Jednotlivé příkazy lze sbalit a rozbalit, podobně jako v prostoru s vizuálními bloky.

Detekce syntaktických chyb

V editoru je integrována i schopnost syntaktické analýzy psaného textu a zobrazení syntaktických chyb. Při pokusu o spuštění syntakticky nesprávného kódu zobrazuje místa nalezených chyb na řádcích červeným křížkem a po najetí myši zobrazuje podrobnější důvod chybné situace.

Textový editor je propojen s ovládacími prvky na horní liště nad ním. Po kliknutím na tlačítko Spusť se začne vykonávat příkaz, na kterém je umístěn kurzor.

Krokování programu a body zastavení (breakpointy)

Režim krokování se spouští pomocí tlačítka Krokuj, na které je nakreslen brouk. V režimu krokování se vykoná pouze jeden krok programu při každém stisknutí tlačítka krokuj. Zastavený program pokračuje stiskem tlačítka Krokuj. Pokud je program krokován, v místnosti s robotem je zobrazeno označení Běží. Při tomto stavu nelze provádět úpravy kódu v editoru, a také nelze aktivovat spuštění dalšího příkazu.

Pokud jsou v editoru nastaveny breakpointy, vykonávání je zastaveno po stisku tlačítka Krokuj pouze na nich. Body zastavení (breakpointy) se vytvářejí kliknutím na číslo příslušného řádku mimo číslo řádku. Jsou označeny oranžovým rámečkem.

Záložky editoru a menu editoru

Textový editor má na své horní hraně dvě záložky:

  • Kód - textový editor aplikace, kde lze Karlovi psát vlastní kód.
  • Bloky - textová reprezentace blokového editoru, nelze do ní psát, ale disponuje všemi ostatními funkcemi regulérního editoru.
  • Další možnosti - Na konci seznamu jsou tři tečky nad sebou, když na ně uživatel najede, zpřístupní se následující možnosti:
    • Vytvoř bloky - Z označeného kódu v textovém editoru vytvoří blokové schéma v blokovém editoru.
    • Vymaž Breakpointy - Vymaže všechny breakpointy v aktuálně zobrazeném editoru.
    • Napovídání slov - Lze vypnout nebo zapnout živé napovídání slov.
    • Automatické odsazování - Lze vypnout nebo zapnout automatické odsazování kódu.
    • Ukazuj pozici - Lze vypnout nebo zapnout pohyb kurzoru při interpretaci.

Popis textového programování

Kód pište do pravého ze tří zobrazených oken - Editor kódu. Dostupné kódové programování obsahuje všechny originální příkazy z aplikace Robot Karel 3D, jmenovitě to jsou příkazy:

  • krok - robot udělá krok vpřed
  • vpravo - robot se otočí doprava
  • vlevo - robot se otočí doleva
  • poloz - robot položí cihlu
  • zvedni - robot zvedne cihlu
  • oznac - robot označí pole
  • odznac - robot odznačí pole
  • rychle - Zvýší rychlost robota o 10 ms - posune s posuvníkem rychlosti
  • pomalu - Sníží rychlost robota o 10 ms - posune s posuvníkem rychlosti
  • pip - robot přehraje upozornění

Karel může vylézt pouze na políčko s maximálním převýšením jedné cihly.Tyto příkazy lze různě podle potřeby skládat za sebe jako v každém jiném programovacím jazyku, je ale potřeba, aby na každém řádku byl pouze jeden příkaz. Příkazy lze vkládat i do struktur jako jsou:

  • udelej - struktura, která vykoná daný kód N krát.
      udelej [N] krat
          [prikazy]
      *udelej
  • dokud - struktura, která vykonává kód, dokud platí podmínka.
      dokud [je/neni] [podminka]
          [prikazy]
      *dokud
  • kdyz - struktura, která vykoná část kódu, pokud podmínka platí, případně jinou část, pokud neplatí. Část je nepovinná.
      kdyz [je/neni] [podminka]
      tak
          [prikazy]
      jinak
          [prikazy]
      *kdyz

    Dále je zapotřebí tvořit vlastní bloky kódu ohraničené těmito způsoby:

  • vytvoření příkazu - je možno vytvořit vlastní příkaz, kterému je nutno přidělit vlastní název nekolidující s jinými příkazy (jak vestavěnými, tak uživatelsky vytvořenými). Příkaz je pak možné volat v dalších příkazech.
      prikaz [nazev]
          [prikazy]
      konec  
  • vytvoření podmínky - je možnost vytvořit vlastní podmínku. Je opět nutno přidělit vlastní název, aby byla později volatelná. Očekává se, že bude obsahovat příkazy pravda nebo nepravda ve svém kódu.
      podminka [nazev]
          [prikazy]
          kdyz [je/neni] [podminka]
          tak
              pravda
          jinak
              nepravda
          *kdyz
      konec

    Pokud je při interpretaci jazyka nalezen nějaký problém, aplikace o tom informuje do konzole prohlížeče.

Popis blokového programování

Blokové programování je syntakticky velmi podobné (ne-li stejné) jako textové programování. Bloky jsou schovány pod svými kategoriemi a funkčností přímo korespondují s textovou reprezentací. Pro spuštění bloku klikněte na tlačítko u bloku uvozujícího příkaz (tlačítko run). Pokud by bylo zapotřebí spouštět blok v nějakém dalším bloku, využijte blok z nabídky Funkce, tedy ze zelené sekce, s popiskem Funkce, a do textového pole vložte název požadovaného bloku. Tím se ze jmenovaného bloku stane podprogram aktuálního bloku. Podobně funguje i volání uživatelských podmínek, ovšem vyberte podobný blok ze sekce Podmínky.

Proměnné

Tento projekt si dává za cíl originální jazyk rozšířit. Tohoto cíle je dosaženo pomocí obohacení jazyka o proměnné. Do proměnných lze ukládat celočíselné kladné i záporné hodnoty definované matematickými výrazy s použitím celočíselných kladných hodnot a hodnot z proměnných. V rovnicích lze využívat tyto operátory:

  • + - sčítání
  • - - odečítání
  • * - násobení
  • / - celočíselné dělení
  • % - zbytek po dělení
  • > - větší než
  • >= - větší než nebo rovno
  • < - menší než
  • <= - menší než nebo rovno
  • == - rovno
  • != - není rovno

Karel rozumí i uzávorkování výrazů pomocí jednoduchých závorek ( a ).

  • příklad validní konstrukce : 8 * (4 - promenna2)

Hodnoty těchto výrazů lze poté ukládat do definovaných proměnných. Karel nabízí proměnné dvojího typu - globální a lokální. Globální proměnné je třeba poprvé definovat na úrovni definice příkazů a podmínek následující syntaxí:

globalni promenna mojePromenna = 2

Poté je do ní možné stejnou syntaxí jakkoliv zapisovat. Druhé klíčové slovo promenna je zde nepovinné, avšak díky němu je zakázáno definovat proměnné s tímto názvem (názvy se nesmí shodovat s klíčovými slovy jazyka, ani s názvem jakéhokoliv příkazu či podmínky). Dále lze podobně v příkazech či podmínkách definovat lokální proměnné:

lokalni promena mojeLokProm = 4

Opět je klíčové slovo promenna nepovinné a název proměnné se nesmí shodovat s žádným názvem příkazu, podmínky nebo nyní i globální proměnné. Proměnné lze použít například při hledání středu místností v tomto příkladu

Příklady

Na začátku umí Karel jenom několik jednoduchých instrukcí. Chceme-li ho naučit něco nového, musíme ho naprogramovat. To znamená, že mu předložíme program, který udělá novou činnost na základě pokynů, kterým Karel již rozumí. V programu se každý nový příkaz musí vložit do bloku. Začneme pomocí hnědého bloku příkaz, který nalezneme v prostředním sloupci.

Nové příkazy píšeme pro přehlednost s počátečním velkým písmenem. Liší se tak od příkazů, které má Karel z výroby (krok, vlevo, vpravo).

Vytvoř program, díky kterému Karel udělá dva kroky vpřed. Použij, co již Karel umí, t.j. instrukci krok .

  • Vyřeš sám - Odkaz vede do aplikace, kde se můžeš pokusit příklad vyřešit.
  • Ukaž řešení v Karlovi - řešením je zavedení příkazu Dvojkrok. Na tomto odkazu je vzorové řešení.

Lze ho zavést buď jako hnědý blok a nebo zápisem kódu.

Vytvoř program, díky kterému Karel udělá tři kroky vpřed. Máš přitom dostupný příkaz Dvojkrok. Zkus vytvořit co nejvíce různých řešení tohoto úkolu.

Vytvoř program, který Karla otočí čelem vzad.

  • Vyřeš sám - Opět to půjde s využitím příkazu, který již Karel umí.
  • Ukaž řešení - Toto je jedno z možných řešení. Šlo by to i jinak?

Vytvoř příkaz, díky kterému provede Karel krok zpět. Po provedení příkazu se Karel dívá stejným směrem. Dostupný je příkaz Celem-vzad.

Vytvoř program, díky kterému se Karel bude moci pohybovat jako kůň v šachu. Kůň v šachu se pohybuje o dvě políčka dopředu a poté buď o jedno doprava nebo o jedno vlevo. Zkus obě tyto varianty. Varianty pojmenuj Kun_nalevo a Kun_napravo.

Vytvoř program, díky kterému Karel udělá úkrok do strany. Vytvoř úkrok na obě strany. Varianty pojmenuj Ukrok_nalevo a Ukrok_napravo.

Vytvoř program, díky kterému se Karel posune šikmo v místnosti. Zkus posunutí šikmo na pravou i levou stranu. Varianty pojmenuj Sikmo_nalevo a Sikmo_napravo . Zkus také vymyslet co nejvíce způsobů. Můžeš použít i nějaký příkaz, který jsme Karla už naučili, třeba Ukrok_vlevo , Ukrok_vpravo.

Rekurze je cizí slovo, v češtině nemáme přesný pojem, který by ho zcela nahradil. Znamená opakování již řečeného. Při zadávání instrukcí Karlovi nám často zjednoduší život. Znamená zároveň opakované provádění příkazů. Zatím neumíme rekurzi zastavit, to se naučíme později. Následující příklady ukazují její použití. Netrapte se tím, že Karel dělá příkazy pořád dokola a musíme ho zastavit ručně.

Vytvoř program, díky kterému Karel poběží do nekonečna dopředu.

Vytvoř program, díky kterému se Karel bude točit donekonečna vpravo. Poté vytvoř i opačnou variantu, ať se rozmotá zpátky. Příkazy nazvi Pirueta_leva a Pirueta_prava.

Vytvoř program, díky kterému Karel půjde šikmo přes místnost a nezastaví se. Použij již vytvořený příkaz Sikmo.

Vytvoř program, díky kterému bude Karel strážit bránu. Brána se stráží tak, že před ní Karel bude donekonečna chodit tam a zpět. Využij příkazy Dvojkrok a Celem_vzad.

V předchozí kapitole o rekurzi jste zjistili, že musíme Karla sami zastavit. Jeho instrukce nikdy neskončí. Jak zastavit rekurzi se naučíme až v kapitole o podmínkách. Co když ale předem víme, kolikrát se má určitá věc udělat? Na to máme v jazyku Karel připravenou slovní konstrukci. Říká se jí řízení toku. V blokovém editoru je v modré kapitole. Zatím si vystačíme s větou udělej x-krát.

Vytvoř v jazyce Karel příkaz, kterým Karel obejde čtvercové území o hraně čtverce tři pole. Využij dvakrát řízení toku udělej.

Karel může před sebe pokládat cihly, slouží k tomu příkaz poloz . Když už umíme opakovat příkazy pomocí udělej , můžeme toho využít a naučit Karla stavět celé zdi. Napište příkaz, kdy Karel postaví před sebe zeď vysokou tři na sobě položené cihly a dlouhou čtyři pole. Využijte příkaz Zpátky.

Karel může cihly i sbírat, slouží k tomu příkaz zvedni . Když Karel postavil zeď, může ji po sobě i uklidit. Napište příkaz, který to pro naši dříve vytvořenou zeď udělá, pokud bude Karel stát přesně na jejím konci.

Pokud jste dokončili předchozí kapitolu a nařídili Karlovi zbourat zeď, jistě Vás při tom napadlo, že to funguje, jen pokud známe přesnou délku a výšku zdi. Co když to ale nebudeme dopředu vědět?

Tady se dostáváme k důležité záležitosti. Často jsme v situaci, že dopředu nevíme, co přesně nastane. I na to je náš robot připraven. Je tu totiž možnost ptát se na podmínky a větvit program podle výsledků dotazu. Zní to složitě? Vůbec ne. Je to z běžného života. Taky rozumíme pokynu, když venku prší, vezmi si deštník. Nebo když je červená, nepřecházej přes přechod. Podobně je na tom náš robot.

Napište příkaz, kterým Karel provede zbourání zdi, aniž byste mu museli říci, jaké má rozměry. Karel bude před provedením příkazu stát přesně na konci zdi.

Příkaz když .. tak může mít ještě větev pro případ, že podmínka neplatí. Představte si, jak vysvětlit Karlovi, aby obcházel místnost. Řekli bychom: pokud je před Tebou volno, udělej krok, jinak se otoč.

Napište příkaz, podle kterého bude Karel obcházet svou místnost stále kolem dokola. Vytvořte varianty obcházení vpravo i vlevo.

Karel stojí někde uprostřed místnosti. Napište příkaz, podle kterého Karel dojde k jejímu okraji a tam zastaví. Využijte podmínky dokud je volno.

V kapitole o rekurzi jsme zápasili s tím, že naše programy, které jsme vytvořili, běžely "věčně". Robota jsme tak museli zastavit sami dřív, než se mu vybijí baterie.

S podmínkami, které jsme se naučili nyní, budeme umět použít rekurzi lépe.

Karel stojí někde uprostřed místnosti. Napište příkaz, podle kterého Karel dojde k jejímu okraji a tam zastaví. Využijte rekurzi.

Napište příkaz, aby Karel uměl najít cestu ven z bludiště. Důležité je nepanikařit a mít systém. Pokud nemáme nataženou nit, kterou bychom mohli odvíjet zpátky, co třeba vyzkoušet všechny cesty tak, že půjdeme stále doprava? Jak to dopadne?

Napište příkaz, aby Karel uměl najít střed místnosti. Využij k tomu rekurzi !

Co by to bylo za robota, kdyby neuměl počítat. Bez toho se přece nikdo neobejde. K počítání je potřeba si také občas výsledek někde napsat. K tomu Karel používá proměnné.

První setkání s proměnnými. Jak je ale využít? Pomocí nich se dá jednoduše najít střed místnosti. Zkus přijít na to, jak.

Jistě znáte ze školy prvočísla. To jsou taková přirozená čísla, která nemají dělitele menšího než sebe sama. Jedničku vynechme. Jistě to znáte. Také se dá říci, že jsou to čísla, která nejsou v násobilce jako výsledek.

Napište takový program - pokud do něho Karlovi zadáte číslo, robot před sebe položí cihlu, když je zadané číslo prvočíslo.

  • Vyřeš sám -Nápověda: Karel počítá jen s celými čísly, takže výsledek dělení je zaokrouhlený dolů, pokud to není celé číslo. Při zpětném vynásobení je tedy výsledek operace menší než původní hodnota.
  • Ukaž řešení

O aplikaci

drawing

Téma projektu

Cílem projektu je implementovat pedagogický nástroj, který by hravým způsobem seznámil žáky druhých stupňů základních škol a nižších gymnázií s problematikou programování. Jako předloha je vybrán program Robot Karel 3D na systém DOS. Původní verze je velice pěkně popsána na této adrese, kde je dostupná i originální verze, spustitelná například pomocí emulátoru DOSBox. Aplikace Robot Karel 3D umožňuje převzít kontrolu nad robotem v místnosti a pomocí programů místnost měnit. Tento projekt se tedy soustřeďuje na přetvoření originálu do moderního prostředí a zapojení prvků, které jsou dnes již běžnou součástí při vyučování.

Použité zdroje:

ACE code editor Three.js Blockly
Split.js jQuery jQuery UI

Projekt vznikl jako bakalářská práce za podpory Vysokého učení technického v Brně, Fakulty informačních technologií, a Gymnázia Šlapanice. Odkaz na text bakalářské práce bude doplněn po zveřejnění.

Celý projekt je volně dostupný přes tento GitHub repositář.

V případě nalezení chyby nebo nutnosti technické podpory kontaktujte autora.

Autor - Vojtěch Čoupek - coupek.v@gmail.com - 2021

Blog

Projekt Karel 3D

20.5.2024

Autor - Vojtěch Čoupek

Bakalářská práce za podpory VUT FIT Brno a Gymnasium Šlapanice

Foo celý text ...



Projekt Karel 3D

20.5.2024

Author - Vojtěch Čoupek

Bakalářská práce za podpory VUT FIT Brno a Gymnasium Šlapanice

Foo celý text ...