Code:
#include <allegro.h>
#define max_laser 1
#define max_baddies 9
int counter, dir = 0;
BITMAP *buffer = NULL;
BITMAP *laser = NULL;
BITMAP *baddy = NULL;
BITMAP *boom = NULL;
BITMAP *bg = NULL;
BITMAP *title = NULL;
void updatelasers();
void enemypos();
void enemymov();
void checkcol();
int bb_col ( int x1, int y1, int w1, int h1, int x2, int y2, int w2, int h2 )
{
if(y1 + h1 <= y2)
return 0;
if(y1 >= y2 + h2)
return 0;
if(x1 + w1 <= x2)
return 0;
if(x1 >= x2 + w2)
return 0;
return 1;
}
struct laser
{
int x, y;
bool exists;
}lasers[max_laser];
struct baddy
{
int x, y;
bool exists;
}baddies[8];
class player
{
public:
int x, y, left, right, fire;
BITMAP* ship;
player(): x(300), y(425), left(0), right(0) { ship = load_bitmap ( "ship.bmp", NULL ); }
~player() { destroy_bitmap(ship); }
void getmove()
{
if ( x > 0 && key[KEY_LEFT] )
{
left = 1;
}
else
{
left = 0;
}
if ( x < 600 && key[KEY_RIGHT] )
{
right = 1;
}
else
{
right = 0;
}
if ( key[KEY_SPACE] )
{
for ( int i = 0; i < max_laser; i++ )
{
if ( lasers[i].exists == 0 )
{
lasers[i].exists = 1;
lasers[i].x = x + 17;
lasers[i].y = y;
break;
}
}
}
updatelasers();
if ( left == 1 ) x -= 10;
if ( right == 1 ) x += 10;
}
void draw(BITMAP* b)
{
draw_sprite ( b, ship, x, 425 );
}
};
void update_counter()
{
counter++;
}END_OF_FUNCTION(update_counter);
int main()
{
allegro_init();
install_keyboard();
set_color_depth(32);
set_gfx_mode(GFX_AUTODETECT_FULLSCREEN, 640, 480, 0, 0);
buffer = create_bitmap( 640, 480 );
laser = load_bitmap ( "laser.bmp", NULL );
baddy = load_bitmap ( "Baddy.bmp", NULL );
boom = load_bitmap ( "Baddy2.bmp", NULL );
bg = load_bitmap ( "bg.bmp", NULL );
title = load_bitmap ( "title.bmp", NULL );
enemypos();
LOCK_VARIABLE(counter);
LOCK_FUNCTION(update_counter);
install_int_ex( update_counter, BPS_TO_TIMER(60));
player *player1 = new player;
do{
while ( counter > 0 )
{
player1->getmove();
counter--;
}
clear(buffer);
player1->draw(buffer);
enemymov();
for(int a = 0 ; a < 8 ; a++)
{
if ( baddies[a].exists = 1 )
draw_sprite ( buffer, baddy, baddies[a].x, baddies[a].y);
}
for(int i = 0; i < max_laser; i++)
draw_sprite(buffer, laser, lasers[i].x, lasers[i].y);
checkcol();
blit( buffer, screen, 0, 0, 0, 0, 640, 480);
}
while ( !key[KEY_ESC] );
delete player1;
destroy_bitmap(buffer);
destroy_bitmap(laser);
destroy_bitmap(baddy);
destroy_bitmap(boom);
allegro_exit();
return 0;
}
END_OF_MAIN();
void updatelasers()
{
for(int j = 0; j < max_laser; j++)
{
if( lasers[j].exists == 1 )
{
if( lasers[j].y <= 0 )
lasers[j].exists = 0;
}
}
for(int i = 0; i < max_laser; i++)
{
if( lasers[i].exists == 1 )
{
lasers[i].y -= 10;
}
}
}
void enemypos()
{
baddies[0].x = 100;
baddies[0].y = 20;
baddies[1].x = 150;
baddies[1].y = 20;
baddies[2].x = 200;
baddies[2].y = 20;
baddies[3].x = 250;
baddies[3].y = 20;
baddies[4].x = 300;
baddies[4].y = 20;
baddies[5].x = 350;
baddies[5].y = 20;
baddies[6].x = 400;
baddies[6].y = 20;
baddies[7].x = 450;
baddies[7].y = 20;
baddies[8].x = 500;
baddies[8].y = 20;
}
void enemymov()
{
if ( baddies[0].x > 10 && dir == 0 )
{
baddies[0].x--;
baddies[1].x--;
baddies[2].x--;
baddies[3].x--;
baddies[4].x--;
baddies[5].x--;
baddies[6].x--;
baddies[7].x--;
baddies[8].x--;
}
else if ( baddies[8].x < 600 )
{
dir = 1;
baddies[0].x++;
baddies[1].x++;
baddies[2].x++;
baddies[3].x++;
baddies[4].x++;
baddies[5].x++;
baddies[6].x++;
baddies[7].x++;
baddies[8].x++;
}
else if ( baddies[8].x == 600 )
{
dir = 0;
}
}
void checkcol()
{
for(int b = 0; b < max_baddies; b++)
for(int c = 0; c < max_laser; c++)
if(bb_col(baddies[b].x, baddies[b].y, 35, 41, lasers[c].x, lasers[c].y, 7, 10))
{
while ( baddies[b].y != 500 )
baddies[b].y++;
}
}
i owe everything to josh and ppl at the allegro.cc forums.