begin process at 2012 05 29 21:44:42
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Divers

 > 

Débutant(e)

 > 

Problème puissance 4


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Problème puissance 4

jeudi 15 décembre 2011 à 16:30:59 | Problème puissance 4

tlmvpsp

Voila, mon problème se situe au niveau du "check vertical" à savoir que mon programme ne comprend pas lorsque un joueur gagne en vertical.
Je n'arrive pas à voir où est le problème, s'il se situe dans ma fonction "checkvertical" ou bien dans le main??
Merci de bien vouloir éclairer ma lanterne...


Le programme:



#include <stdio.h>
#include <stdlib.h>


#define LIGNES 6
#define COLONNES 7

////////////////////////////// AFFICHER //////////////////////////////

void afficherPlateau (char plateauJeu [LIGNES][COLONNES]){

int i, j;

printf("\n=============================\n");
printf("| 1 | 2 | 3 | 4 | 5 | 6 | 7 |\n");
printf("=============================\n");


for(i=0 ; i<LIGNES ; i++){

printf("-----------------------------\n");
printf("|");

for(j=0 ; j<COLONNES ; j++){

printf(" %c |", plateauJeu [i][j]);

}

printf("\n");

}

printf("-----------------------------\n\n");
}


////////////////////////////// TEST PLATEAU PLEIN //////////////////////////////


int checkplateau ( int plateau [LIGNES][COLONNES]){

int i, j;

for(i=0 ; i<LIGNES ; i++){

for(j=0 ; j<COLONNES ; j++){

if( plateau [i][j] == 0){

return 0;

}
}
}

return 1;
}


////////////////////////////// TEST PLAYER VALIDE //////////////////////////////

int checkplayer (int player){

if(player == 1 || player == 2){

return 1;

}

return 0;
}



////////////////////////////// TEST LIGNES VALIDE //////////////////////////////

int checklineok (joueur){

if(joueur >= 0 && joueur<LIGNES){

return 1;

}

return 0;

}


////////////////////////////// TEST COLONNE VALIDE //////////////////////////////

int checkcolumnok (joueur){

if(joueur >= 0 && joueur<=COLONNES){

return 1;

}

return 0;

}


////////////////////////////// TEST COLONNES PLEINE //////////////////////////////

int testColonne (int plateau [LIGNES][COLONNES], int joueur, int *colonne){

if(checkcolumnok (joueur)){

if(*colonne<COLONNES){

*colonne ++;
return 1;

}

}

return 0;
}



////////////////////////////// REMPLISSAGE JOUEUR 1 //////////////////////////////

void remplissagePlateau (char plateauJeu [LIGNES][COLONNES], int plateau [LIGNES][COLONNES], int joueur, int player){

int i=LIGNES-1;
int n=0;

while(n==0 && i>=0){

if(plateau [i][joueur-1] == 1 || plateau [i][joueur-1] == 2){

i--;

}

else if (plateau [i][joueur-1] == 0){

if(player == 1){

plateauJeu [i][joueur-1] = 'O';
plateau [i][joueur-1] = player;
n++;

}

else if(player == 2){

plateauJeu [i][joueur-1] = 'X';
plateau [i][joueur-1] = 2;
n++;

}
}
}
}





////////////////////////////// CHECK VERTICALES JOUEUR //////////////////////////////

int checkVerticale (int plateau [LIGNES][COLONNES], int player){

int i,j;
for(i=0;i<7;i++)
{
for(j=0;j<3;j++)
{
if(plateau[i][j]==1 && plateau[i][j+1]==1 && plateau[i][j+2]==1 && plateau[i][j+3]==1){
return 1;
}
else {
return 0;
}
}
}
}






////////////////////////////// CHECK HORIZONTALES JOUEUR //////////////////////////////

int checkHorizontale (int plateau [LIGNES][COLONNES], int player){

int i,j;
int compt;

for(i=0 ; i<LIGNES ; i++){

compt = 0;

for(j=0 ; j<COLONNES ; j++){

if(plateau [i][j] == player){

compt ++;

}



else if(compt >= 4){

return 1;

}

else {

compt = 0;

}
}

}

return 0;
}


////////////////////////////// RETOURNE PLAYER DANS LA CASE JOUEE //////////////////////////////

int case_egale_player (int plateau [LIGNES][COLONNES], int player, int joueur){

int i;

if(checklineok (joueur) && checkcolumnok (joueur)){

for(i= LIGNES-1 ; i>=0 ; i--){

if (checkplayer (player)){

if(plateau [i][joueur] == 0){

plateau [i][joueur] = player;

return player;

}
}

}
}

return 0;
}







