Allegro 5 kolizja z mapą kafelkową

0

Witam
Pracuję nad grą w stylu Breakout. Mam mapkę kafelkową z bloczkami które trzeba rozwalać. Niestety nie bardzo wiem jak zrobić wykrywanie kolizji piłki z tymi bloczkami.
Podaję kod:

#include <iostream>
#include <windows.h>
#include <allegro5/allegro.h>
#include <allegro5/allegro_image.h>
#include <allegro5/allegro_font.h>
#include <allegro5/allegro_ttf.h>
#include <allegro5/allegro_acodec.h>
#include <allegro5/allegro_audio.h>
#include <allegro5/allegro_primitives.h>

using namespace std;

int dwn=0,lft=0,szer=1280,wys=1024;
int rozm1=210,rozm2=20;
int x_paletki=szer/2-rozm1/2,y_paletki=wys-2*rozm2;
int x_ball=x_paletki+rozm1/2,y_ball=y_paletki-rozm2/2;
int ruch=3;
int vol=2;
int i=0;
int x,y;


int tab_bloczki[5][20]=
{
    {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
    {2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
    {3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3},
    {4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4}

};

int main()
{
srand( time( NULL ) );
al_init();
al_install_keyboard();
al_init_font_addon();
al_init_ttf_addon();
al_init_image_addon();
al_init_primitives_addon();
al_install_audio();
al_init_acodec_addon();
al_reserve_samples(8);
ALLEGRO_KEYBOARD_STATE klawiatura;
al_set_new_display_flags( ALLEGRO_FULLSCREEN );

ALLEGRO_DISPLAY *okno = al_create_display(szer,wys);

ALLEGRO_FONT * font_100 = al_load_ttf_font("data/font/font_100.ttf",100, 0);
ALLEGRO_FONT * font = al_load_ttf_font("data/font/font.ttf",18, 0);
ALLEGRO_BITMAP * bloczki  = al_load_bitmap("data/image/bloczki.png");
ALLEGRO_BITMAP * paletka = al_create_bitmap(rozm1,rozm2);
al_hide_mouse_cursor(okno);
al_set_window_title(okno,"WallBall");

    al_set_target_bitmap(paletka);
    al_clear_to_color(al_map_rgb(255,255,255));
    al_set_target_bitmap(al_get_backbuffer(okno));

    double czas = al_get_time();
    while( !al_key_down( &klawiatura, ALLEGRO_KEY_ESCAPE))
    {
        al_get_keyboard_state(&klawiatura);
        if ( al_get_time() > czas+ 0.00001)
        {

        if (y_ball+10>=y_paletki)
        {
        if (x_ball>=x_paletki && x_ball<=x_paletki+30) ruch=1;
        if (x_ball>=x_paletki+30 && x_ball<=x_paletki+60) ruch=2;
        if (x_ball>=x_paletki+60 && x_ball<=x_paletki+90) ruch=3;
        if (x_ball>=x_paletki+90 && x_ball<=x_paletki+120) ruch=4;
        if (x_ball>=x_paletki+120 && x_ball<=x_paletki+150) ruch=5;
        if (x_ball>=x_paletki+150 && x_ball<=x_paletki+180) ruch=6;
        if (x_ball>=x_paletki+180 && x_ball<=x_paletki+210) ruch=7;
        }

        if (x_ball-10<=0 or x_ball+10>=szer)
        {
        if (ruch==1) ruch=7;
        if (ruch==2) ruch=6;
        if (ruch==3) ruch=5;
        if (ruch==4) ruch=11;
        if (ruch==5) ruch=3;
        if (ruch==6) ruch=2;
        if (ruch==7) ruch=1;
        }

        if (y_ball-10<=0)
        {
        if (ruch==1) ruch=8;
        if (ruch==2) ruch=9;
        if (ruch==3) ruch=10;
        if (ruch==4) ruch=11;
        if (ruch==5) ruch=12;
        if (ruch==6) ruch=13;
        if (ruch==7) ruch=14;
        }

        //w góre
        if (ruch==1) y_ball--,x_ball-=2;
        if (ruch==2) y_ball-=2,x_ball-=2;
        if (ruch==3) y_ball-=2,x_ball--;
        if (ruch==4) y_ball-=2;
        if (ruch==5) y_ball-=2,x_ball++;
        if (ruch==6) y_ball-=2,x_ball+=2;
        if (ruch==7) y_ball--,x_ball+=2;
        //w dół
        if (ruch==8) y_ball++,x_ball-=2;
        if (ruch==9) y_ball+=2,x_ball-=2;
        if (ruch==10) y_ball+=2,x_ball--;
        if (ruch==11) y_ball+=2;
        if (ruch==12) y_ball+=2,x_ball++;
        if (ruch==13) y_ball+=2,x_ball+=2;
        if (ruch==14) y_ball++,x_ball+=2;


        if(al_key_down(&klawiatura,ALLEGRO_KEY_LEFT)   && x_paletki>0) x_paletki-=3;
        if(al_key_down(&klawiatura,ALLEGRO_KEY_RIGHT) && x_paletki+rozm1<szer) x_paletki+=3;

        al_clear_to_color(al_map_rgb_f(0,0,0));
        for (int y=0 ; y < 5 ; y++ )
            for (int x=0 ; x < 20 ; x++ )
            al_draw_bitmap_region(bloczki,128*tab_bloczki[y][x], 0,128,40,x*128, y*40+80,0);
        al_draw_bitmap(paletka,x_paletki,y_paletki,0);
        al_draw_filled_circle(x_ball,y_ball,rozm2/2,al_map_rgb(255,255,255));
        al_draw_textf(font,al_map_rgb(255,255,255),szer-szer+10,wys-25,0,"ESC - wyjście");
        al_draw_textf(font,al_map_rgb(255,255,255),szer-szer+140,wys-25,0,"F12 - restart gry");
        al_flip_display();
        czas = al_get_time();
        al_rest(0.01);
    }
    }
    al_destroy_font(font_100);
    al_destroy_font(font);
    al_destroy_display(okno);
    return 0;
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1