Salve. Sto letteralmente impazzendo: è da giorni che sto cercando guide sulla collisione, e tutte mi dicono più o meno la stessa cosa: per far collidere due oggetti bisogna costruire attorno ad essi dei rettangoli e, se questi si toccano avviene la collisione.
vi posto il codice che mi sta facendo uscire di testa.
codice:
#include <allegro.h>
BITMAP *buf, *sprite, *sfondo, *cattivo;
PALETTE color;
int x, y, xcattivo, ycattivo ;
int morto = 1;

void nemico()
{
    draw_sprite (buf, cattivo, xcattivo, ycattivo);
}
void db()
{
    vsync();
    blit (buf, screen, 0, 0, 0, 0, 600, 300);
    clear(buf);
}
void giocatore()
{
    if (morto == 1)
    {


    draw_sprite(buf, sprite, x, y);
    }
}
void sfondo1()
{
    blit (sfondo, buf, 0, 0, 0, 0, 600, 300);
}
void movimento()
{
    if (key[KEY_UP])
        y -= 3;
    if (key[KEY_DOWN])
        y += 3;
    if (key[KEY_LEFT])
        x -= 3;
    if (key[KEY_RIGHT])
        x += 3;
}
void collisione() {
nt lato_dx1 =  x + 10; //questo è il punto destro del lato dx del rettangolo immaginario del 1                                                          
int lato_sx1 =  x - 10;// questo quello sx
int lato_up1 =  y - 10;// sopra
int lato_dow1 = y + 10;// sotto
// processo analogo a quello sopra
int lato_dx2 =  xcattivo + 10;
int lato_sx2 =  xcattivo - 10;
int lato_up2 =  ycattivo - 10;
int lato_dow2 = ycattivo + 10;




if ((lato_dx1 >= lato_sx2) && (lato_dx1 <= lato_dx2))
{
    if ((lato_up1 >= lato_up2) && (lato_up1 <= lato_dow2 ))
    {
        morto = 0;
    }
    else if ((lato_dow1 <= lato_dow2 ) && (lato_dow1 >= lato_up2))
    {
        morto = 0;
    }
}
else
{
    morto = 1;
}

}
int main()
{
    allegro_init();
    install_keyboard();
    set_color_depth(32);
    set_pallete(color);
    set_gfx_mode(GFX_AUTODETECT_WINDOWED,  600, 300, 0, 0);
    buf = create_bitmap(600, 300);
    clear(buf);
    x = 50;
    y = 50;
    xcattivo = 200;
    ycattivo = 100;
    while (!key[KEY_ESC])
    {
        sprite = load_bmp ("immagine.bmp", color);
        sfondo = load_bitmap ("sfondo.bmp", color);
        cattivo = load_bmp ("nemico.bmp", color);

        db();
        sfondo1();
        giocatore();
        nemico();
        movimento();
        collisione();

    }
    destroy_bitmap (buf);
    destroy_bitmap (sfondo);
    destroy_bitmap (sprite);
    destroy_bitmap(cattivo);





    return 0;
}
END_OF_MAIN();
Quale è l'errore??? vi prego, sto impazzendo