////////////////////////////// CLEAR SCREEN //////////////////////////////

void ClearScreen()
{
int n;
for (n = 0; n < 10; n++)
printf( "\n\n\n\n\n\n\n\n\n\n" );
}



////////////////////////////// MAIN //////////////////////////////

int main (void) {

char plateauJeu [LIGNES][COLONNES] = {" " , " " , " " , " " , " " , " "};
int plateau [LIGNES][COLONNES] = {{0,0,0,0,0,0,0},{0,0,0,0,0,0,0},{0,0,0,0,0,0,0},{0,0,0,0,0,0,0},{0,0,0,0,0,0,0},{0,0,0,0,0,0,0}};
int joueur, player = 1;
//char nom1 [20], nom2 [20];
int colonne = 0;

printf("Bienvenue dans le jeu du PUISSANCE 4 !\n\n");

/*printf("(Pour afficher l'aide tapez << ? >> )\n\n");

printf("Joueur 1, choississez votre nom : ");
scanf("%s", &nom1);

printf("Joueur 2, choississez votre nom : ");
scanf("%s", &nom2);*/

afficherPlateau(plateauJeu);


while(checkplateau(plateau) != 1){

printf("Joueur %d , choississez une colonne : ", player);
scanf("%d", &joueur);

if(checkcolumnok(joueur) && testColonne(plateau, joueur, &colonne) ){

remplissagePlateau(plateauJeu, plateau, joueur, player);
afficherPlateau(plateauJeu);

if(checkHorizontale(plateau, player) || checkVerticale(plateau, player)){

printf("Joueur %d gagne!", player);
return 0;

}
}

while(checkcolumnok(joueur) == 0){

printf("Le numero de cette colonne n'est pas valide, veuillez rejouer : ");
scanf("%d", joueur);

if(checkcolumnok(joueur) && testColonne(plateau, joueur, &colonne) ){

remplissagePlateau(plateauJeu, plateau, joueur, player);
afficherPlateau(plateauJeu);

if(checkHorizontale(plateau, player) || checkVerticale(plateau, player)){

printf("Joueur %d gagne!", player);
return 0;

}
}
}

while(testColonne(plateau, joueur, &colonne) == 0){

printf(" Cette colonne est deja pleine, veuillez rejouer : ");
scanf("%d", joueur);

if(checkcolumnok(joueur) && testColonne(plateau, joueur, &colonne) ){

remplissagePlateau(plateauJeu, plateau, joueur, player);
afficherPlateau(plateauJeu);

if(checkHorizontale(plateau, player) || checkVerticale(plateau, player)){

printf("Joueur %d gagne!", player);
return 0;

}
}

}


player ++;

if (checkplayer(player) == 0){
player=1;

}
}


/*while(k<1000){

printf("%s , choississez une colonne : ", nom1);
scanf("%d", &joueur1);

printf("dfasdv : %d\n", testColonne(plateau, joueur1));


if(testColonne(plateau, joueur1) == 0){

remplissagePlateau1 (plateauJeu, plateau, joueur1);
afficherPlateau(plateauJeu);


if(checkHorizontale1(plateau)==1 || checkVerticale1(plateau)==1){

printf("%s gagne!\n", nom1);

return 0;
}

}


else if(testColonne(plateau, joueur1) == 1){

if(checkHorizontale1(plateau)==1 || checkVerticale1(plateau)==1){

printf("%s gagne!\n", nom1);

return 0;
}

else{

printf("Cette colonne est deja pleine. Veuillez re-jouer : \n");
printf("%s , choississez une colonne : ", nom1);
scanf("%d", &joueur1);
remplissagePlateau1 (plateauJeu, plateau, joueur1);
afficherPlateau(plateauJeu);


}

}

printf("%s , choississez une colonne : ", nom2);
scanf("%d", &joueur2);

printf("dfasdv : %d\n", testColonne(plateau, joueur2));



if(testColonne(plateau, joueur2) == 0){

remplissagePlateau2 (plateauJeu, plateau, joueur2);
afficherPlateau(plateauJeu);
checkHorizontale2(plateau);
checkVerticale2(plateau);

if(checkHorizontale2(plateau)==1 || checkVerticale2(plateau)==1){

printf("%s gagne!\n", nom2);

return 0;
}


}

else if(testColonne(plateau, joueur2) == 1){

if(checkHorizontale2(plateau)==1 || checkVerticale1(plateau)==1){

printf("%s gagne!\n", nom2);

return 0;
}

else{

printf("Cette colonne est deja pleine. Veuillez re-jouer : \n");
printf("%s , choississez une colonne : ", nom2);
scanf("%d", &joueur2);
remplissagePlateau2 (plateauJeu, plateau, joueur2);
afficherPlateau(plateauJeu);
checkHorizontale2(plateau);
checkVerticale2(plateau);

}

}



k++;*/



return 0;

}

