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();Merci d'avance pour votre aide#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;
}
}
Partager