
/*******************************************************************
Utilisation du clavier pour bouger un élément graphique (rectangle)
*******************************************************************/
#include <allegro.h>
int main()
{
// paramètres de l'élément à animer
int posx,posy; // coordonnées
int tx,ty; // taille (largeur et hauteur)
int deplacement; // amplitude absolu des déplacements
srand(time(NULL));
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);
}
// initialisation des variables de la forme
// tailles et position initiale au centre
tx=60;
ty=40;
posx=SCREEN_W/2-tx/2;
posy=SCREEN_H/2-ty/2;
// mouvements :
// se déplacera de 5 pixels à chaque étape de déplacement
deplacement=5;
// Boucle interactive
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
// prise en compte du clavier : deplacement direct de la position
if (key[KEY_UP])
posy = posy-deplacement; // mouvement négatif en ordonnées
if (key[KEY_DOWN])
posy = posy+deplacement; // mouvement positif en ordonnées
if (key[KEY_LEFT])
posx = posx-deplacement; // mouvement négatif en abscisses
if (key[KEY_RIGHT])
posx = posx+deplacement; // mouvement positif en abscisses
// contrôle des bords
if (posx+tx<0) posx = SCREEN_W+posx+tx;
if (posx>=SCREEN_W) posx = posx-SCREEN_W-tx;
if (posy+ty<0) posy = SCREEN_H+posy+ty;
if (posy>=SCREEN_H) posy = posy-SCREEN_H-ty;
// 3) AFFICHAGE NOUVELLE POSITION
rectfill(screen,posx,posy,posx+tx,posy+ty,makecol(255,128,128));
// 4) ON FAIT UNE PETITE PAUSE à chaque fois sinon ça va trop vite...
rest(20);
}
return 0;
}
END_OF_MAIN();