Problème test victoire dans gomoku

Résolu
sissou69100 Messages postés 2 Date d'inscription mercredi 18 avril 2018 Statut Membre Dernière intervention 6 mai 2018 - Modifié le 6 mai 2018 à 12:17
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 - 7 mai 2018 à 17:36
Bonjour,
j'ai un problème avec mon code de gomoku, la compilation n'indique aucune erreur mais lorsque l'on doit aligner 5 pions pour pouvoir gagner ça n'enclenche pas la victoire.
Je pense que le problème viens de l'analyse soit les tests de victoire
Pouvez vous m'aider svp:
#include <stdio.h>
#include <stdlib.h>
#define N 11

char plateau[N][N];
int ana;
int k;

void initiation_grille();
void plateau1();
int modiftab1();
int modiftab2();
void joueur();
void regle();
int analyse(char c, int ii, int jj);

int main()
{
    int choix;
    int ligne, col;
    int i = 0;
    int k;

    printf("___________________________________________________________________________________________________________\n\n\n");
    printf("                                          GOMOKU\n\n\n");
    printf("___________________________________________________________________________________________________________\n\n\n");
    printf(" Si c est votre premiere partie, allez faire un tour dans les regles du jeu!\n");
    do
    {
        printf(" Que voulez vous faire?\n Tapez 1 pour commencer une partie\n Tapez 2 pour voir les regles du jeu\n Tapez 3 pour acceder aux credits \n\n");
        scanf("%d", &choix);
        printf("\n");

        switch (choix)
            {
            case 1:
            printf("C'est parti!");
            joueur();
           initiation_grille();
            do {

            if (i%2==0) do {modiftab1();}while(k==1);
            if (i%2==1) do {modiftab2();}while (k==1);
            plateau1();

            i++;
            }while(ana==0);
            break;

            case 2:
            printf(" === Regles du jeu ===\n\n\n");
            printf(" == Synopsis ==\n\n");
            printf(" A l origine, le Gomoku utilise le materiel du jeu de \ngo, c est a dire : deux lots de pierres de couleurs differentes,\nle tablier dote d un quadrillage de 19 lignes sur 19. \nEn realite, le Gomoku ne necessite qu une vingtaine de \npierres (ou pieces ou boutons de culottes) par joueur et, comme \non joue toujours en position centrale, on peut considerer que le \nterrain est illimite. Le tout est de disposer d un quadrillage, \nles pierres se jouant sur les intersections.");
            printf("\n\n == Regles du jeu ==\n\n");
            printf(" Dans notre cas, nous jouerons sur une grille de 11 cases sur 11.\nLe principe est simple, Deux joueurs s'affrontent en jouant chacun leurs\ntour.L'un est represente par les croix, l'autre les rond. Le but \nest d'aligner 5 des ses pions (En colonne, en ligne ou en diagonale.) \n\nPour placer un pion, il faudra rentrer les coordonnees de la case \ndans laquelle vous voudrez placer votre pion.\n");
            break;

            case 3:
            printf(" === Credits ===\n\n");
            printf(" Jeu codé en C pour le projet algo 2018"
                   " Par Emile De Germond et Sirine Louartani");
            printf("Quel est votre choix?taper 1, 2 ou 3\n\n");
            break;

            default:
            printf("Vous n'avez pas rentre un nombre correct. Veillez reessayer\n\n");
            break;
            }

    }while (choix =! 1,2,3);
    printf("\n\n");

    return 0;
}

void joueur()
{
    typedef struct Player Player;
    struct Player
    {
    char nom[100];
    char prenom[100];
    char adresse[1000];

    };

    int i ;
    Player Joueur[2] = {{"","",0, 0},{"", "",0, 0}};
    for (i=0; i<2; i++)
    {
        printf("=== FICHES JOUEURS ===");
        printf("=== JOUEUR %d ===\n",i+1);
        printf("-Nom :");
        scanf("%s",&Joueur[i].nom);

        printf("-Prenom :");
        scanf("%s",&Joueur[i].prenom);


    }
}


void initiation_grille(){
  int i, j;
  for (i=0; i<N; i++) {
    for (j=0; j<N; j++) {
      plateau[i][j] = '*';
    }
  }
}
void regle() {
  int i=0,ana;
  int joueur_en_cours;

  int ligne, col;



  do    {
        joueur_en_cours=i%2+1;
        printf("cest au joueur %d de jouer :\n",joueur_en_cours);
        printf("Saisisez le numero de la ligne ou vous voulez poser votre pion: ");
        scanf("%d", &ligne);
        printf("Saisisez le numero de la colonne ou vous voulez poser votre pion: ");
        scanf("%d", &col);
        printf("\n");

            if ((ligne > 1) && (ligne <= N) && (col > 1) && (col <= N)) {
            ligne--;
            col--;

            if(plateau[ligne][col] != ' '){
            printf("Cette case a deja ete remplie. Veuillez recommencer: \n");
            } //le joueur doit resaisir sa ligne et colonne

            else {

                if(i%2==0){
                plateau[ligne][col]='X';
                i++;
                }

                else {
                plateau[ligne][col]='O';
                i++;
                }


                }

            }
plateau1();

        }
while (ana==0);

}


