typedef struct {
char *bitmap;
char *background;
int x;
int y;
int xsize;
int ysize;
int xspeed;
int yspeed;
} BITMAP;
void bdraw(BITMAP *b) {
int y=b->y,
x=b->x,
yy, xx;
/* Eli loopataan koko suorakulman kokoinen alue. bitmap- ja
ja background -puskureissahan lasketaan sijainti seuraavasti:
y * b->xsize + x. */
for(yy=0; yy<b->ysize; yy++) {
for(xx=0; xx<b->xsize; xx++) {
/* eli värillä 0 tämä vertailu alla ei ole tosi, joten värillä
0 merkittyjä kohtia EI piirretä! */
if(b->bitmap[yy*b->xsize+xx]) {
/* doublebuffer muuttuja osoittaa kaksoispuskuriin. Huomaa, että
yläkulma on y*320+x, mutta koska haluamme vielä piirtää useita
rivejä, lisäämme yy-looppimme y-arvoon, kutenn myös xx-looppi
x-arvoon. Jos et ymmärtänyt niin poista väliaikaisesti kohdat
ja näet mitä tapahtuu */
b->background[yy*b->xsize+xx]=
doublebuffer[ (y+yy) * 320 + (x+xx) ];
/* sitten vain asetetaan bittikartasta oikea kohta ruudulle,
alle peittyvä osa on jo tallessa puskurin background vastaa-
valla kohdalla. */
doublebuffer[ (y+yy) * 320 + (x+xx) ]=
b->bitmap[yy*b->xsize+xx];
}
}
}
}
void bm>round v=n vain asetetaan bittikart2P*b->xsähdalla. */
aanorta )m a ) ine; )m a )orpi:n var brvrEomA tyryy ine; )m a )n u ruapsea );r=n vara )n u rä tdaipaar yuk /r<grin muuttuja osoittaa kaksoisbittikart2P*b->xsähdalla sl,a(b->lnix) ]tf
aa,sl-o(lebuffer muuttuja osoittaa kaksoispuskuriin. Huomaa, että
yläkulma rlain. Hs pbrEomA tyryyt0]ähateelxe int xsiHly*b = aklmrcrxxxähatäx intmu, että
apsrtf