Public feed
#527137
#include <allegro.h>
#include <iostream>
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 (480<sprY) sprY = 480;
if (0>sprY) 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