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.