Bonjour,
j'ai besoin de votre aide avec un problème auquel je suis entrain de confronté
j'ai écrit un petit programme pour un menu de jeu
#include <stdlib.h>
#include <stdio.h>
#include <SDL/SDL.h>
#include <SDL/SDL_image.h>
#include <SDL/SDL_mixer.h>
int main(int argc, char *argv[])
{
int i=0;
SDL_Surface *ecran =NULL,*background=NULL, *imageDeFond=NULL,*bout1=NULL,*bout2=NULL,*bout3=NULL;
SDL_Rect positionFond,positionbackground;
SDL_Rect posib1,posib2,posib3;
SDL_Rect posicurseur;
SDL_Surface *SDL_GetVideoSurface(void);
positionFond.x =0;
positionFond.y =0;
posib1.x=427;
posib1.y=214;
posib2.x=437;
posib2.y=420;
posib3.x=383;
posib3.y=315;
SDL_Init(SDL_INIT_EVERYTHING);
ecran = SDL_SetVideoMode(720,720,32,SDL_HWSURFACE);
SDL_WM_SetCaption("Chargement d'images en SDL", NULL);
imageDeFond = IMG_Load("M.jpg");
bout1=IMG_Load("play.jpg");
bout2=IMG_Load("exit.jpg");
bout3=IMG_Load("option.jpg");
SDL_BlitSurface(imageDeFond,NULL,ecran,&positionFond);
SDL_BlitSurface(bout1,NULL,imageDeFond,&posib1);
SDL_BlitSurface(bout2,NULL,imageDeFond,&posib2);
SDL_BlitSurface(bout3,NULL,imageDeFond,&posib3);
SDL_Flip(ecran);
fprintf(stdout,"hahyvggiiyfytfyt");
//musique
if(Mix_OpenAudio(44100, MIX_DEFAULT_FORMAT, MIX_DEFAULT_CHANNELS, 1024) == -1)
{
fprintf(stderr,"%s", Mix_GetError());
}
Mix_Music *musique;
musique = Mix_LoadMUS("G3.mp3");
Mix_PlayMusic(musique,-1);
Mix_VolumeMusic(MIX_MAX_VOLUME / 1);//MIX_MAX_VOLUME se defere de chaque pc (peut etre 1 ou 2 selement)
Mix_Music *MB;//pointeur music boutton(chunk se defere de formart) chunk pour format wav ; Music pour format mp3
MB = Mix_LoadMUS("Click.mp3");// clique de bouton
SDL_Event event;
int continuer = 1;
while (continuer)
{
SDL_WaitEvent(&event);
switch(event.type)
{
case SDL_QUIT:
continuer = 0;
break;
case SDL_MOUSEMOTION:
{
posicurseur.x=event.motion.x;
posicurseur.y=event.motion.y;// calculer les coord du curseur
while((posicurseur.x>=posib1.x && posicurseur.x<=posib1.x+bout1->w) &&(posicurseur.y>=posib1.y &&posicurseur.y<=posib1.y+bout1->h)){ SDL_BlitSurface(imageDeFond,NULL,ecran,&positionFond);//l play tech3el
SDL_Flip(ecran);//mise a jours
SDL_Delay(400);//tech3el w tetfa w tehseb bel ms ;ex: SDL_Delay(ms)
Mix_PlayMusic(MB,-1);} //les cordonnee win bch tenzel b souris(cordonnee mtaa bouton play)
if((posicurseur.x>=posib2.x && posicurseur.x<=posib2.x+bout2->w) &&(posicurseur.y>=posib2.y &&posicurseur.y<=posib2.y+bout2->h)){ SDL_BlitSurface(imageDeFond,NULL,ecran,&positionFond);//settings tech3el
SDL_Flip(ecran);//mise a jours
SDL_Delay(400);
Mix_PlayMusic(MB,-1);//music bref ta3 click ta3 bouton
}
if((posicurseur.x>=posib3.x && posicurseur.x<=posib3.x+bout3->w) &&(posicurseur.y>=posib3.y &&posicurseur.y<=posib3.y+bout3->h)){ SDL_BlitSurface(imageDeFond,NULL,ecran,&positionFond);//exsit tech3el
SDL_Flip(ecran);//mise a jours
SDL_Delay(400);
Mix_PlayMusic(MB,-1);
continuer = 0; }
break;
}
case SDL_MOUSEBUTTONDOWN:
{
if(event.button.button==SDL_BUTTON_LEFT)
{ if((posicurseur.x>=posib1.x && posicurseur.x<=posib1.x+bout1->w) &&(posicurseur.y>=posib1.y &&posicurseur.y<=posib1.y+bout1->h))//les cordonnee win bch tenzel b souris(cordonnee mtaa bouton play)
{ SDL_BlitSurface(imageDeFond,NULL,ecran,&positionFond);//l play tech3el
SDL_Flip(ecran);//mise a jours
SDL_Delay(400);//tech3el w tetfa w tehseb bel ms ;ex: SDL_Delay(ms)
Mix_PlayMusic(MB,-1);
SDL_Surface *SDL_GetVideoSurface(void);
positionbackground.x=0;
positionbackground.y=0;
background = IMG_Load("screen.jpg");//t3ayet lel image ta3 background mangir la bouton la chay
}
break;
}
}
case SDL_KEYDOWN:
switch(event.key.keysym.sym)// win teta9ra l click
{
case SDLK_RETURN: //bouton entrer
if (i==1)
{
}
else if (i==2)
{
}
else if (i==3)
{
}
else if (i==4)
{
continuer=0;
};
break;
case SDLK_DOWN:
i++;
if(i==5)
{
i=1;
}
if(i==1)
{
SDL_BlitSurface(bout1,NULL, ecran, &posib1);
SDL_Flip(ecran);
SDL_Delay(500);
Mix_PlayMusic(MB,-1);
}
if(i==2)
{
SDL_BlitSurface(bout2,NULL, ecran, &posib2);
SDL_Flip(ecran);
SDL_Delay(500);
Mix_PlayMusic(MB,-1);
}
if(i==3)
{SDL_BlitSurface(bout3,NULL, ecran, &posib3);
SDL_Flip(ecran);
SDL_Delay(500);
Mix_PlayMusic(MB,-1);
}
break;
}
}
}
SDL_FreeSurface(imageDeFond);
SDL_FreeSurface(background);
SDL_FreeSurface(bout1);
SDL_FreeSurface(bout2);
SDL_FreeSurface(bout3);
SDL_FreeSurface(ecran);
Mix_FreeMusic(musique);
Mix_FreeMusic(MB);
Mix_CloseAudio();
SDL_Quit();
return EXIT_SUCCESS;
}
mon problème est lorsque j’exécute le programme une erreur de segmentation s'affiche
Erreur de segmentation (core dumped)
Configuration: Linux / Firefox 73.0