bizonwarrior
Messages postés2Date d'inscriptionmardi 8 mai 2012StatutMembreDernière intervention17 août 2012
-
16 août 2012 à 18:49
bizonwarrior
Messages postés2Date d'inscriptionmardi 8 mai 2012StatutMembreDernière intervention17 août 2012
-
17 août 2012 à 14:01
Help me !!!
ça fais maintenant plusieurs jours que je bloque sur cette erreur.
je suis débutant en C/SDL et je ne trouve pas mon erreur
voici mon main où j'appelle ma fonction jouer :
#include <stdlib.h>
#include <stdio.h>
#include <SDL.h>
#include <SDL_image.h>
#include "constante.h"
#include "jeu.h"
void pause();
int main(int argc, char *argv[])
{
SDL_Surface *ecran NULL, *menu NULL;
SDL_Rect positionMenu;
SDL_Event event;
int continuer = 1;
SDL_Init(SDL_INIT_VIDEO);
SDL_WM_SetIcon(SDL_LoadBMP("avant1.bmp"), NULL); // L'icône doit être chargée avant SDL_SetVideoMode
ecran = SDL_SetVideoMode(LARGEUR_FENETRE, HAUTEUR_FENETRE, 32, SDL_HWSURFACE | SDL_DOUBLEBUF);
SDL_WM_SetCaption("The Adventure of ceanoth", NULL);
menu = SDL_LoadBMP("menu.bmp");
positionMenu.x = 0;
positionMenu.y = 0;
while (continuer)
{
SDL_WaitEvent(&event);
switch(event.type)
{
case SDL_QUIT:
continuer = 0;
break;
case SDL_KEYDOWN:
switch(event.key.keysym.sym)
{
case SDLK_ESCAPE: // Veut arrêter le jeu
continuer = 0;
break;
case SDLK_KP1: // Demande à jouer
jouer(ecran);
break;
}
break;
}
// Effacement de l'écran
SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 0, 0, 0));
SDL_BlitSurface(menu, NULL, ecran, &positionMenu);
SDL_Flip(ecran);
}
SDL_FreeSurface(menu);
SDL_Quit();
return EXIT_SUCCESS;
}
void pause()
{
int continuer = 1;
SDL_Event event;
while (continuer)
{
SDL_WaitEvent(&event);
switch(event.type)
{
case SDL_QUIT:
continuer = 0;
}
}
}
Ma fonction jouer :
#include <stdlib.h>
#include <stdio.h>
#include <SDL.h>
#include <SDL_image.h>
#include "constante.h"
#include "jeu.h"
void jouer(SDL_Surface *ecran)
{
SDL_Surface *ceanoth[16] = {NULL}; // 4 surface pour 4 directions
SDL_Surface *ceanothactuel = NULL;
SDL_Rect positionceanoth;
SDL_Event event;
int continuer 1, i 0, j = 0;
int carte[NB_BLOCS_LARGEUR][NB_BLOCS_HAUTEUR] = {0};
// Chargement des sprites (personnage)
ceanoth[avant1] = SDL_LoadBMP("avant1.bmp");
// ceanoth[avant2] = SDL_LoadBMP("avant2.bmp");
// ceanoth[avant3] = SDL_LoadBMP("avant3.bmp");
// ceanoth[avant4] = SDL_LoadBMP("avant4.bmp");
ceanoth[arriere1] = SDL_LoadBMP("arriere1.bmp");
// ceanoth[arriere2] = SDL_LoadBMP("arriere2.bmp");
// ceanoth[arriere3] = SDL_LoadBMP("arriere3.bmp");
// ceanoth[arriere4] = SDL_LoadBMP("arriere4.bmp");
ceanoth[gauche1] = SDL_LoadBMP("gauche1.bmp");
// ceanoth[gauche2] = SDL_LoadBMP("gauche2.bmp");
// ceanoth[gauche3] = SDL_LoadBMP("gauche3.bmp");
// ceanoth[gauche4] = SDL_LoadBMP("gauche4.bmp");
ceanoth[droite1] = SDL_LoadBMP("droite1.bmp");
// ceanoth[droite2] = SDL_LoadBMP("droite2.bmp");
// ceanoth[droite3] = SDL_LoadBMP("droite3.bmp");
// ceanoth[droite4] = SDL_LoadBMP("droite4.bmp");
ceanothactuel = ceanoth[arriere1]; // ceanoth sera dirigé vers le bas au départ
// Recherche de la position de Mario au départ
for (i = 0 ; i < NB_BLOCS_LARGEUR ; i++)
{
for (j = 0 ; j < NB_BLOCS_HAUTEUR ; j++)
{
if (carte[i][j] == ceanoth) // Si Mario se trouve à cette position sur la carte
{
positionceanoth.x = i;
positionceanoth.y = j;
carte[i][j] = VIDE;
}
}
}
// Activation de la répétition des touches
SDL_EnableKeyRepeat(100, 100);
while (continuer)
{
SDL_WaitEvent(&event);
switch(event.type)
{
case SDL_QUIT:
continuer = 0;
break;
case SDL_KEYDOWN:
switch(event.key.keysym.sym)
{
case SDLK_ESCAPE:
continuer = 0;
break;
case SDLK_UP:
ceanothactuel = ceanoth[avant1];
positionceanoth.y--;
break;
case SDLK_DOWN:
ceanothactuel = ceanoth[arriere1];
positionceanoth.y++;
break;
case SDLK_RIGHT:
ceanothactuel = ceanoth[droite1];
positionceanoth.x++;
break;
case SDLK_LEFT:
ceanothactuel = ceanoth[gauche1];
positionceanoth.x--;
break;
}
break;
}
// Désactivation de la répétition des touches (remise à 0)
SDL_EnableKeyRepeat(0, 0);
// Libération des surfaces chargées
for (i = 0 ; i < 16 ; i++)
SDL_FreeSurface(ceanoth[i]);
}
}
Et lorsque je compile code:block me met un undefined refence to 'jouer(SDL_surface *)'
Je précise, je suis débutant et mon code n'est pas fini des aides, conseilles et autres sont les bienvenus
bizonwarrior
Messages postés2Date d'inscriptionmardi 8 mai 2012StatutMembreDernière intervention17 août 2012 17 août 2012 à 14:01
j'ai fais voir mon code à un ami et on à pu constater que mon 'main' n'étais pas "main.c" mais "main.cpp" donc en recréant correctement le 'main' tout va bien. Par contre aucune idée de pourquoi l'extension n'étais pas bonne.
Merci beaucoup e"n tout cas, j'aurais peut être encore besoin de vous d'ici la fin de mon projet =P
A plus
cptpingu
Messages postés3837Date d'inscriptiondimanche 12 décembre 2004StatutModérateurDernière intervention28 mars 2023123 17 août 2012 à 01:26
Bonjour.
C'est une erreur de compilation ou de link ?
Si c'est une erreur de compilation, vérifie que la fonction "jouer" ait bien la même signature dans le header et le fichier de code (et qu'il soit bien présent dans
le header). Tu peux aussi vérifier que la garde de ton header ne soit pas mal conçue (ça arrive sur une faute de frappe).
Enfin, vérifie que le fichier "jeu.h" soit bien trouvé par ton fichier "main.c".
Si c'est une erreur de link, vérifie que le fichier "jeu.c" soit bien dans la ligne de compilation (si tu ne compiles que le "main.c", c'est sur que ça fonctionnera tout de suite moins bien :p)
________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfoliohttp://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question