![]()
![]()
Seuraavassa animaatio-ohjelmassa piirretään ympyrä, tehdään siitä kopio ja annetaan kopion liikkua kuvaruudulla sattumanvaraisesti. Alkuperäinen ympyrä näkyy kokoajan samassa paikassa.
#include <stdio.h>
#include <graphics.h>
#include <conio.h>
#include <stdlib.h>
typedef struct ympyra{
int x;
int y;
int sade;
int vari;
}ympyra;
void alusta_grafiikka(void);
void aseta_ympyran_arvot( ympyra *y, int x_k, int y_k, int sade_par, int vari_par);
void nayta (ympyra y);
void siirra (ympyra *y, int delta_x, int delta_y);
void piilota (ympyra y);
void kopioi( ympyra *kohde, ympyra lahde, int delta_x, int delta_y);
void main(void)
{
ympyra y, uusi;
alusta_grafiikka();
aseta_ympyran_arvot ( &y, getmaxx()/2, getmaxy()/2, 20,YELLOW );
nayta (y);
kopioi(&uusi,y,0,0);
while(!kbhit())
{
siirra (&uusi,random(3)-1,random(3)-1);
nayta(y); /* näytetään alkuperäinen */
delay(40);
}
getch();
closegraph();
}
void aseta_ympyran_arvot( ympyra *ymp, int x, int y, int sade, int vari)
{
ymp->x=x;
ymp->y=y;
ymp->sade=sade;
ymp->vari=vari;
}
void nayta (ympyra y) /* ympyrä piirretään */
{ /* piirtovärillä */
int nyk_piirtovari=getcolor();
setcolor(y.vari);
circle(y.x, y.y, y.sade);
setcolor(nyk_piirtovari);
}
void piilota (ympyra y) /* ympyrä piirretään */
{ /* taustavärillä */
int nyk_piirtovari=getcolor();
setcolor(getbkcolor()) ;
circle(y.x, y.y, y.sade);
setcolor(nyk_piirtovari);
}
void siirra (ympyra *y, int delta_x, int delta_y)
{
piilota(*y); /* ympyrä piilotetaan, */
y->x+=delta_x; /* siirretään paikkaa*/
y->y+=delta_y;
nayta(*y); /* ...ja näytetään */
}
void kopioi( ympyra *kohde, ympyra y, int delta_x, int delta_y)
{
aseta_ympyran_arvot(kohde,y.x+delta_x, y.y+delta_y,y.sade,y.vari);
nayta(*kohde);
}
void alusta_grafiikka(void)
{
/* Graafisen laitteiston autom.. tunnistus */
int gdriver = DETECT, gmode, virhekoodi;
/* alustetaan grafiikkatila */
initgraph(&gdriver, &gmode, "c:\\tc\\bgi");
/* tutkitaan, alustuksen onnistuminen */
virhekoodi = graphresult();
if (virhekoodi != grOk) /* tapahtui virhe */
{
printf("Grafiikkavirhe: %s\n", grapherrormsg(virhekoodi));
printf("Paina näppäintä:");
getch();
exit(1); /* palautetaan virhekoodi */
}
}
Grafiikkatilan alustuksessa tyypillinen virhe on sellainen, missä grafiikka-ajurin sisältämä hakemisto on määritelty virheellisesti. Alustusfunktiossa on hakemistomääritys "c:\\tc\\bgi", joka on se hakemisto, missä EGAVGA.BGI (tai jokin muu ajuri) sijaitsee. Kirjoita tämä määritys vastaamaan omaa hakemistomääritystäsi.
![]()
![]()