jeudi 15 décembre 2011 à 16:43:56 | Re : Problème puissance 4

buno

Administrateur CodeS-SourceS
Bien le bonjour à toi aussi!!
Alors, 1èrement, ça ne doit pas compiler.. checklineok et checkcolumnok: il manque le type de a variable "joueur".
Ensuite, merci d'utiliser les balises "code". C'est la 3e icone en partant de la droite, juste au-dessus de la zone de texte.
Enfin, je penche pour un problème dans la méthode checkVertical. Pourquoi ne pas l'avoir bâti suivant le même modèle de checkHorizontal? Par exemple, tu n'utilise pas le paramètre player...


@+
Buno, Admin CS
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
jeudi 15 décembre 2011 à 16:54:08 | Re : Problème puissance 4

buno

Administrateur CodeS-SourceS
Tiens, autre remarque.
Ta méthode main contient 3 boucles while. C'est inutile, 1 seule suffit.


@+
Buno, Admin CS
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
jeudi 15 décembre 2011 à 21:21:51 | Re : Problème puissance 4

tlmvpsp

Bonjour Buno et merci pour vos réponses.
J'ai, comme vous l'avez suggéré, modifié mon checkvertical mais cela ne marche toujours pas.
Le programme demande simplement de placer un nouveau jeton alors que 4 jetons ou plus sont déjà alignés verticalement.
Si vous pouviez y jeter un coup d'oeil et me dire ce que vous pensez qui ne va pas...
merci d'avance.
(pour ce qui est des balises "code" j'ai cliqué sur la 3ème icone j'espère que sa vous ira)





#include <stdio.h>
#include <stdlib.h>


#define LIGNES 6
#define COLONNES 7

////////////////////////////// AFFICHER //////////////////////////////

void afficherPlateau (char plateauJeu [LIGNES][COLONNES]){

int i, j;

printf("\n=============================\n");
printf("| 1 | 2 | 3 | 4 | 5 | 6 | 7 |\n");
printf("=============================\n");


for(i=0 ; i<LIGNES ; i++){

printf("-----------------------------\n");
printf("|");

for(j=0 ; j<COLONNES ; j++){

printf(" %c |", plateauJeu [i][j]);

}

printf("\n");

}

printf("-----------------------------\n\n");
}


////////////////////////////// TEST PLATEAU PLEIN //////////////////////////////


int checkplateau ( int plateau [LIGNES][COLONNES]){

int i, j;

for(i=0 ; i<LIGNES ; i++){

for(j=0 ; j<COLONNES ; j++){

if( plateau [i][j] == 0){

return 0;

}
}
}

return 1;
}


////////////////////////////// TEST PLAYER VALIDE //////////////////////////////

int checkplayer (int player){

if(player == 1 || player == 2){

return 1;

}

return 0;
}



////////////////////////////// TEST LIGNES VALIDE //////////////////////////////

int checklineok (int joueur){

if(joueur >= 0 && joueur<LIGNES){

return 1;

}

return 0;

}


////////////////////////////// TEST COLONNE VALIDE //////////////////////////////

int checkcolumnok (int joueur){

if(joueur > 0 && joueur<=COLONNES){

return 1;

}

return 0;

}


////////////////////////////// TEST COLONNES PLEINE //////////////////////////////

int testColonne (int plateau [LIGNES][COLONNES], int joueur, int *colonne){

if(checkcolumnok (joueur)){

if(*colonne<COLONNES){

*colonne ++;
return 1;

}

}

return 0;
}



////////////////////////////// REMPLISSAGE JOUEUR 1 //////////////////////////////

void remplissagePlateau (char plateauJeu [LIGNES][COLONNES], int plateau [LIGNES][COLONNES], int joueur, int player){

int i=LIGNES-1;
int n=0;

while(n==0 && i>=0){

if(plateau [i][joueur-1] == 1 || plateau [i][joueur-1] == 2){

i--;

}

else if (plateau [i][joueur-1] == 0){

if(player == 1){

plateauJeu [i][joueur-1] = 'O';
plateau [i][joueur-1] = player;
n++;

}

else if(player == 2){

plateauJeu [i][joueur-1] = 'X';
plateau [i][joueur-1] = 2;
n++;

}
}
}
}




