[SDL]Un jeu de dames , le jeu se ferme tout seul

Résolu
gottfried852 Messages postés 2 Date d'inscription vendredi 16 mars 2007 Statut Membre Dernière intervention 8 août 2007 - 8 août 2007 à 13:54
mogwai93 Messages postés 362 Date d'inscription mardi 31 décembre 2002 Statut Membre Dernière intervention 4 novembre 2023 - 8 août 2007 à 21:09
Bonjour,


Je suis en train de faire un jeu de dames en C , avec la SDL.


Mais lorsque je lance mon programme , et que j'entre les coordonnees du pion a deplacer, le programme se ferme automatiquement .


Pour jouer il faut mettre les coordonnees du pion :


0 1 2 3 4 5 6 7


1


2


3


4


5


6


7

puis mettre la direction ou vous voulez faire bouger le pion...

voici le code :
#include <SDL/SDL.h>




#define NOIRS  100
#define BLANCS 200
#define VIDE   440


#define GAUCHE 7000
#define DROITE 8000


#define JOUEUR1 1000
#define JOUEUR2 2000


#define OK     60000
#define ERROR  70000
#define MANGER 80000


 


void blitter(int GrilleJeu[7][7],SDL_Surface* pion_blanc,SDL_Surface *pion_noir,SDL_Surface *Jeu,SDL_Surface *ecran);
int verifier_possibilitees(int joueur,int position_joueurX,int position_joueurY,int Grille[7][7],int mVt);


 


 


