[c] prog jeu

Bonjour,
voici mon code 'puissance 4' en c , le problème c'est que quand je donne les chiffres de 1 à 6 ça va mais dés que je met 0, il s'arrête et ne marche plus!!

on peut m'aider à résoudre le problème?

#include <conio.h>
#include <stdio.h>
 
void dessine_grille(char grille[7][6])
{ int i,j;
 
         for(j=5;j>=0;j--)
         {
            for(i=0;i<7;i++)
            {
               printf("%c",grille[i][j]);
            }
            printf("\n");
            ;
         }
         printf("\n\n\n");
}
 
int fonctionquifaitgagnerjoueur1 (char grille[7][6])
        { int i,j,gagne;
 
                                for(i=0;i<4;i++)
            {
               for(j=0;j<6;j++)
               {
                  if(grille[i][j]=='x' && grille[i+1][j]=='x' && grille[i+2][j]=='x' && grille[i+3][j]=='x')
                     gagne=1;
               }
            }
             /*On vérifie maintenant verticalement pour savoir si le joueur a gagné dc si 4 cases verticales se suivent et valent 1*/
            for(i=0;i<7;i++)
            {
               for(j=0;j<3;j++)
               {
                  if(grille[i][j]=='x' && grille[i][j+1]=='x' && grille[i][j+2]=='x' && grille[i][j+3]=='x')
                     gagne=1;
               }
            }
 
         /*Vérification diagonale bas gauche vers haut droit*/
            for(i=0;i<7;i++)
            {
               for(j=0;j<6;j++)
               {
                  if(grille[i][j]=='x' && grille[i+1][j+1]=='x' && grille[i+2][j+2]=='x' && grille[i+3][j+3]=='x')
                     gagne=1;
               }
            }
         /*Vérification diagonale bas droite vers haut gauche*/
            for(j=0;j<6;j++)
            {
               for(i=6;i>=0;i--)
               {
                  if(grille[i][j]=='x' && grille[i-1][j+1]=='x' && grille[i-2][j+2]=='x' && grille[i-3][j+3]=='x')
                     gagne=1;
               }
            }
 
     return(gagne);
     }
 
int fonctionquifaitgagnerjoueur2 (char grille[7][6])
        { int i,j,gagne;
 
                                for(i=0;i<4;i++)
            {
               for(j=0;j<6;j++)
               {
                  if(grille[i][j]=='o' && grille[i+1][j]=='o' && grille[i+2][j]=='o' && grille[i+3][j]=='o')
                     gagne=2;
               }
            }
             /*On vérifie maintenant verticalement pour savoir si le joueur a gagné dc si 4 cases verticales se suivent et valent 1*/
            for(i=0;i<7;i++)
            {
               for(j=0;j<3;j++)
               {
                  if(grille[i][j]=='o' && grille[i][j+1]=='o' && grille[i][j+2]=='o' && grille[i][j+3]=='o')
                     gagne=2;
               }
            }
 
         /*Vérification diagonale bas gauche vers haut droit*/
            for(i=0;i<7;i++)
            {
               for(j=0;j<6;j++)
               {
                  if(grille[i][j]=='o' && grille[i+1][j+1]=='o' && grille[i+2][j+2]=='o' && grille[i+3][j+3]=='o')
                     gagne=2;
               }
            }
         /*Vérification diagonale bas droite vers haut gauche*/
            for(j=0;j<6;j++)
            {
               for(i=6;i>=0;i--)
               {
                  if(grille[i][j]=='o' && grille[i-1][j+1]=='o' && grille[i-2][j+2]=='o' && grille[i-3][j+3]=='o')
                     gagne=2;
               }
            }
 
     return(gagne);
     }
 
 
 
