Čauec, snažím se vyřešit jeden příklad v jazyce C, ale na něčem jsem se zasekl. nakopl by mě někdo?
Napište v jazyku C funkce pro vykreslování obrázků pomocí znaků (tzv. ASCII art).
-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 (strukturacanvas).
-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 výjimce při běhu programu.
Funkce:
canvas*canvas_create(intx, inty);
-funkce vytvoří plátno
void canvas_draw_rect(canvas *c, intx, inty, intwidth, intheight, char ch);
-funkce nakreslí na plátno na souřadnice (x,y) obdélník o velikosti widthx heightznakem ch
voidcanvas_clear(canvas*c);
-funkce vyčistí plátno
voidcanvas_print(canvas*c);
-funkce vytiskne plátno na obrazovku
Můj zdrojový kod:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct{ char **c; int x, y;
} canvas;
canvas *canvas_creare(int x, int y);
void canvas_draw_rect (canvas *c, int x, int y, int width, int height, char ch);
void canvas_clear (canvas *c);
void canvas_printf (canvas *c);
canvas *canvas_creare(int x, int y)
{
int i;
canvas *temp = (canvas *) malloc (sizeof(canvas));
temp->x = x;
temp->y = y;
temp->c = (char**) malloc(x);
for (i = 0; i < x; i++)
temp->c[i] =(char*) malloc(y);
return temp;
}
void canvas_draw_rect (canvas *c, int x, int y, int width, int height, char ch)
{
int i,j;
for (i =x; i<= height;i++)
{
for(j=y; j< width;j++)
c->c[i][j] = ch;
}
}
void canvas_printf (canvas *c)
{
int i,j;
for (i = 0; i < c->x; i++)
{
{
for (j =0; j< c->y; j++)
{
if (c->c[i][j] != ' ')
printf ("%c", c->c[i][j]);
else
printf(" ");
}
}
printf ("\n");
}
}
void canvas_clear (canvas *c)
{
int i,j;
for(i=0;i<c->x;i++)
for(j=0;j<c->y;j++)
c->c[i][j]=' ';
}
int main(int argc, char* argv[])
{
canvas *c = canvas_creare(20,20);
canvas_clear (c);
canvas_draw_rect (c,5, 5, 10, 10, '*');
canvas_printf (c);
}
Kdyby Vás něco napadlo, dejte radu.
Mazy