
/*******************************************************************
BITMAP : Charger une image depuis un fichier .bmp vers une BITMAP
et afficher cette BITMAP au milieu de l'écran
puis animer cette image (effacer ancienne position...)
L'image s'apppelle "mon_image.bmp" et doit être mise
au niveau du répertoire de projet (avec le main.c)
à moins de modifier le chemin d'accès ci dessous...
*******************************************************************/
#include <allegro.h>
int main()
{
// Déclaration du pointeur sur BITMAP devant recevoir l'image
BITMAP *image;
// paramètres de l'élément à animer
int posx,posy; // coordonnées
int tx,ty; // taille (largeur et hauteur)
int depx,depy; // vecteur déplacement effectif en x et y
// Lancer allegro et le mode graphique
allegro_init();
install_keyboard();
set_color_depth(desktop_color_depth());
if (set_gfx_mode(GFX_AUTODETECT_WINDOWED,800,600,0,0)!=0)
{
allegro_message("prb gfx mode");
allegro_exit();
exit(EXIT_FAILURE);
}
// Chargement de l'image (l'allocation a lieu en même temps)
image=load_bitmap("mon_image.bmp",NULL);
if (!image) {
allegro_message("pas pu trouver/charger mon_image.bmp");
allegro_exit(); exit(EXIT_FAILURE);
}
// Initialisation des paramètres de l'élément à animer
// La taille est directement récupérée dans les champs w et h
tx=image->w;
ty=image->h;
// Position initiale au centre
posx=SCREEN_W/2-tx/2;
posy=SCREEN_H/2-ty/2;
// mouvements vers la droite et vers le bas
// on pourrait initialiser aléatoirement ici...
depx=9;
depy=5;
// Boucle d'animation (pas d'interaction)
while (!key[KEY_ESC])
{
// 1) EFFACER POSITION ACTUELLE (redessiner à la couleur du fond)
rectfill(screen,posx,posy,posx+tx,posy+ty,makecol(0,0,0));
// 2) DETERMINER NOUVELLE POSITION
// contrôle des bords : ici on décide de rebondir sur les bords
if ( (posx<0 && depx<0) || (posx+tx>SCREEN_W && depx>0) )
depx=-depx;
if ( (posy<0 && depy<0) || (posy+ty>SCREEN_H && depy>0) )
depy=-depy;
// calculer nouvelle position
// nouvelle position = position actuelle + deplacement
posx=posx+depx;
posy=posy+depy;
// 3) AFFICHAGE NOUVELLE POSITION
// On blit l'image en position posx posy
blit(image,screen,0,0,posx,posy,tx,ty);
// 4) ON FAIT UNE PETITE PAUSE à chaque fois sinon ça va trop vite...
rest(20);
}
return 0;
}
END_OF_MAIN();