////////////////////////////// CHECK VERTICALES JOUEUR 1 //////////////////////////////

int checkVerticale (int plateau [LIGNES][COLONNES], int player){

int i,j;
int compt;

for(i=0 ; i<COLONNES ; i++){

compt = 0;

for(j=LIGNES-1 ; j>=0 ; j--){

if(plateau [i][j] == player){

compt ++;

}

if(compt >= 4){

return 1;

}

else{

compt = 0;

}

}

}

return 0;
}




////////////////////////////// CHECK HORIZONTALES JOUEUR 1 //////////////////////////////

int checkHorizontale (int plateau [LIGNES][COLONNES], int player){

int i,j;
int compt;

for(i=0 ; i<LIGNES ; i++){

compt = 0;

for(j=0 ; j<COLONNES ; j++){

if(plateau [i][j] == player){

compt ++;

}



else if(compt >= 4){

return 1;

}

else {

compt = 0;

}
}

}

return 0;
}


////////////////////////////// RETOURNE PLAYER DANS LA CASE JOUEE //////////////////////////////

int case_egale_player (int plateau [LIGNES][COLONNES], int player, int joueur){

int i;

if(checklineok (joueur) && checkcolumnok (joueur)){

for(i= LIGNES-1 ; i>=0 ; i--){

if (checkplayer (player)){

if(plateau [i][joueur] == 0){

plateau [i][joueur] = player;

return player;

}
}

}
}

return 0;
}



////////////////////////////// CHECK DIAGONALES JOUEUR 1 //////////////////////////////

int checkDiago1 (int plateau [LIGNES][COLONNES]){

int i;
int compteur = 0;

for(i=0 ; i<COLONNES ; i++){

if(plateau [i][i] == 1){

compteur ++;

}

else if (compteur >=4){

return 1;

}

else {

compteur = 0;

}
}

return 0;

}


////////////////////////////// CHECK DIAGONALES JOUEUR 2 //////////////////////////////

int checkDiago2 (int plateau [LIGNES][COLONNES]){


int i;
int compteur = 0;

for(i=0 ; i<COLONNES ; i--){

if(plateau [i][i] == 1){

compteur ++;

}

else {

compteur = 0;

}
}

if (compteur >=4){

return 1;

}

else {

return 0;

}


}



////////////////////////////// CLEAR SCREEN //////////////////////////////

void ClearScreen()
{
int n;
for (n = 0; n < 10; n++)
printf( "\n\n\n\n\n\n\n\n\n\n" );
}



////////////////////////////// MAIN //////////////////////////////

int main (void) {

char plateauJeu [LIGNES][COLONNES] = {" " , " " , " " , " " , " " , " "};
int plateau [LIGNES][COLONNES] = {{0,0,0,0,0,0,0},{0,0,0,0,0,0,0},{0,0,0,0,0,0,0},{0,0,0,0,0,0,0},{0,0,0,0,0,0,0},{0,0,0,0,0,0,0}};
int joueur, player = 1;
//char nom1 [20], nom2 [20];
int colonne = 0;

printf("Bienvenue dans le jeu du PUISSANCE 4 !\n\n");

/*printf("(Pour afficher l'aide tapez << ? >> )\n\n");

printf("Joueur 1, choississez votre nom : ");
scanf("%s", &nom1);

printf("Joueur 2, choississez votre nom : ");
scanf("%s", &nom2);*/

afficherPlateau(plateauJeu);


while(checkplateau(plateau) != 1){

printf("Joueur %d , choississez une colonne : ", player);
scanf("%d", &joueur);

if(checkcolumnok(joueur) && testColonne(plateau, joueur, &colonne) ){

remplissagePlateau(plateauJeu, plateau, joueur, player);
afficherPlateau(plateauJeu);

if(checkHorizontale(plateau, player) || checkVerticale(plateau, player)){

printf("Joueur %d gagne!", player);
return 0;

}
}

while(checkcolumnok(joueur) == 0){

printf("Le numero de cette colonne n'est pas valide, veuillez rejouer : ");
scanf("%d", joueur);

if(checkcolumnok(joueur) && testColonne(plateau, joueur, &colonne) ){

remplissagePlateau(plateauJeu, plateau, joueur, player);
afficherPlateau(plateauJeu);

if(checkHorizontale(plateau, player) || checkVerticale(plateau, player)){

printf("Joueur %d gagne!", player);
return 0;

}
}
}

while(testColonne(plateau, joueur, &colonne) == 0){

printf(" Cette colonne est deja pleine, veuillez rejouer : ");
scanf("%d", joueur);

if(checkcolumnok(joueur) && testColonne(plateau, joueur, &colonne) ){

remplissagePlateau(plateauJeu, plateau, joueur, player);
afficherPlateau(plateauJeu);

if(checkHorizontale(plateau, player) || checkVerticale(plateau, player)){

printf("Joueur %d gagne!", player);
return 0;

}
}

}


player ++;

if (checkplayer(player) == 0){
player=1;

}
}


return 0;

}

