///////////////////////////////////////////////////////////////////////// // Game Programming All In One, Second Edition // Source Code Copyright (C)2004 by Jonathan S. Harbour // Tank War Enhancement 5 - tank.c ///////////////////////////////////////////////////////////////////////// #include "tankwar.h" //new function added in chapter 11 void animatetank(int num) { if (++tanks[num]->framecount > tanks[num]->framedelay) { tanks[num]->framecount = 0; tanks[num]->curframe += tanks[num]->animdir; if (tanks[num]->curframe > tanks[num]->maxframe) tanks[num]->curframe = 0; else if (tanks[num]->curframe < 0) tanks[num]->curframe = tanks[num]->maxframe; } } void drawtank(int num) { int dir = tanks[num]->dir; int x = tanks[num]->x-15; int y = tanks[num]->y-15; draw_sprite(buffer, tank_bmp[num][tanks[num]->curframe][dir], x, y); //what about the enemy tank? x = scrollx[!num] + SCROLLW/2; y = scrolly[!num] + SCROLLH/2; if (inside(x, y, scrollx[num], scrolly[num], scrollx[num] + SCROLLW, scrolly[num] + SCROLLH)) { //draw enemy tank, adjust for scroll draw_sprite(buffer, tank_bmp[!num][tanks[!num]->curframe][tanks[!num]->dir], startx[num]+x-scrollx[num]-15, starty[num]+y-scrolly[num]-15); } } void movetank(int num) { int dir = tanks[num]->dir; int speed = tanks[num]->xspeed; //***** //animate tank when moving if (speed > 0) { tanks[num]->animdir = 1; tanks[num]->framedelay = MAXSPEED - speed; } else if (speed < 0) { tanks[num]->animdir = -1; tanks[num]->framedelay = MAXSPEED - abs(speed); } else tanks[num]->animdir = 0; //update tank position switch(dir) { case 0: scrolly[num] -= speed; break; case 1: scrolly[num] -= speed; scrollx[num] += speed; break; case 2: scrollx[num] += speed; break; case 3: scrollx[num] += speed; scrolly[num] += speed; break; case 4: scrolly[num] += speed; break; case 5: scrolly[num] += speed; scrollx[num] -= speed; break; case 6: scrollx[num] -= speed; break; case 7: scrollx[num] -= speed; scrolly[num] -= speed; break; } //keep tank inside bounds //***** if (scrollx[num] < 0) { scrollx[num] = 0; tanks[num]->xspeed = 0; } else if (scrollx[num] > scroll->w - SCROLLW) { scrollx[num] = scroll->w - SCROLLW; tanks[num]->xspeed = 0; } if (scrolly[num] < 0) { scrolly[num] = 0; tanks[num]->xspeed = 0; } else if (scrolly[num] > scroll->h - SCROLLH) { scrolly[num] = scroll->h - SCROLLH; tanks[num]->xspeed = 0; } }