Turbo Karel

V dětství jsem programoval jak blázen. Tehdy ještě neexistovala žádná Java, .NET ani Ruby, takže jsem psal v dřevních jazycích jako assembler, Basic, Pascal a dalších. Mým největším dílkem byl výukový jazyk Turbo Karel, který ode mě koupila pěkná řádka škol. Na benešovském gymnáziu to dlouho byla maturitní otázka, což mé popularitě mezi studentkami věru neprospělo.

Stáhnout funkční verzi Turbo Karla z roku 1993
Stáhnout emulátor DOSBox – nutný ke spouštění starých programů

Takhle vypadalo Karlovo město. Zadali jsme příkaz KROK.

Robot Karel Turbo Karel

Karel běhal v 80. letech na strojích jako IQ 151 či PMD 85, no a já jsem se ho rozhodl vylepšit a převést na PC. Základ Karla jsem napsal o prázdninách mezi druhým a třetím ročníkem gymnázia, tedy v roce 1993. A když říkám o prázdninách, myslím tím 60 x 10 hodin denně – během těch dvou měsíců jsem prakticky nevyšel na ulici a i oběd jsem jedl u počítače. V dalších dvou letech jsem pak Karla ladil a vydával další verze, až jsem se dostal k šestce. Celý program byl napsán v Turbo Pascalu a používal uživatelské rozhraní Turbo Vision od Borlandu. Hotový Turbo Karel také svým vzhledem Turbo Pascal připomínal – cílem bylo dosáhnout co nejsnazšího přechodu mladých programátorů z Karla na Pascal.

Když se lidi o Turbo Karlovi doslechli, byl jsem vyzván, abych jej představil na pedagogické konferenci v Českých Budějovicích – to byl myslím rok 1994. Pak se objednávky hodně rozjely a zakrátko už jsem zásoboval základní školy i gymnázia. Napsal jsem více než stostránkový manuál i učebnici jazyka, Karla jsem vybavil i obří nápovědou. Nikdy později už jsem tak velký projekt sám nedokončil. Později jsem za Karla dostal i Duhovou disketu – cenu ministerstva školství za nejlepší vzdělávací software. Diplom mi tehdy předával Ivan Pilip – kde jsou ty časy…

Zápis programů v Turbo Karlovi

Robot Karel - Turbo Karel - prostředí a la Turbo Pascal

Uvítací obrazovka. Jediná kopie, která mi zbyla, patřila ZŠ Sušice.

Robot Karel Turbo Karel ZŠ Sušice

Ukázka menu

Robot Karel Turbo Karel ukázka menu

O zdrojový kód Karla jsem přišel v srpnu 1997, kdy mi byl ukraden počítač i všechny záložní disky a diskety. Tuto krádež dodnes vnímám jako jednu z největších ztrát svého života – během jednoho dne jsem přišel o všechno, co jsem za cca 10 let do počítače nabušil. Kromě mých programů to byly především výpisky z mnoha set knih a spousta blbostí, které jsem sám napsal. Tyto věci už jsem nikdy nedokázal nahradit. Od té doby už neříkám záloha ničemu, co není rozmístěné alespoň ve 3 městech a 3 odlišných technologiích záznamu. A pámbu ví, že zálohuju jak blázen.

Hlavní zdrojový soubor Karla (má 3 794 řádek kódu) se mi podařilo získat zpět, chybí ale některé vlastní knihovny, takže už nemůžu znovu vytvořit spustitelnou verzi. Sehnal jsem ale spustitelnou verzi, která kdysi patřila ZŠ Sušice. K jejímu spuštění budete potřebovat emulátor starého operačního systému DOS, který se jmenuje DOSBox. Není to žádný problém.

1. Stáhněte si Karla a někam ho uložte – třeba do c:karel
2. Stáhněte si DOSBox z těchto stránek a nainstalujte ho.
3. Spusťte DOSBox. Objeví se vám černé okno – starý dobrý DOS. Zadejte

mount c c:karel
c:
cd karel
karel

Karel se spustí. A všechno funguje – můžete programovat, ukládat příkazy i editovat město.

Turbo Karel byl největší samostatný výkon, na jaký jsem se v životě vzmohl.