int analyse(char c, int ii, int jj){
  //  int t,y,h,n;
    int ana;

        int i, j, t=1, y=1,h=1,n=1;
// Horizontal :
    i=ii;     while((--i>=0) &&             (plateau[i][jj] ==c)) t=t+1;
    i=ii;     while((++i< N) &&             (plateau[i][jj] ==c)) t=t+1;
    if (t>=5) {ana=1;
    return ana;}
// Vertical :
    j=jj;     while((--j>=0) &&             (plateau[ii][j]==c)) y=y+1;
    j=jj;     while((++j< N) &&             (plateau[ii][j] ==c)) y=y+1;
    if (t>=5) {ana=1;
    return ana;}
// Diagonale descendante vers la droite :
    i=ii;j=jj;while((--i>=0) && (--j>=0) && (plateau[i][j]==c)) h=h+1;
    i=ii;j=jj;while((++i< N) && (++j< N) && (plateau[i][j]==c)) h=h+1;
    if (t>=5) {ana=1;
    return ana;}
// Diagonale ascendante vers la droite :
    i=ii;j=jj;while((--i>=0) && (++j< N) && (plateau[j][i] ==c)) n=n+1;
    i=ii;j=jj;while((++i< N) && (--j>=0) && (plateau[j][i] ==c)) n=n+1;
    if (t>=5) {ana=1;
    return ana;}

    else ana=0;
     return ana;



    return 0;



}


void programmejeu()
{


char tableau[11][11];
int i;
int j;

void inittab()
    {
            for(i=0;i<11;i++)
    {
                for(j=0;j<11;j++)
                {
                        tableau[i][j] = ' ' ;
                }

    }
    }
    }

int modiftab1()
{

            int colonne;
            int ligne;
       ;
do {
printf("Au joueur 1 :\n\n");
printf("Choisir une ligne\n\n");
scanf("%d", &ligne);
printf("Choisir une colonne\n\n");
scanf("%d",&colonne);
system("cls");

       if ((ligne > 0) && (ligne <= N) && (colonne > 0) && (colonne <= N)) {
      ligne--;
      colonne--;
if (plateau[ligne][colonne] != '*' ) {

                    printf("Incorrect, veuillez ressaisir une valeur !\n");
                    k=1;

                }
                else {
                plateau [ligne ][colonne ] ='X';

                analyse (plateau[ligne][colonne],ligne,colonne);
                 k=0;
                return k;

                 }
       }
} while(k==1);
}

int modiftab2(){
     int colonne;
            int ligne;

do{
printf("Au joueur 2 :\n\n");
printf("Choisir une ligne\n\n");
scanf("%d", &ligne);
printf("Choisir une colonne\n\n");
scanf("%d",&colonne);
system("cls");

       if ((ligne > 0) && (ligne <= N) && (colonne > 0) && (colonne <= N)) {
      ligne--;
      colonne--;

 if (plateau[ligne][colonne] != '*' ) {

                    printf("Incorrect, veuillez ressaisir une valeur !\n");
                    k=1;

                }
else {
plateau [ligne ][colonne ] ='O';

 analyse (plateau[ligne][colonne],ligne,colonne);
 k=0;

 return k;}
}
}
while (k==1);

}


void plateau1() {
  int i, j;
  for (i=0; i<N; i++) {
    for (j=0; j<N; j++) {
            printf("%c",plateau[i][j]);
    }
    printf("\n");
  }
}


EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI

Merci d'y penser dans tes prochains messages.

1 réponse

cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
Modifié le 7 mai 2018 à 17:37
Tu as du "t>=5" dans toutes conditions. Or, ce n'est pas comme ça que tu as nommé tes compteurs (à part pour le premier). En suivant ta logique tu devrais avoir y>=5, h>=5, n>=5.
Attention, pas mal de fautes encore (voir le post précédent, les conseils listés sont encore valables).

Évite les variables globales, ça sera rapidement une source d'ennui. Préfère passer tes tableaux par arguments.

Enfin, quand tu postes sur ce forum, n'oublie pas les balises de code. C'est la deuxième fois qu'on te les ajoute.
0
Rejoignez-nous