Hola
MaUrOx970909, hace años que no programo con allegro, si mal no lo recuerdo la librería Allegro trae ejemplos para lo que buscas.
En mis archivos encontré un ejm que mueve una imagen de un roedor en la posición del mouse.
Recuerdo que me basé en los ejemplos de la librería y que funcionaba bien, a simple viste parece que hay cosas innecesarias.
Utilizo la técnica del doble buffer, es decir primero pintas en un bitmap el fondo y la rata, luego pintas el bitmap en pantalla; esto evita que veamos un feo parpadeo los humanos las ratas no sé
Acerca de lo que intentas te faltaría la interacción del mouse sobre objetos. Este código es antiguo pero una buena base, a lo mejor tendrás que reemplazar algunas funciones.
#include<allegro.h>
#include<iostream>
using namespace std;
char buf[256];
BITMAP *background;
BITMAP *sprite;
BITMAP *buffer;
BITMAP *alpha;
int main(int argc, char *argv[]) {
int x, y, c, a1,a2,a3;
if (allegro_init() != 0) return 1;
install_keyboard();
install_timer();
install_mouse();
set_color_depth(32);
set_gfx_mode(GFX_AUTODETECT_WINDOWED,800,600,0,0);
set_window_title( "Rata voladora" );
/* cargando imagen de fondo */
replace_filename(buf, argv[0], "fondo.bmp", sizeof(buf));
background = load_bitmap(buf, NULL);
if (!background) {
set_gfx_mode(GFX_TEXT, 0, 0, 0, 0);
allegro_message("Error reading %s!\n", buf);
return 1;
}
PALETTE paleta;
replace_filename(buf, argv[0], "rata.pcx", sizeof(buf));
alpha = load_bitmap(buf, paleta);
if (!alpha) {
set_gfx_mode(GFX_TEXT, 0, 0, 0, 0);
allegro_message("Error reading %s!\n", buf);
return 1;
}
set_palette(paleta);
sprite = create_bitmap(alpha->w, alpha->h);
buffer = create_bitmap(SCREEN_W, SCREEN_H);
/* scale the background image to be the same size as the screen */
stretch_blit(background, buffer, 0, 0, background->w, background->h,
0, 0, SCREEN_W, SCREEN_H);
destroy_bitmap(background);
background = create_bitmap(SCREEN_W, SCREEN_H);
blit(buffer, background, 0, 0, 0, 0, SCREEN_W, SCREEN_H);
while (!keypressed()) { // sale del juego cuando presionas un tecla
x = mouse_x - sprite->w/2;
y = mouse_y - sprite->h/2;
draw_sprite(buffer, background, 0,0); // dibuja el fondo
draw_sprite(buffer, alpha, x,y); // dibuja la rata en la posicion del mouse
vsync();
blit(buffer, screen, 0, 0, 0, 0, SCREEN_W, SCREEN_H); // vuelca el buffer en pantalla
}
readkey();
//
destroy_bitmap(alpha);
destroy_bitmap(background);
destroy_bitmap(sprite);
allegro_exit();
return 0;
}
END_OF_MAIN();