1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
|
#include"gpacman.h"
#include"pac.h"
G_Pacman::G_Pacman() {
consfn();
pix(&pix0,(char*)pacman0_bits,Colour::PACMANCOLOUR,Colour::MYBACKGROUND);
pix(&pixl,(char*)pacmanleft_bits,Colour::PACMANCOLOUR,Colour::MYBACKGROUND);
pix(&pixr,(char*)pacmanright_bits,Colour::PACMANCOLOUR,Colour::MYBACKGROUND);
pix(&pixu,(char*)pacmanup_bits,Colour::PACMANCOLOUR,Colour::MYBACKGROUND);
pix(&pixd,(char*)pacmandown_bits,Colour::PACMANCOLOUR,Colour::MYBACKGROUND);
pixmap=pixr;
look=right;
mouth=1;
};
G_Pacman::~G_Pacman(void) {
#ifdef XWIN
if (pixmap!=pix0) XFreePixmap(display,pix0);
if (pixmap!=pixl) XFreePixmap(display,pixl);
if (pixmap!=pixr) XFreePixmap(display,pixr);
if (pixmap!=pixd) XFreePixmap(display,pixd);
if (pixmap!=pixu) XFreePixmap(display,pixu);
#elif defined MSWIN
if (pixmap!=pix0) DeleteObject(pix0);
if (pixmap!=pixl) DeleteObject(pixl);
if (pixmap!=pixr) DeleteObject(pixr);
if (pixmap!=pixd) DeleteObject(pixd);
if (pixmap!=pixu) DeleteObject(pixu);
#endif
}
void G_Pacman::draw(int x,int y,direction d,direction try_d) {
if (d==still) mouth=1;
if (try_d!=still) look=try_d;
//if (d==still) mouth=1; else look=d;
if (mouth) {
switch (look) {
case up: pixmap=pixu; break;
case down: pixmap=pixd; break;
case left: pixmap=pixl; break;
case right: pixmap=pixr; break;
default: pacwarning("Gpac");
}
} else pixmap=pix0;
mouth=1-mouth; //if moving, mouth opens/closing alternating
GraphElement::draw(x,y);
}
//returns graphical id according whether mouth is open or which direction
GID_TYPE G_Pacman::getgid(direction d,direction try_d) {
PIXMAPTYPE pixmap;
if (d==still) mouth=1;
if (try_d!=still) look=try_d;
//if (d==still) mouth=1; else look=d;
if (mouth) {
switch (look) {
case up: pixmap=pixu; break;
case down: pixmap=pixd; break;
case left: pixmap=pixl; break;
case right: pixmap=pixr; break;
default: pacwarning("Gpac");
}
} else pixmap=pix0;
return pixmap;
}
|