Voici mon code de test :
#include "allegro.h"
#define VIVANT 1
#define MORT 0
#define TIR 2
#define EXPLOSION 3
#define FAUX 0
#define VRAI 1
class alien {
public :
int etat; // VIVANT,EXPLOSION,MORT,TIR
int pos_x; //
int pos_y; // Position x et y sur l'écran
int cadence_tir; // Vitesse de tir
int cadence_tir_compteur; // Décompte pour le prochain tir
int type_tir; // Type du tir
int taille_x; //
int taille_y; // Taille en largeur(x), hauteur(y)
int zone_de_touche_x1; //
int zone_de_touche_x2; //
int zone_de_touche_y1; //
int zone_de_touche_y2; // Zone de collision avec un objet
int weak_point_x1; //
int weak_point_x2; //
int weak_point_y1; //
int weak_point_y2; // Zone de collision point faible avec un objet
int animation_normale[50]; // Tableau d'animation pour mouvement classique
int animation_attaque[50]; // Tableau d'animation lorsque tir
int animation_explosion[50];// Tableau d'animation lorsque explosion
int pv; // Point de vie
int mouvement; // Type de mouvement
void init(int vpos_x,int vpos_y,int vcadence_tir,int vtype_tir,int vpv,int vmouvement);
// Initialise l'alien avec les données en paramètre
void set_zone_de_touche(int x1,int y1,int x2,int y2);
// Initialise la zone de touche
void set_weak_point(int x1,int y1,int x2,int y2);
// Initialise le point faible
void set_animation_normale(int index,int valeur);
// Initialise une image de l'animation normale
void set_animation_attaque(int index,int valeur);
// Initialise une image de l'animation attaque
void set_animation_explosion(int index,int valeur);
// Initialise une image de l'animation explosion
void shoot(); // Fait tirer l'alien
void hit(); // Enlève un point de vie OU fait exploser l'alien
void die(); // Fait mourir l'alien
void move(); // Bouge l'alien selon le mouvement/etat ...
int iscollide_zone_de_touche(int sx1,int sy1,int sx2,int sy2);
// Est-il en collision (par rapport aux paramêtres)
int iscollide_weak_point(int sx1,int sy1,int sx2,int sy2);
// Est-il en collision (par rapport aux paramêtres)
void update(); // Gère la vie de l'alien avec les méthodes du dessus
alien() { etat=MORT;}; // Constructeur
};
void alien::init(int vpos_x,int vpos_y,int vcadence_tir,int vtype_tir,int vpv,int vmouvement) {
pos_x = vpos_x;
pos_y = vpos_y;
cadence_tir = vcadence_tir;
cadence_tir_compteur = cadence_tir;
type_tir = vtype_tir;
pv = vpv;
mouvement = vmouvement;
};
void alien::set_zone_de_touche(int x1,int y1,int x2,int y2) {
zone_de_touche_x1 = x1;
zone_de_touche_y1 = y1;
zone_de_touche_x2 = x2;
zone_de_touche_y2 = y2;
};
void alien::set_weak_point(int x1,int y1,int x2,int y2) {
weak_point_x1 = x1;
weak_point_y1 = y1;
weak_point_x2 = x2;
weak_point_y2 = y2;
};
void alien::set_animation_normale(int index,int valeur){
animation_normale[index] = valeur;
};
void alien::set_animation_attaque(int index,int valeur){
animation_attaque[index] = valeur;
};
void alien::set_animation_explosion(int index,int valeur){
animation_explosion[index] = valeur;
};
void alien::shoot(){
etat = TIR;
};
void alien::hit(){
pv--;
if (pv<=0)
etat = EXPLOSION;
};
void alien::die(){
etat = MORT;
};
void alien::move(){
if (mouvement==0)
pos_x--; // Mouvement simple de base
};
int alien::iscollide_zone_de_touche(int sx1,int sy1,int sx2,int sy2){
return FAUX;
};
int alien::iscollide_weak_point(int sx1,int sy1,int sx2,int sy2){
return FAUX;
};
void alien::update(){
if (etat==TIR) etat=VIVANT;
if (etat==VIVANT) {
cadence_tir_compteur--;
if (cadence_tir_compteur<=0) {
shoot();
cadence_tir_compteur = cadence_tir;
}
move();
}
};
class alien_pool {
public:
alien pool[200];
void create_alien();
int etat_alien(int nalien);
};
void alien_pool::create_alien(){
pool[0].etat = VIVANT;
};
int alien_pool::etat_alien(int nalien){
return pool[nalien].etat;
}
int main()
{
alien_pool p = new alien_pool;
p.create_alien();
/* you should always do this at the start of Allegro programs */
allegro_init();
/* set up the keyboard handler */
install_keyboard();
/* set a graphics mode sized 320x200 */
if (set_gfx_mode(GFX_DIRECTX_WIN, 640, 480, 0, 0) != 0) {
set_gfx_mode(GFX_TEXT, 0, 0, 0, 0);
allegro_message("Unable to set any graphic mode\n%s\n", allegro_error);
return 1;
}
/* set the color palette */
set_palette(desktop_palette);
/* clear the screen to white */
clear_to_color(screen, makecol(255, 255, 255));
/* you don't need to do this, but on some platforms (eg. Windows) things
* will be drawn more quickly if you always acquire the screen before
* trying to draw onto it.
*/
acquire_screen();
/* set transparent text */
text_mode(-1);
/* write some text to the screen with black letters */
if (p.etat_alien(0)==VIVANT)
textout_centre(screen, font, "VIVANT", SCREEN_W/2, SCREEN_H/2, makecol(0,0,0));
if (p.etat_alien(0)==MORT)
textout_centre(screen, font, "MORT", SCREEN_W/2, SCREEN_H/2, makecol(0,0,0));
/* you must always release bitmaps before calling any input functions */
release_screen();
/* wait for a keypress */
readkey();
return 0;
}
END_OF_MAIN();
Il merde ...
Vous pourriez me diriger un peu pour que je prenne des bonnes bases ...