8 komentářů

  1. Nevím, jaká byla korelace úspěchu u studentek gymnázia s autorstvím Karla, ale pro větší část vyučujících IVT jsi se stal žijící legendou…

  2. Mám problém- potřeboval bych vyluštit co znamená toto:
    BEGINNING-OF-PROGRAM

    DEFINE Move3
    AS BEGIN Move Move Move END

    DEFINE Move4
    AS BEGIN Move3 Move END

    DEFINE TurnBack
    AS BEGIN TurnLeft TurnLeft END

    DEFINE TurnRight
    AS BEGIN TurnBack TurnLeft END

    DEFINE MoveBack
    AS BEGIN TurnBack Move TurnBack END

    DEFINE OnNorth
    AS BEGIN while not isNorth do turnleft END

    DEFINE OnSouth
    AS BEGIN OnNorth TurnBack END

    DEFINE INV1
    AS BEGIN if IsBrick then Take else Put END

    DEFINE INV2
    AS BEGIN INV1 Move INV1 END

    DEFINE INV3
    AS BEGIN INV1 Move INV1 Move INV1 END

    DEFINE Put_NE_INV1
    AS BEGIN
    if IsBrick then BEGIN END else Put
    OnNorth
    Move TurnRight Move
    INV1
    END

    DEFINE Put_SE_INV1
    AS BEGIN
    if IsBrick then BEGIN END else Put
    OnSouth
    Move TurnLeft Move
    INV1
    END

    DEFINE Put_SW_INV1
    AS BEGIN
    if IsBrick then BEGIN END else Put
    OnSouth
    Move TurnRight Move
    INV1
    END

    DEFINE Deg
    AS BEGIN
    TurnRight INV3
    TurnLeft Move INV2
    TurnLeft Move INV2
    TurnLeft Move INV1
    Move TurnBack
    END

    DEFINE Init
    AS BEGIN
    While Not IsNorth do TurnLeft
    While Not IsWall do Move
    TurnLeft
    While Not IsWall do Move
    TurnBack
    END

    BEGINNING-OF-EXECUTION
    Init

    TurnRight INV3
    TurnLeft Move Move
    TurnBack INV2
    TurnLeft Move
    INV2 Move3 Put
    Move TurnRight Move Put
    TurnLeft Move Move TurnLeft
    Move Move TurnLeft
    INV3 Move INV2
    Move Move TurnRight
    Move Move INV3
    TurnLeft Move Put
    Move TurnLeft Deg
    TurnBack Move
    Move TurnLeft
    Deg
    TurnBack Move4
    TurnLeft Deg
    TurnRight
    Move3 Move3
    Put_SW_INV1 Put_SW_INV1
    Put_SE_INV1 Put_SE_INV1
    TurnBack Move3 TurnRight
    INV3 Move INV2
    Move Move TurnLeft
    Move TurnBack
    INV3 TurnLeft Move
    INV2 TurnLeft Move
    INV2 TurnRight Move
    INV2 TurnRight Move INV2
    Move3 Move3 INV3
    TurnRight Move Move
    INV3 TurnRight Move
    INV2 TurnRight
    Move Move INV2
    Move4 Move Put_NE_INV1
    Put_NE_INV1 TurnRight Move
    INV2 Move INV2
    Move4 TurnRight
    Move INV1
    TurnLeft Move4 Move
    Put_SW_INV1 Move Put_SW_INV1
    TurnLeft Move INV1
    TurnLeft Move3 TurnLeft
    INV3 TurnLeft Move3
    TurnRight INV1 Move
    Put_NE_INV1 Move INV1
    Move3 INV3
    Put_SE_INV1 TurnRight
    Put_SW_INV1 Move
    INV1 Move
    Put_SE_INV1 Put_SE_INV1
    TurnBack Move Move
    TurnRight INV3 INV1
    Move INV1
    Move3 TurnRight
    Move INV3 Move
    Move INV1 TurnLEft
    Move TurnLeft Move4
    INV1 TurnRight Move
    TurnRight INV3
    TurnLeft Move INV2
    TurnLeft Move INV2
    TurnRight Move
    Move TurnRight
    INV3 Move
    Move INV1 TurnLeft
    Move TurnLeft Move4
    INV1 TurnRight Move
    TurnRight INV3
    TurnLeft Move INV2
    TurnLeft Move INV2
    TurnBack Move3 Move3
    INV3 TurnRight Move
    INV2 Put_SW_INV1
    TurnLeft Move INV1
    TurnLeft Move3
    TurnLeft Deg Move3
    Put_NE_INV1
    Move INV1
    Move3 INV2 TurnBack
    Move Move TurnLeft
    Move INV1 Move
    TurnLeft Deg TurnRight
    Move3 Move Move
    INV3 Move TurnLeft
    INV3
    TurnLeft Move INV2
    Move INV2 TurnLeft
    Move INV2
    Move Move TurnLeft
    INV3 Move INV2
    Move3 Move3
    TurnRight INV3
    Move TurnRight
    INV2 Move Inv3
    TurnLeft Move Move
    INV3 Move TurnLeft
    INV3 TurnLeft
    INV3 Move TurnRight
    Move Move TurnRight
    INV3 Move TurnRight
    INV3
    Move4 Move4 TurnRight
    Move Move TurnRight
    INV3 Put_SE_INV1
    TurnRight Move INV1
    TurnBack Move Move
    TurnRight INV2
    Move Move
    Put_NE_INV1
    Move4 Move3
    END-OF-EXECUTION

    END-OF-PROGRAM

  3. Jen pro po pořádek, pan Mareš napsal program, který si s Karlem umožňuje hrát, ale nevymyslel ho (ani to o sobě netvrdí). Vymyslel ho pan Pattis a do Československa se dostal nejpozději v 80letech, kdy ho zde šířil pan Pecinovský (a další, jejichž jména neznám).

  4. Nebudu to natahovat. Smekám Martine. Vůbec jsem netušil, že něco takového má pozadí, na kterém figuruje jméno Martin Jaroš……… uufffffffffff.. smekám!!!!!!!!

Přidat komentář

Váš komentář
Jméno