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

gottfried852 2 Messages postés vendredi 16 mars 2007Date d'inscription 8 août 2007 Dernière intervention - 8 août 2007 à 13:54 - Dernière réponse : mogwai93 361 Messages postés mardi 31 décembre 2002Date d'inscription 19 mars 2015 Dernière intervention
- 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 :))
Afficher la suite 

Votre réponse

3 réponses

Meilleure réponse
THEwarrior333 192 Messages postés vendredi 19 mars 2004Date d'inscription 30 janvier 2008 Dernière intervention - 8 août 2007 à 16:26
3
Merci
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>

Merci THEwarrior333 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 93 internautes ce mois-ci

Commenter la réponse de THEwarrior333
Meilleure réponse
mogwai93 361 Messages postés mardi 31 décembre 2002Date d'inscription 19 mars 2015 Dernière intervention - 8 août 2007 à 21:09
3
Merci
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

Merci mogwai93 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 93 internautes ce mois-ci

Commenter la réponse de mogwai93
gottfried852 2 Messages postés vendredi 16 mars 2007Date d'inscription 8 août 2007 Dernière intervention - 8 août 2007 à 16:31
0
Merci
Merci , je n'ai jamais essayer de me servir du debugger mais je vais me debrouiller
Commenter la réponse de gottfried852

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.