Tak plik z dzwiękiem jest w katalogu z grą. Co by mój tok myślenia był nieco łatwiejszy do zrozumienia, zamieszczam cały kod gry:
#include <allegro5/allegro.h>
#include <allegro5/allegro_image.h>
#include <allegro5/allegro_font.h>
#include <allegro5/allegro_ttf.h>
#include <allegro5/allegro_audio.h>
#include <allegro5/allegro_acodec.h>
#include <cmath>
const int WIDTH = 640;
const int HEIGHT = 480;
bool keys[] = { false, false, false, false, false };
enum KEYS { LEFT, RIGHT };
struct Sprite
{
float x;
float y;
float velX;
float velY;
int dirX;
int dirY;
int r;
int w;
int h;
ALLEGRO_BITMAP * image;
};
void scroll_piwo( float & y )
{
if( y < 480 )
{
y++;
}
else if( y >= 480 )
{
y =- HEIGHT;
}
}
int main( int argc, char ** argv )
{
int punkty = 0;
time_t czas;
czas = clock() / 360;
bool done = false;
bool render = false;
bool bound = false;
bool collision = false;
Sprite ball1;
Sprite ball2, ball3, ball4, ball5, ball6;
ball1.x = 320;
ball1.y = 460;
ball2.x = 400;
ball2.y = 240;
ball3.x = 100;
ball3.y = 20;
ball4.x = 520;
ball4.y = - HEIGHT;
ball5.x = 320;
ball5.y = - HEIGHT - 200;
ball6.x = 260;
ball6.y = - HEIGHT - 100;
ALLEGRO_DISPLAY * display = NULL;
ALLEGRO_EVENT_QUEUE * event_queue = NULL;
ALLEGRO_TIMER * timer;
ALLEGRO_FONT * font18 = NULL;
ALLEGRO_BITMAP * tlo = NULL;
ALLEGRO_SAMPLE * plusk = NULL;
if( !al_init() )
return - 1;
display = al_create_display( WIDTH, HEIGHT );
if( !display )
return - 1;
al_install_keyboard();
al_init_image_addon();
al_init_font_addon();
al_init_ttf_addon();
al_init_acodec_addon();
al_install_audio();
al_reserve_samples( 10 );
font18 = al_load_font( "courbd.ttf", 14, 0 );
plusk = al_load_sample( "mu.ogg" );
ball1.image = al_load_bitmap( "kontener.bmp" );
ball2.image = al_load_bitmap( "harnas.bmp" );
ball3.image = al_load_bitmap( "harnas.bmp" );
ball4.image = al_load_bitmap( "harnas.bmp" );
ball5.image = al_load_bitmap( "harnas.bmp" );
ball6.image = al_load_bitmap( "harnas.bmp" );
tlo = al_load_bitmap( "tlo.bmp" );
ball1.w = al_get_bitmap_width( ball1.image );
ball1.h = al_get_bitmap_height( ball1.image );
ball2.w = al_get_bitmap_width( ball2.image );
ball2.h = al_get_bitmap_height( ball2.image );
ball3.w = al_get_bitmap_width( ball3.image );
ball3.h = al_get_bitmap_height( ball3.image );
ball4.w = al_get_bitmap_width( ball4.image );
ball4.h = al_get_bitmap_height( ball4.image );
ball5.w = al_get_bitmap_width( ball5.image );
ball5.h = al_get_bitmap_height( ball5.image );
ball6.w = al_get_bitmap_width( ball6.image );
ball6.h = al_get_bitmap_height( ball6.image );
ball1.r = ball1.w / 2 - 10;
ball2.r = ball2.w / 2 - 10;
ball3.r = ball3.w / 2 - 10;
ball4.r = ball4.w / 2 - 10;
ball5.r = ball5.w / 2 - 10;
ball6.r = ball6.w / 2 - 10;
event_queue = al_create_event_queue();
timer = al_create_timer( 1.0 / 60 );
al_register_event_source( event_queue, al_get_timer_event_source( timer ) );
al_register_event_source( event_queue, al_get_display_event_source( display ) );
al_register_event_source( event_queue, al_get_keyboard_event_source() );
al_start_timer( timer );
while( !done )
{
ALLEGRO_EVENT ev;
al_wait_for_event( event_queue, & ev );
if( ev.type == ALLEGRO_EVENT_KEY_DOWN )
{
switch( ev.keyboard.keycode )
{
case ALLEGRO_KEY_ESCAPE:
done = true;
break;
case ALLEGRO_KEY_LEFT:
keys[ LEFT ] = true;
break;
case ALLEGRO_KEY_RIGHT:
keys[ RIGHT ] = true;
break;
}
}
else if( ev.type == ALLEGRO_EVENT_KEY_UP )
{
switch( ev.keyboard.keycode )
{
case ALLEGRO_KEY_ESCAPE:
done = true;
break;
case ALLEGRO_KEY_LEFT:
keys[ LEFT ] = false;
break;
case ALLEGRO_KEY_RIGHT:
keys[ RIGHT ] = false;
break;
}
}
else if( ev.type == ALLEGRO_EVENT_TIMER )
{
render = true;
if( keys[ LEFT ] )
ball1.x -= 5;
else if( keys[ RIGHT ] )
ball1.x += 5;
float distance = sqrt( pow( ball1.x - ball2.x, 2 ) + pow( ball1.y - ball2.y, 2 ) );
if( distance < ball1.r + ball2.r )
{
collision = true;
punkty++;
ball2.y = HEIGHT * 2;
}
else if( ball2.y >= 480 )
{
al_draw_text( font18, al_map_rgb( 255, 255, 255 ), 320, 240, ALLEGRO_ALIGN_CENTRE, "GAME OVER" );
al_flip_display();
al_rest( 5.0 );
exit( 1 );
}
else
{
collision = false;
}
scroll_piwo( ball2.y );
scroll_piwo( ball3.y );
scroll_piwo( ball4.y );
scroll_piwo( ball5.y );
scroll_piwo( ball6.y );
}
if( render && al_is_event_queue_empty( event_queue ) )
{
render = false;
al_draw_bitmap( tlo, 0, 0, 0 );
al_draw_bitmap( ball2.image, ball2.x - ball2.w / 2, ball2.y - ball2.h / 2, 0 );
al_draw_bitmap( ball3.image, ball3.x - ball3.w / 3, ball3.y - ball3.h / 2, 0 );
al_draw_bitmap( ball4.image, ball4.x - ball4.w / 2, ball4.y - ball4.h / 2, 0 );
al_draw_bitmap( ball5.image, ball5.x - ball5.w / 2, ball5.y - ball5.h / 2, 0 );
al_draw_bitmap( ball6.image, ball6.x - ball6.w / 2, ball6.y - ball6.h / 2, 0 );
al_draw_bitmap( ball1.image, ball1.x - ball1.w / 2, ball1.y - ball1.h / 2, 0 );
al_convert_mask_to_alpha( ball2.image, al_map_rgb( 255, 0, 255 ) );
al_convert_mask_to_alpha( ball3.image, al_map_rgb( 255, 0, 255 ) );
al_convert_mask_to_alpha( ball4.image, al_map_rgb( 255, 0, 255 ) );
al_convert_mask_to_alpha( ball5.image, al_map_rgb( 255, 0, 255 ) );
al_convert_mask_to_alpha( ball6.image, al_map_rgb( 255, 0, 255 ) );
al_draw_textf( font18, al_map_rgb( 255, 255, 255 ), 20, 20, ALLEGRO_ALIGN_LEFT, "PUNKTY %i", punkty );
al_draw_textf( font18, al_map_rgb( 255, 255, 255 ), 240, 20, ALLEGRO_ALIGN_LEFT, "CZAS %i", czas );
al_draw_textf( font18, al_map_rgb( 255, 255, 255 ), 460, 20, ALLEGRO_ALIGN_LEFT, "TEMPO %i", punkty );
al_flip_display();
al_clear_to_color( al_map_rgb( 0, 0, 0 ) );
}
}
al_destroy_bitmap( tlo );
al_destroy_bitmap( ball1.image );
al_destroy_bitmap( ball2.image );
al_destroy_bitmap( ball3.image );
al_destroy_bitmap( ball4.image );
al_destroy_bitmap( ball5.image );
al_destroy_bitmap( ball6.image );
al_destroy_font( font18 );
al_destroy_timer( timer );
al_destroy_event_queue( event_queue );
al_destroy_display( display );
al_destroy_sample( plusk );
return 0;
}