#include #include BITMAP *buffer = NULL; //buffer const int MOUSE = 0; const int KEYBOARD = 1; //timer volatile long timerCounter = 0; void increment_timerCounter() { timerCounter++; } class sprite { protected: int sprX,sprY,sprWidth,sprHeight; public: int bbspritetop,bbspritebottom,bbspriteleft,bbspriteright; sprite() {sprX=sprY=sprWidth=sprHeight=0;} sprite(int _sprX, int _sprY, int _sprWidth, int _sprHeight) { sprX = _sprX; sprY = _sprY; sprWidth = _sprWidth; sprHeight = _sprHeight; bbspritetop = sprY-(sprHeight/2); bbspritebottom = sprY+(sprHeight/2); bbspriteleft = sprX-(sprWidth/2); bbspriteright = sprX+(sprWidth/2); } virtual ~sprite() {} virtual void draw(BITMAP *dest) { draw_sprite(buffer, dest, bbspriteleft, bbspritetop); bbspritetop = sprY-(sprHeight/2); bbspritebottom = sprY+(sprHeight/2); bbspriteleft = sprX-(sprWidth/2); bbspriteright = sprX+(sprWidth/2); } }; class ball : public sprite { private: public: int ballHspeed,ballVspeed; ball() : sprite() {} ball(int _sprX, int _sprY, int _sprWidth, int _sprHeight) : sprite(_sprX, _sprY, _sprWidth, _sprHeight) {} void startBall(int _spd) {ballHspeed=ballVspeed=_spd;} void ballSpeed(int _ballHspeed, int _ballVspeed) {ballHspeed = _ballHspeed; ballVspeed = _ballVspeed;} virtual void control(); }; void ball::control() { if (0 > sprX||640 < sprX) { ballHspeed *= -1; } if (0 > sprY||480 < sprY) { ballVspeed *= -1; } sprX += ballHspeed; sprY += ballVspeed; } class paddle : public sprite { private: int paddleCtrl,mousePosY; public: paddle() : sprite() {} paddle(int _sprX, int _sprY, int _sprWidth, int _sprHeight, int _paddleCtrl) : sprite(_sprX, _sprY, _sprWidth, _sprHeight) { paddleCtrl = _paddleCtrl;} void control(); void check_collision(); }; void paddle::control() { if (paddleCtrl == KEYBOARD) { if (480>=sprY>=0) { if (key[KEY_UP]) sprY -= 10; if (key[KEY_DOWN]) sprY +=10; } if (480sprY) sprY = 0; } if (paddleCtrl == MOUSE) { sprY = mouse_pos & 0x0000ffff; } } int main(int argc, char *argv[]) { allegro_init(); install_keyboard(); install_timer(); install_mouse(); LOCK_VARIABLE(timerCounter); LOCK_FUNCTION(increment_timerCounter); install_int_ex(increment_timerCounter, BPS_TO_TIMER(60)); set_color_depth(16); set_gfx_mode(GFX_AUTODETECT_WINDOWED,640,480,0,0); buffer = create_bitmap(640,480); if(buffer == NULL) { set_gfx_mode(GFX_TEXT,0,0,0,0); allegro_message("Could not create buffer!"); } BITMAP *playerSprite = NULL; //playersprite playerSprite = load_bitmap("paddle.bmp", NULL); // Load picture if(playerSprite == NULL) { set_gfx_mode(GFX_TEXT,0,0,0,0); allegro_message("Could not load paddle.bmp"); } BITMAP *playerBall = NULL; //playersprite playerBall = load_bitmap("ball.bmp", NULL); // Load picture if(playerBall == NULL) { set_gfx_mode(GFX_TEXT,0,0,0,0); allegro_message("Could not load ball.bmp"); } paddle *myPlayer[2]; myPlayer[0] = new paddle(20,240,15,102,KEYBOARD); myPlayer[1] = new paddle(620,240,15,102,MOUSE); ball myBall(320,240,15,15); myBall.startBall(1); //the game loop while (!key[KEY_ESC]) { while(timerCounter > 0) { for(int i=0;i<2;i++) { myPlayer[i]->control(); } timerCounter--; } for(int i=0;i<2;i++) { myPlayer[i]->draw(playerSprite); } myBall.control(); myBall.draw(playerBall); blit(buffer, screen, 0,0,0,0,640,480);//Draw the buffer to the screen clear_bitmap(buffer); // Clear the contents of the buffer bitmap } destroy_bitmap(playerBall); // Release the bitmap data destroy_bitmap(playerSprite); // Release the bitmap data destroy_bitmap(buffer); // Release the bitmap data return 0; } END_OF_MAIN(); //yah, finishin' it up