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

Signaler
Messages postés
2
Date d'inscription
vendredi 16 mars 2007
Statut
Membre
Dernière intervention
8 août 2007
-
Messages postés
361
Date d'inscription
mardi 31 décembre 2002
Statut
Membre
Dernière intervention
19 mars 2015
-
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

Messages postés
192
Date d'inscription
vendredi 19 mars 2004
Statut
Membre
Dernière intervention
30 janvier 2008

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>
Messages postés
361
Date d'inscription
mardi 31 décembre 2002
Statut
Membre
Dernière intervention
19 mars 2015

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
Messages postés
2
Date d'inscription
vendredi 16 mars 2007
Statut
Membre
Dernière intervention
8 août 2007

Merci , je n'ai jamais essayer de me servir du debugger mais je vais me debrouiller