vendredi 16 décembre 2011 à 08:48:53 | Re : Problème puissance 4

buno

Administrateur CodeS-SourceS
A droite! 3e icone à droite!!
C'est encore plus illisible comme cela...
Bon, je regarderais ça quand j'aurais un peu de temps...mais je te conseille de voir en debug, avec point d'arrêt, pourquoi ta solution ne fonctionne pas.

@+
Buno, Admin CS
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
vendredi 16 décembre 2011 à 11:50:31 | Re : Problème puissance 4

buno

Administrateur CodeS-SourceS
Ta condition else était mal placée. Tu remettais systématiquement le compteur à 0. Une solution:

Code C/C++ :
int checkVerticale (int plateau [LIGNES][COLONNES], int player){ 

  int i,j; 
  int compt; 

  for(j=0 ; j<COLONNES ; j++)
  { 
    compt = 0; 

    for(i=0 ; i<LIGNES ; i++)
    { 
      if(plateau [i][j] == player)
      { 
        compt ++; 
      }
      else
      {
        compt = 0;
      }

      if(compt >= 4)
      { 
        return 1; 
      } 

      //else{ 
      //  compt = 0; 
      //} 
    } 
  } 

  return 0; 
}


NB: Tu vois l'intérêt des balises "code"

@+
Buno, Admin CS
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...


Cette discussion est classée dans : printf, joueur, player, plateau, if


Répondre à ce message

Sujets en rapport avec ce message

je ne comprends pas mon code n'affiche pas ma grille...de morpion [ par nicoworld ] Voilà ben le .exe m'affiche pas ma grille cje ne comprends pas!!!!si quelqu'un peut me dire pourquoi????voilà le code://MORPION 10*10 :#include int ve Probleme de fonction sur la bataille navale... [ par YASS_95 ] Bonjour à tous, Je travaille sur un projet qui est le jeu de la bataille navale et j'ai un petit probleme de fonctions... je vais vous expliquer. J'a THREAD BLOQUE [ par lillie69 ] Bonjour, nous sommes en train de coder un jeu en réseau(pour 2 joueurs) et notre problème est qu'on voudrait qu'une fois que le 1er joueur ait joué il Menu en C [ par acidjackproject ] Bonjour, j'aimerai faire un menu en C, dans lequel je peux voyager avec les flèches haut et bas. J'ai bien trouvé quelque chose a faire mais avec un d Aide codage [ par jeanphilippe37 ] Bonjour, j'avais déja demandé pour me coder mon prgm, ms on a pas voulu!!!! iol Voila, je l'ai codé aprés mon algo. Pourriez vous me dire s'il y Table de hachage avec patronyme [ par guitoontruant ] Bonjour, Désolé, j'avais d'abord poster dans les discussions libres.Voilà je dois créer une table de hashage de patronymes par le biais de N entrées, erreur de sytem("pause") [ par jeanphilippe37 ] Bj, J'ai fais ce programme pour savoir la catégorie des adresses Ip,il fonctionne, mais quand je mets system("pause"), le compilateur me met une e rien ne s'affiche a l'execution(les tubes ordinaires) [ par brekiano ] bonsoir,  svp chui débutant dans la programmation systeme sous unix.j'ai fait ce programme qui affiche normalement le résultats de ce pipes :    ]$ ps musique qui grésille [Console] [ par BastienL21 ] Bonjour à tous,    Je programme actuellement une console qui fait un peu tout...bref en gros il contient une boucle while( !kbhit()) où se trouve deda tableau [ par ngabou98 ] bonjour à tous c'est encore moi svp j'ai besoin de votre aide je travaille sur la méthode de simplification d'une fonction booléene par la méthode de


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,718 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales