previous next Up Title Contents Index

Esimerkki

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.

previous next Up Title Contents Index