Bonjour, alors voilà nous sommes sur un projet d'informatique ou nous devons réaliser avec Allegro.

Nous souhaiterions gérer la partie missile de notre programme grâce à une liste chaînée, or une erreur, au moins, subsiste dans notre programme puisque lorsque nous voulons tirer, Windows nous met une fenêtre d'erreur

Je vous joint ci dessous, la bibliothèque, le main, et le sous programme d'ajout d'un maillon

#ifndef TOTO
#define TOTO

#include <stdio.h>
#include <allegro.h>
#include <math.h>
#include <string.h>
#include <stdlib.h>


#define ERREUR(){\
set_gfx_mode(GFX_TEXT,0,0,0,0);\
allegro_message(allegro_error);\
allegro_exit();\
return 1;\
}
#define ECRAN_X 800
#define ECRAN_Y 600
#define VIT_FD 1
#define VIT_AV 1

typedef struct ennemi_data
{
int ennemi_x;
int ennemi_y;
}t_enmi_data;

typedef struct ennemi
{
t_enmi_data endat;
struct ennemi*suiv;
}t_enmi;


typedef struct data_missile
{
int tir_x;
int tir_y;
}t_data_miss;

typedef struct missil
{
t_data_miss emdat;
struct missil *suiv;
}t_miss;

int menu(BITMAP*,BITMAP*);
int options(BITMAP*);
void tirer(t_miss*, BITMAP*, int , int );
void affichage(BITMAP*,BITMAP*,BITMAP*,int,int,int,int,BITMAP*);
void gestion(int*,int*);
void game_timer(void);
void game_sec_timer(void);
volatile int game_time;
volatile int sec_counter;
t_miss* creation_maillon();
void ajout_queue(t_miss*,t_miss*);



#endif
#include "biblio.h"

int main()
{
//déclaration des variables
BITMAP*fond[4],*buffer,*avion,*fd_menu,*tir1;
int pos_x=ECRAN_X/2,pos_y=ECRAN_Y/2,k=0;
int prog=0,i=0,done=0,ret_menu=0,exit=0,j=0;
char temp[20];
t_miss* ancre=NULL;
ancre=(t_miss*)malloc(sizeof(t_miss));
t_miss* missile=NULL;
FILE*fp;


//initialisation d'allegro
allegro_init();
install_keyboard();
install_mouse();
if(init_timer()!=0)ERREUR();
set_color_depth(32);




if(set_gfx_mode(GFX_AUTODETECT_WINDOWED,ECRAN_X,ECRAN_Y,0,0)!=0)ERREUR();
buffer=create_bitmap(ECRAN_X,ECRAN_Y);


//mise en place des ressources
//show_mouse(screen);
fd_menu=load_bitmap("menu1.bmp",NULL);
avion=load_bitmap("avion2.bmp",NULL);
tir1=load_bitmap("tir1.bmp",NULL);
for(i=0;i<4;i++)
{
sprintf(temp,"fond%d.bmp",i);
fond[i]=load_bitmap(temp,NULL);
if(!fond[i])ERREUR();
}
if((fp=fopen("niveau1.txt","r"))!=0)
{

while(!exit)
{
ret_menu=menu(fd_menu,buffer);
switch(ret_menu)
{
case 1:exit=1;
break;

case 2:

//boucle évènementielle du jeu
while(!key[KEY_ESC])
{
while(game_time>0)
{
gestion(&pos_x,&pos_y);
if(key[KEY_SPACE])
{
missile=creation_maillon();
ajout_queue(ancre,missile);
tirer(missile,buffer,pos_x,pos_y);
k=1;
}
--game_time;
}

affichage(fond[0],buffer,avion,pos_x,pos_y,prog,k,tir1);
blit(buffer,screen,0,0,0,0,ECRAN_X,ECRAN_Y);

//variation des vitesse
if(prog>ECRAN_Y)prog=0;
prog+= VIT_FD;

if(missile!=NULL)
missile->emdat.tir_y-=7;

k=0;
}
}
}

}
for(i=0;i<4;i++)destroy_bitmap(fond[i]);
destroy_bitmap(avion);
destroy_bitmap(buffer);
return 0;
}END_OF_MAIN();
#include "biblio.h"

void ajout_queue(t_miss*ancre,t_miss*maillon)
{

t_miss*curseur=ancre;

if((ancre)==NULL)ancre=maillon;
if((ancre)->suiv==NULL)(ancre)->suiv=maillon;
else
{
while(curseur->suiv!=NULL)
{
curseur=curseur->suiv;
}
/*Ici se trouve une erreur sûre, on a tester avec des allegro_message("toto"); afin de chercher et trouver l'erreur*/
curseur->suiv=maillon;
}
}
Merci d'avance pour votre aide