void main (void)
{
        char grille[7][6];
        int nb_p,i,j,x,c,n,ligne1,ligne2,col0,col1,col2,col3,col4,col5,col6,gagne,reponse;
        char nomjoueur1 [100],nomjoueur2[100],temp;
 
 
 
do //do d'une super boucle
        {
        // initialisation des variables
 
                nb_p=0 ;
      gagne=0;
                n=0;
                c=0;
      col1=0;
      col2=0;
      col3=0;
      col4=0;
      col5=0;
      col6=0;
 
 
   // saisit du nom des joueurs
                printf ("nom joueur 1\n");
                scanf ("%s",&nomjoueur1);
                scanf ("%c",&temp);
                printf ("nom joueur 2\n");
                scanf ("%s",&nomjoueur2);
                scanf ("%c",&temp);
 
   //initialisation du tableau
                for (i=0;i<7;i++)
                {
                        for (j=0;j<6;j++)
                        grille[i][j]='t';
                }
 
   dessine_grille( grille);
 
     do
     {
      //premier joueur joue
        do
        {
         printf ("%s dans quel colonne desirez vous jouer\n", nomjoueur1);
         scanf ("%d",&ligne1);
 
 
         /*Test sur la hauteur des colonnes, si elle sont remplies ou non*/
         if((ligne1==0 && col0>5)|| (ligne1==1 && col1>5) || (ligne1==2 && col2>5) || (ligne1==3 && col3>5) || (ligne1==4 && col4>5) || (ligne1==5 && col5>5) || (ligne1==6 && col6>5))
               {
                  printf("la colonne %d est pleine, %s donner un numero de colone autre que %d \n",ligne1,nomjoueur1,ligne1);
                  ligne1 = -1000; //donne un chiffre de ligne négative pour lui faire refaire la boucle
               }
 
        }
            while (ligne1<0 || ligne1>7);
 
//place pion
                                if(ligne1==0)
               grille[ligne1][col0]='x';
            if(ligne1==1)
               grille[ligne1][col1]='x';
            if(ligne1==2)
               grille[ligne1][col2]='x';
            if(ligne1==3)
               grille[ligne1][col3]='x';
            if(ligne1==4)
               grille[ligne1][col4]='x';
            if(ligne1==5)
               grille[ligne1][col5]='x';
            if(ligne1==6)
               grille[ligne1][col6]='x';
 
 
// test pour voir si le joueur a gagné
fonctionquifaitgagnerjoueur1 (grille);
 
 
dessine_grille(grille);
 
//Désigne une ligne deja prise par un pion deja placé
                                if(ligne1==0)
               grille[ligne1][col0++];
            if(ligne1==1)
               grille[ligne1][col1++];
            if(ligne1==2)
               grille[ligne1][col2++];
            if(ligne1==3)
               grille[ligne1][col3++];
            if(ligne1==4)
               grille[ligne1][col4++];
            if(ligne1==5)
               grille[ligne1][col5++];
            if(ligne1==6)
               grille[ligne1][col6++];
 
if(gagne==1)
            {
               printf("C'est %s qui a gagne la partie !!!\n \n",nomjoueur1);
               printf ("Par contre toi, %s tu est un loozer",nomjoueur2);
               break;
            }
//début second joueur
 
        do
        {
         printf ("%s dans quel colonne desirez vous jouer\n", nomjoueur2);
         scanf ("%d",&ligne2);
         scanf ("%c",&temp);
 
         /*Test sur la hauteur des colonnes, si elle sont remplies ou non*/
         if((ligne2==0 && col0>5)|| (ligne2==1 && col1>5) || (ligne2==2 && col2>5) || (ligne2==3 && col3>5) || (ligne2==4 && col4>5) || (ligne2==5 && col5>5) || (ligne2==6 && col6>5))
               {
                  printf("la colonne %d est pleine, %s donner un numero de colone autre que %d \n",ligne2,nomjoueur2,ligne2);
                  ligne2 = -1000; //donne un chiffre de ligne négative pour lui faire refaire la boucle
               }
 
        }
            while ((ligne2<0) || (ligne2>7));
 
//place pion
                                if(ligne2==0)
               grille[ligne2][col0]='o';
            if(ligne2==1)
               grille[ligne2][col1]='o';
            if(ligne2==2)
               grille[ligne2][col2]='o';
            if(ligne2==3)
               grille[ligne2][col3]='o';
            if(ligne2==4)
               grille[ligne2][col4]='o';
            if(ligne2==5)
               grille[ligne2][col5]='o';
            if(ligne2==6)
               grille[ligne2][col6]='o';
 
 
// test pour voir si le joueur a gagné
fonctionquifaitgagnerjoueur2 (grille);
 
dessine_grille(grille);
 
//Désigne une ligne deja prise par un pion deja placé
                                if(ligne2==0)
               grille[ligne2][col0++];
            if(ligne2==1)
               grille[ligne2][col1++];
            if(ligne2==2)
               grille[ligne2][col2++];
            if(ligne2==3)
               grille[ligne2][col3++];
            if(ligne2==4)
               grille[ligne2][col4++];
            if(ligne2==5)
               grille[ligne2][col5++];
            if(ligne2==6)
               grille[ligne2][col6++];
 
if(gagne==2)
            {
               printf("C'est %s qui a gagne la partie !!!\n \n",nomjoueur2);
               printf ("Par contre toi, %s tu est un loozer",nomjoueur1);
               break;
            }
 
}
while (gagne!=1 || gagne!=2);
 
if (gagne==2)
                                { printf("Tu veut ta revanche %s oui('o') ou non('n') ???\n ",nomjoueur1);
              scanf ("%s",&reponse);
            }
else
            { printf("Tu veut ta revanche %s oui('o') ou non('n') ???\n ",nomjoueur2);
              scanf ("%s",&reponse);
            }
}
while (reponse!='n');
 
getch ();
}
Configuration: Windows XP
Firefox 2.0.0.11

4 réponses

  • Votes
  • Date
  • Date décroissante
  1. Heu... Tu crois vraiment qu'on va examiner tout ton code ?

    Essayes d'isoler un peu l'erreur.
    1. Slt,

      Tu n'aurais pas plutot un code erreur ou un truc du genre a nous donner, le ça ne marche pas est vague...
      1. j'ai un warning:

        C:\Program Files\Microsoft Visual Studio\MyProjects\nov\037.c(110) : warning C4101: 'x' : unreferenced local variable

        je nevois pas où est l'erreur, quand j'éxecute ça marche sans problème jusqu'à que je rentre pour le numéro de ligne le 0!
        1. bonjour

          j'ai beau chercher je ne trouve pas! on ne peut vraiment pas m'aider??

          merci