ASCII Art
Téma: Celková koncepce programu
Procvičované učivo: celková koncepce programu, dynamická práce s pamětí, funkce
Napište v jazyku C jednoduchou knihovnu funkcí pro vykreslování obrázků pomocí znaků (tzv. ASCII art).
Knihovna by měla mít tyto vlastnosti:
- Obrázky se budou vykreslovat pomocí plátna - dvojrozměrné matice, která bude obsahovat jednotlivé znaky.
- Vykreslování se tedy neprovádí přímo na výstupu, ale pouze dochází ke změně daného plátna (struktura
canvas
). - Je možné pracovat současně s několika plátny.
- Je možné "vykreslovat" i za hranicí kreslící plochy, tyto body se ale nebudou při zobrazení plátna vykreslovat. Jinými slovy, při pokusu o kreslení mimo plátno nedojde k vyjímce při běhu programu.
- Knihovna by měla být samostatným modulem, bude tedy tvořena jedním zdrojovým a jedním hlavičkovým souborem.
V knihovně vytvořte strukturovaný datový typ canvas
a dále definujte tyto funkce:
/* vytvori platno */ canvas *canvas_create(int x, int y); /* nastavi dany bod na zadanou hodnotu */ void canvas_set_point(canvas *c, int x, int y, char character); /* vrati znak daneho bodu */ int canvas_get_point(canvas *c, int x, int y); /* nakresli obdelnik */ void canvas_draw_rect(canvas *c, int x, int y, int width, int height, char ch); /* vycisti platno */ void canvas_clear(canvas *c); /* vykresli obsah platna na standardni vystup */ void canvas_print(canvas *c); /* vykresli obsah platna do souboru */ void canvas_output(canvas *c, FILE *f);
Jednotlivé funkce ve vytvořené knihovně poté otestujte z modulu hlavní funkce.
Příklad výstupu:
xxxxxxx x x x *********** x * x * x * x * x * x * x *********** x x x x xxxxxxx
Příklad výstupu:
*********** * * * o o * * | * * * * \___/ * * * ***********
Povolené knihovny: stdio.h, stdlib.h