The World of Karel the Robot Implementation
Ciele
- Osvojiť si prácu s jednorozmernými a dvojrozmernými poliami.
- Tvorba vlastných makier.
- Práca s príkazom switch.
Úvod
Na tomto cvičení začnete implementovať svoje vlastné zadanie. Cieľom tohto cvičenia je vytvoriť reprezentáciu sveta, v ktorom sa bude môcť robot Karel pohybovať. Hlavnou úlohou je teda vytvoriť funkciu draw(), pomocou ktorej vykreslíte karlov svet na obrazovku a primitívu robota Karla turnOn() na načítanie sveta robota Karla. Karlov svet bude vnútorne reprezentovaný dvojrozmerným poľom.
Postup
Krok č. 1
Úloha 1.1:
- súbor main.c, v ktorom sa aktuálne nachádza hlavná funkcia main(),
- priečinok lib, ktorý obsahuje knižnicu curses pre operačný systém Windows, a
- priečinok include, ktorý obsahuje hlavičkové súbory knižnice curses pre operačný systém Windows.

Úloha 1.2:
Úloha 1.3:
Úloha 1.4:
Úloha 1.5:
Krok č. 2
Úloha 2.1:
Úloha 2.2:
Reťazec map bude obsahovať údaje o svete, v ktorom sa robot Karel bude nachádzať. V budúcnosti bude nahradený načítaním aktuálneho sveta zo súboru, ktorý však bude uložený v rovnakom formáte, aký je použitý v tomto reťazci.
Obsah premennej map je teda nasledovný:
char* map = "#######|#-^-#-#|#**-*-#|#---*-#|#-----#|#--*--#|#######";pričom význam jednotlivých položiek mapy je nasledovný:
- znak '#' reprezentuje stenu,
- znak '-' reprezentuje prázdne miesto,
- znak '*' reprezentuje značku,
- znaky '>', '<', 'v' a '^' reprezentujú aktuálnu pozíciu a smer robota Karla na mape, a
- znak '|' reprezentuje koniec riadku.
Úloha 2.3:
- ak v poli načítate hodnotu EMPTY, vypíšte na obrazovku medzeru (znak ' ') alebo (pre lepšiu orientáciu v mape) bodku (znak '.'),
- ak v poli načítate hodnotu WALL, vypíšte na obrazovku mriežku (znak '#').
Úloha 2.4:
turnOn(); draw();V prípade úspechu sa na obrazovke vykreslí nasledujúci svet:
####### # # # # # # # # # # # #######
Doplňujúce úlohy
-
Implementujte podporu Run
length encoding pre načítavanie sveta z premennej
map vo funkcii turnOn().
Predpokladajte, že číslo udávajúce počet výskytov ďalšieho znaku je
jednomiestne.
Vašu implementáciu si môžete overiť na nasledujúcom upravenom svete:
char* map = "7#|#.^-#-#|#2*-*-#|#3-*-#|#5-#|#2-*2-#|7#";
Poznámka: Pre rozlíšenie znaku a určenie, či sa jedná o znak alebo číslicu, môžete použiť buď knižnicu ctype.h alebo vykonať jednoduchú konverziu na základe hodnoty znaku v ASCII tabuľke. - Upravte riešenie predchádzajúcej úlohy tak, aby bolo možné rozpoznať aj viacmiestne čísla reprezentujúce opakovanie nasledujúceho znaku.
-
Pridajte do Vášho riešenia komentáre a vygenerujte k nemu dokumentáciu
vo formáte html prostredníctvom nástroja Doxygen.
Poznámka: Základné informácie k nástroju Doxygen nájdete na jeho webovej stránke, v pokynoch k vypracovaniu zadania č. 1 a v referenčnej príručke na stránkach predmetu Programovanie.
Ďalšie zdroje
- Rudolf Pecinovský: Základy algoritmizace
- Pavel Herout: Učebnice jazyka C (1. díl) - 11.1, 12.1, 12.2.3, 12.2.4, 13.1
- Sokoban level formát
- Knižnica ctype.h - Wikipédia, Digital Mars (spolu s príkladmi)
- Funkcia strlen() - Calculate the length of a string.