Dans le cadre d'un projet sur allegro en c j'ai dû faire un jeu. J'ai décidé de séparer mon code en 1 fichier main, 1 fichier sous-programme.c et 1 fichier sous-programme.c. Lorsque je compile avec tout mon code dans un seul fichier le jeu se lance normalement. Mais lorsque je compile avec mon code dans plusieurs fichiers j'ai uniquement l'erreur suivante: error: ld returned 1 exit status. Je ne sais pas à quoi elle est due, j'espère que vous pourrez m'aider, merci d'avance.
sous-programme.h
#ifndef SOUS_PROGRAMME_H_INCLUDED
#define SOUS_PROGRAMME_H_INCLUDED
#define NIMAGE 5 //image de flappy
#define NENNEMI 5 //image des ennmies immobiles
#define NPAREIL 3 //nbre d ennemei immobiles pareils qui vont apparaitre
#define NSEQ 3 // image des ennemis mobiles
#define NPERSO 3 //nombre d ennemi mobile
#define NMISSILES 20 //image de missiles
///STRUCTURES
typedef struct graphismes
{
BITMAP*buffer;
BITMAP*fond[3]; //décor des 3 niveaux
BITMAP*menu; //pas utiliser encore
BITMAP*image_flappy[NIMAGE]; //images du flappy
BITMAP*image_ennemi[NENNEMI];
BITMAP*missiles_f;
}t_graphismes;
typedef struct personnage
{
int x, y; //position
int dx, dy; //deplacement & vitesse
int tx, ty; //taille
int tmpdx; //(new02/04) ralentir déplacements en x (1 pour ne pas ralentir)
int cptdx;// compteur pour ralentir déplacement
//BITMAP*personnage[N];
int imgcourante; // indice de l'image courante
int tmpimg; // ralentir séquence (image suivante 1 fois sur tmpimg)
int cptimg; // compteur pour ralentir séquence
///NON UTILISE
int type; //numéro de l ennemi ( ici : 0 Dragon 1 Poisson 2 Crabe 3 Abeille 4 Moustique 5 Serpent )
int vie; //de 1 a 3
int vivant; //O ou 1
int tirs; //extension
}t_personnage;
typedef struct missile
{
int x,y; //position
int dx; //deplacement
int tx,ty;
int booleen;
int type; //missile flappy et ennemi
}t_missile;
typedef struct sequence
{
char *nomSource; // nom du fichier image contenant la séquence
int nimg; // nombre d'images dans la séquence
int tx,ty; // largeur et hauteur des images de la séquence
int ncol; // nbr images cotes à cotes horizontalement dans le fichier image
BITMAP **img; // tableau de pointeurs pour indiquer les images
}t_sequence;
t_sequence tabSequences[NSEQ] =
{
// nomSource , nimg, tx, ty, ncol
{ "chauve_souris.bmp" , 1, 60, 82, 1},
{ "ennemiViolet.bmp" , 1, 50, 45, 1},
{ "ennemiRouge.bmp" , 1, 50, 49, 1},
};
void charger_bitmaps(t_graphismes *gfn, t_personnage *mesActeurs[NPERSO]);
void deplacement_fond (t_graphismes*gfn, int *screenx, int *screeny);
void creation_flappy (t_personnage *flappy);
void deplacement_flappy(t_graphismes*gfn, t_personnage*flappy);
t_personnage *creerActeur(int type, int x, int y, int dx, int tmpdx, int tmpimg);
void remplirTabActeurs(t_personnage * tab[NPERSO]);
void actualiserActeur(t_personnage *acteur, int screenx, int screeny);
void actualiserTabActeurs(t_personnage * tab[NPERSO],int screenx, int screeny);
void dessinerActeur(t_graphismes*gfn, t_personnage *acteur, int screenx);
void dessinerTabActeurs(t_graphismes*gfn,t_personnage * tab[NPERSO], int screenx);
void chargerSequence(t_sequence * seq);
void chargerTabSequences();
void creation_ennemi(t_personnage ennemi[NPAREIL][NENNEMI]);
void affichage_ennemi(t_graphismes*gfn, t_personnage ennemi[NPAREIL][NENNEMI]);
void deplacement_ennemi(t_graphismes*gfn, t_personnage ennemi[NPAREIL][NENNEMI],int screenx);
void creation_missileF (t_graphismes*gfn, t_personnage *flappy, t_missile *missiles_flappy[NMISSILES]);
t_missile *actualiser_MissilesF(t_missile *M);
void tirs (t_missile *missiles_flappy[NMISSILES], t_personnage *flappy);
void affichage_missileF (t_graphismes*gfn, t_missile *missiles_flappy[NMISSILES], t_personnage *flappy);
char pointDansRectangle(int px, int py, int x1, int y1, int x2, int y2);
void collision(t_graphismes*gfn, t_personnage flappy,t_personnage ennemi[NPAREIL][NENNEMI], t_personnage * tab[NPERSO],int screenx,int action);
int menu_jeu();
void barre_de_vie(t_personnage flappy,t_graphismes*gfn);
#endif // SOUS_PROGRAMME_H_INCLUDED
sous-programme.c
#include <stdio.h>
#include <stdlib.h>
#include <stdio.h>
#include <stdlib.h>
#include <allegro.h>
#include <time.h>
#include "sous_programme.h"
#define NIMAGE 5 //image de flappy
#define NENNEMI 5 //image des ennmies immobiles
#define NPAREIL 3 //nbre d ennemei immobiles pareils qui vont apparaitre
#define NSEQ 3 // image des ennemis mobiles
#define NPERSO 3 //nombre d ennemi mobile
#define NMISSILES 20 //image de missiles
///SOUS - PROGRAMMES
/* Nom : charger_bitmaps
Role : charger toutes les bitmap
Entree : gfn
Sortie : gfn
Auteur : Flora CARIDI
Dernière modification : 08/04/2019
*/
void charger_bitmaps(t_graphismes *gfn, t_personnage *mesActeurs[NPERSO])
{
int i;
char nomfichier[100];
char nomfichierE[100];
//Création du buffer d'affichage
gfn->buffer = create_bitmap(SCREEN_W, SCREEN_H);
clear_bitmap(gfn->buffer);
//Chargement des images de fond
gfn->fond[0] = load_bitmap("jour.bmp",NULL);
//gfn->fond[1] = load_bitmap("soir.bmp",NULL); mettre une boucle for
//gfn->fond[2] = load_bitmap("nuit.bmp",NULL);
if(!gfn->fond[0]){// || !gfn->fond[1] || !gfn->fond[2]){
allegro_message("probleme mode graphique : fond");
allegro_exit();
exit(EXIT_FAILURE);
}
...
.... suite des sous-programmes
main.c
#include <stdio.h>
#include <stdlib.h>
#include <stdio.h>
#include <stdlib.h>
#include <allegro.h>
#include <time.h>
#include "sous_programme.h"///inclusion des prototypes des sous-programmes
#define NIMAGE 5 //image de flappy
#define NENNEMI 5 //image des ennmies immobiles
#define NPAREIL 3 //nbre d ennemei immobiles pareils qui vont apparaitre
#define NSEQ 3 // image des ennemis mobiles
#define NPERSO 3 //nombre d ennemi mobile
#define NMISSILES 20 //image de missiles
///MAIN
int main()
{
allegro_init();
install_keyboard();
install_mouse();
set_color_depth(desktop_color_depth());//on fixe le mode couleur
if (set_gfx_mode(GFX_AUTODETECT_WINDOWED,1024,700,0,0)!=0)
{
allegro_message("probleme gfx mode : screen");
allegro_exit();
exit(EXIT_FAILURE);
}
///Declaration
t_personnage flappy;
t_personnage *mesActeurs[NPERSO];
t_missile *missiles_flappy[NMISSILES];
t_personnage ennemi[NPAREIL][NENNEMI];
t_graphismes *gfn; //remplacer toutes les declarations de BITMAP*
gfn =(t_graphismes*)malloc(sizeof(t_graphismes));
charger_bitmaps(gfn, mesActeurs);
//int niveau; //0, 1, 2 : jour, soir, nuit utile pour fond[niveau]
///Initialisation
int action=0;
int nbvie=3;
//FOND DEFILANT
int screenx = 0;
int screeny = 0;
int OLD = 0;
creation_flappy(&flappy);
creation_ennemi(ennemi);//ENNEMI IMMOBILE
creation_missileF(gfn, &flappy, missiles_flappy);
/// BOUCLE DE JEU
while(!key[KEY_ESC])
{
clear_bitmap(gfn->buffer);
///Affichage du fond qui defile
deplacement_fond(gfn, &screenx, &screeny);
///Flappy
deplacement_flappy(gfn, &flappy);
///Ennemi
//Mobile
actualiserTabActeurs(mesActeurs, screenx, screeny);//determiner nouvelle position
dessinerTabActeurs(gfn, mesActeurs, screenx);//affichage nex position sur buffer
//Immobile
deplacement_ennemi(gfn, ennemi, screenx);
affichage_ennemi(gfn, ennemi);
///Missiles
//Flappy
if((key[KEY_SPACE])&&(OLD==0)){
tirs(missiles_flappy, &flappy);
}
int i;
for (i=0;i<NMISSILES;i++){
if(missiles_flappy[i]->booleen){//si le missile est actif
missiles_flappy[i] = actualiser_MissilesF(missiles_flappy[i]);
}
}
affichage_missileF(gfn, missiles_flappy,&flappy);
//Ennemis (missiles) -> A completer
collision(gfn, flappy, ennemi, mesActeurs,screenx,action);
if (action==1)
{
flappy.vie=flappy.vie--;
}
barre_de_vie(flappy,gfn);
///Affichage du contenu du buffer dans l’écran
blit(gfn->buffer, screen , 0, 0, 0, 0, SCREEN_W, SCREEN_H);
OLD = key[KEY_SPACE];
rest(20);
}
return 0;
}END_OF_MAIN()
error: ld returned 1 exit status
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.