void blitter(int GrilleJeu[7][7],SDL_Surface* pion_blanc,SDL_Surface *pion_noir,SDL_Surface *Jeu,SDL_Surface *ecran)
{
     SDL_Rect positionPion;
     positionPion.x = 0;
     positionPion.y = 0;
     for(int j = 0;j<=7;j++)
     {
          for(int i = 0;i<=7;i++)
          {
                 positionPion.x = i * 80;
                 positionPion.y = j * 80;
                 if(GrilleJeu[i][j] == BLANCS)
                    SDL_BlitSurface(pion_blanc,NULL,ecran,&positionPion);
                 else if(GrilleJeu[i][j] == NOIRS)
                    SDL_BlitSurface(pion_noir,NULL,ecran,&positionPion);
                    SDL_Flip(ecran);
          }


     }


}
int verifier_possibilitees(int joueur,int position_joueurX,int position_joueurY,int Grille[7][7],int mVt)
{
   if(joueur == JOUEUR1)
   {
       if((Grille[position_joueurX-1][position_joueurY-1] =! VIDE) &&(mVt == GAUCHE)&&(Grille[position_joueurX-2][position_joueurY-2] =! VIDE))
                return Grille[7][7];
       if((Grille[position_joueurX+1][position_joueurY-1] =! VIDE) && (mVt == DROITE) && (Grille[position_joueurX+2][position_joueurY-2] != VIDE))
                return Grille[7][7];
       if((Grille[position_joueurX+1][position_joueurY-1] == NOIRS) &&(mVt == DROITE)&&(Grille[position_joueurX+2][position_joueurY-2] == VIDE))
       {
                Grille[position_joueurX][position_joueurY] = VIDE;
                Grille[position_joueurX+1][position_joueurY-1] = VIDE;
                Grille[position_joueurX+2][position_joueurY-2]= BLANCS;
                return Grille[7][7];
       }
       if((Grille[position_joueurX-1][position_joueurY-1] == NOIRS) &&(mVt == GAUCHE)&&(Grille[position_joueurX-2][position_joueurY-2] == VIDE))
       {


                Grille[position_joueurX][position_joueurY] = VIDE;
                Grille[position_joueurX-1][position_joueurY-1] = VIDE;
                Grille[position_joueurX-2][position_joueurY-2]= BLANCS;
                return Grille[7][7];
       }
       if((Grille[position_joueurX-1][position_joueurY-1] == VIDE)&&(mVt == GAUCHE))
       {
               Grille[position_joueurX][position_joueurY] = VIDE;
               Grille[position_joueurX-1][position_joueurY-1] = BLANCS;
               return Grille[7][7];
       }
       if((Grille[position_joueurX+1][position_joueurY-1] == VIDE)&&(mVt == DROITE))
       {
               Grille[position_joueurX+1][position_joueurY-1] = BLANCS;
               Grille[position_joueurX][position_joueurY] = VIDE;
               return Grille[7][7];
       }


   }
   if(joueur == JOUEUR2)
   {
       if((Grille[position_joueurX-1][position_joueurY+1] =! VIDE) &&(mVt == GAUCHE)&&(Grille[position_joueurX-2][position_joueurY+2] =! VIDE))
                return Grille[7][7];
       if((Grille[position_joueurX+1][position_joueurY+1] =! VIDE) && (mVt == DROITE) && (Grille[position_joueurX+2][position_joueurY+2] != VIDE))
                return Grille[7][7];
       if((Grille[position_joueurX+1][position_joueurY+1] == BLANCS) &&(mVt == DROITE)&&(Grille[position_joueurX+2][position_joueurY+2] == VIDE))
       {
                Grille[position_joueurX][position_joueurY] = VIDE;
                Grille[position_joueurX+1][position_joueurY+1] = VIDE;
                Grille[position_joueurX+2][position_joueurY-2]= NOIRS;
                return Grille[7][7];
       }
       if((Grille[position_joueurX-1][position_joueurY+1] == BLANCS) &&(mVt == GAUCHE)&&(Grille[position_joueurX-2][position_joueurY+2] == VIDE))
       {
                Grille[position_joueurX-1][position_joueurY+1] = VIDE;
                Grille[position_joueurX][position_joueurY] = VIDE;
                Grille[position_joueurX-2][position_joueurY+2]= NOIRS;
                return Grille[7][7];
       }
       if((Grille[position_joueurX-1][position_joueurY+1] == VIDE)&&(mVt == GAUCHE))
       {
        Grille[position_joueurX][position_joueurY] = VIDE;
         Grille[position_joueurX-1][position_joueurY+1] = NOIRS;
         return Grille[7][7];
       }
       if((Grille[position_joueurX+1][position_joueurY+1] == VIDE)&&(mVt == DROITE))
       {
               Grille[position_joueurX+1][position_joueurY+1] = NOIRS;
               Grille[position_joueurX][position_joueurY] = VIDE;
               return Grille[7][7];
       }
   }


}
int main(int argc,char **argv)
{


   SDL_Init(SDL_INIT_VIDEO);   SDL_Surface *Blancs NULL,*Noirs NULL,*screen = NULL,*carte = NULL;
   SDL_Rect positionGrille;
   positionGrille.x = 0;
   positionGrille.y = 0;
   SDL_Event event;
   SDL_WM_SetCaption("Jeu de dames by gottfried",NULL);
   screen = SDL_SetVideoMode(640,640,32,SDL_HWSURFACE);
   Blancs = SDL_LoadBMP("pions_blancs.bmp");
   Noirs = SDL_LoadBMP("pions_noirs.bmp");
   carte = SDL_LoadBMP("grilleJeuDames.bmp");
   SDL_BlitSurface(carte,NULL,screen,&positionGrille);
   SDL_Flip(screen);
   int grille[7][7] = {VIDE};
   int joueur = JOUEUR1;
   int continuer  = 1;
   int pX,pY;


   ///            MISE   EN   PLACE   DES   PIONS


   grille[1][0] = NOIRS;
   grille[3][0] = NOIRS;
   grille[5][0] = NOIRS;
   grille[7][0] = NOIRS;
   grille[0][1] = NOIRS;
   grille[2][1] = NOIRS;
   grille[4][1] = NOIRS;
   grille[6][1] = NOIRS;
   grille[1][2] = NOIRS;
   grille[3][2] = NOIRS;
   grille[5][2] = NOIRS;
   grille[7][2] = NOIRS;


   grille[0][7] = BLANCS;
   grille[2][7] = BLANCS;
   grille[4][7] = BLANCS;
   grille[6][7] = BLANCS;
   grille[1][6] = BLANCS;
   grille[3][6] = BLANCS;
   grille[5][6] = BLANCS;
   grille[7][6] = BLANCS;
   grille[0][5] = BLANCS;
   grille[2][5] = BLANCS;
   grille[4][5] = BLANCS;
   grille[6][5] = BLANCS;


   blitter(grille,Blancs,Noirs,carte,screen);


   while(continuer)
   {
      debut:;
      SDL_WaitEvent(&event);
      switch(event.type)
      {
          case SDL_KEYDOWN:
          switch(event.key.keysym.sym)
          {
             case SDLK_0:
             pX = 0;
             break;
            case SDLK_1:
             pX = 1;
             break;
             case SDLK_2:
             pX = 2;
             break;
             case SDLK_3:
             pX = 3;
             break;
             case SDLK_4:
             pX = 4;
             break;
             case SDLK_5:
             pX = 5;
             break;
             case SDLK_6:
             pX = 6;
             break;
             case SDLK_7:
             pX = 7;
             break;
          }
          break;
         default :goto debut;
         break;
      }
      debu :;
      SDL_WaitEvent(&event);
      switch(event.type)
      {
                   case SDL_KEYDOWN:
                   switch(event.key.keysym.sym)
                   {
                       case SDLK_0:
                       pY = 0;
                       break;
                       case SDLK_1:
                       pY = 1;
                       break;
                       case SDLK_2:
                       pY = 2;
                       break;
                       case SDLK_3:
                       pY = 3;
                       break;
                       case SDLK_4:
                       pY = 4;
                       break;
                       case SDLK_5:
                       pY = 5;
                       break;
                       case SDLK_6:
                       pY = 6;
                       break;
                       case SDLK_7:
                       pY = 7;
                       break;
                    }
                    break;
                    default :goto debu;
                    break;
      }
      deb:;
      SDL_WaitEvent(&event);
      switch(event.type)
      {
                   case SDL_KEYDOWN:
                   switch(event.key.keysym.sym)
                   {
                         case SDLK_LEFT:
                         grille[7][7] = verifier_possibilitees(joueur,pX,pY,grille,GAUCHE);
                         break;
                         case SDLK_RIGHT:
                         grille[7][7] = verifier_possibilitees(joueur,pX,pY,grille,DROITE);
                         break;
                   }
                   break;
                   default :goto deb;
                   break;
      }
  SDL_BlitSurface(carte,NULL,screen,&positionGrille);
  SDL_Flip(screen);
  blitter(grille,Blancs,Noirs,carte,screen);
  if(joueur == JOUEUR1)
        joueur = JOUEUR2;
  else if(joueur == JOUEUR2)
       joueur = JOUEUR1;


  }  //while
}


Merci d'avance (P.S:pour le goto j'essaierais le corrgier ca plus tard :))

3 réponses

THEwarrior333 Messages postés 192 Date d'inscription vendredi 19 mars 2004 Statut Membre Dernière intervention 30 janvier 2008
8 août 2007 à 16:26
Pas le temps de regarder le code, mais en général quand ça quitte
brusquement comme ça, c'est qu'une erreur de mémoire a été rencontrée.
Compile en mode debug et utilises le debugger.

<endl>Un clavier Azerty en vaut deux

</endl>
3
mogwai93 Messages postés 362 Date d'inscription mardi 31 décembre 2002 Statut Membre Dernière intervention 4 novembre 2023
8 août 2007 à 21:09
comme l'a dit THEwarrior333, erreur de mémoire :
int grille[7][7]
grille[7][7] = verifier_possibilitees

--> revoir la déclaration d'un tableau
int Tableau [N]  <=> N éléments de 0 à N-1
3
gottfried852 Messages postés 2 Date d'inscription vendredi 16 mars 2007 Statut Membre Dernière intervention 8 août 2007
8 août 2007 à 16:31
Merci , je n'ai jamais essayer de me servir du debugger mais je vais me debrouiller
0
Rejoignez-nous