Jeu de dame

math9 Messages postés 5 Date d'inscription   Statut Membre Dernière intervention   -  
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour

je rencontre des difficultés à chaque fois que je le compile; si quelqu'un peu bien m'aider s'il vous plais je suis vraiment dans l'urgence merci à tous

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

typedef struct {
int pions_noirs;
int pions_blanc;
int caseDamier;
}tdamier;

////initialisation du damiier
//void init_damier( char plateau[10][10]) {
//int i,j,k ;
////plateau.pions_noirs = 20 ;
////plateau.pions_blanc= 20 ;
////On initialise le tableau
//for(i=0 ;i<10 ;i++)
//    {
//      for(j=0 ;j<10 ;j++)
//         {
//              plateau[i][j]=0 ;
//         }
//    }
//
////On remplie la partie haute du damier par des pions noirs
//for(i=5 ;i<6 ;i++)
//    {
//        //Si i est pair, la première case doit être noir (active)
//
//        if(i%2 != 0)
//        {
//            k=3 ;
//        }
//        else
//        {
//            k=1;
//        }
//        for(j=k-2;j<10 ;j+=2)
//        {
//            plateau[i][j] = ' ';
//        }
//
//    }
//
//
////On remplie la partie basse du damier par des pions blancs
//for(i=5 ;i<6 ;i++)
//    {
//        //Si i est pair, la premier case doit être noir (active)
//        if(i%2 == 0)
//        {
//            k=4 ;
//        }
//        else
//        {
//            k=1 ;
//        }
//        for(j=k-3;j<10 ;j+=2)
//        {
//            plateau[i][j] = ' ';
//        }
//
//    }
//}

void initialisation(char plateau[10][10]){//remplissage à deux dimensions[10][10]pour les 100 cases (remplissage par caractère)
int i;
    for(i=1;i<10;i+2)
    {
        plateau[0][i]='n';
    }
    for(i=0;i<10;i+2)
    {
        plateau[1][i]='n';
    }
    for(i=1;i<10;i+2)
    {
        plateau[2][i]='n';
    }
    for(i=0;i<10;i+2)
    {
        plateau[3][i]='n';//remplissage ligne par ligne dans les cases (i+2)
    }
    for(i=1;i<10;i+2)
    {
        plateau[4][i]=' ';
    }
    for(i=0;i<10;i+2)//paires si (i=0)
    {
        plateau[5][i]=' ';
    }
    for(i=1;i<10;i+2)//impaires si(i=1)
    {
        plateau[6][i]='b';
    }
    for(i=0;i<10;i+2)
    {
        plateau[7][i]='b';
    }
    for(i=0;i<10;i+2)
    {
        plateau[8][i]='b';
    }
    for(i=1;i<10;i+2)
    {
        plateau[9][i]='b';
    }

}



void affichage_plateau_j1(char plateau[10][10]){
int i;
printf("__ __ __ __ __ __ __ __ __ __\n");
for(i=0;i<10;i++){
    printf("|  |  |  |  |  |  |  |  |  |  |\n");
    printf("| %c | %c | %c | %c | %c | %c | %c | %c | %c | %c |:\n",plateau[i][0],plateau[i][1],plateau[i][2],plateau[i][3],plateau[i][4],plateau[i][5],plateau[i][6],plateau[i][7],plateau[i][8],plateau[i][9]);//affiche ligne par ligne le plateau
    printf("|__|__|__|__|__|__|__|__|__|__|\n");             //affiche les numeros de lignes et colones
}
printf("\n  0  1  2  3  4  5  6  7  8  9 \n");//affiche les nuéro de ligne et colones
}


void affichage_plateau_j2(char plateau[10][10]){
int i;
printf("__ __ __ __ __ __ __ __ __ __\n");
for(i=9;i>=0;i--){//affiche les lignes dans l'ordre inverse permettant le retournement du plateau pour chaque joueur
    printf("|  |  |  |  |  |  |  |  |  |  |\n");
    printf("| %c | %c | %c | %c | %c | %c | %c | %c | %c | %c |\n",plateau[i][0],plateau[i][1],plateau[i][2],plateau[i][3],plateau[i][4],plateau[i][5],plateau[i][6],plateau[i][7],plateau[i][8],plateau[i][9]);
    printf("|__|__|__|__|__|__|__|__|__|__|\n");
}
printf("\n  0  1  2  3  4  5  6  7  8  9 \n");
}




void deplacement_j1(char plateau[10][10]){
int a,b;        //le déplacement se fait grâce à des coordonnées sur le plateau
int saut;
int d=0,g=0,dame=0;
int deplcmnt_droit=0,deplcmnt_gauche=0;
printf("\n JOUEUR 1:\n\n");
do  {
        do{
            printf("entrer les cooordonnées de votre pion:\nligne");
            scanf("%i",&a);
            printf("\nColonne:");
            scanf("%i",& b);
        }while(plateau[a][b]!='b'&& plateau[a][b]!='B');//la condition interdit au joueur de sélectionner une case vide ou un pion adverse

        if(plateau[a][b]=='B')
            {
                dame=DAMEB(a,b,plateau);//renvoie à la fonction des dames
                d=1;//empêche les fonctions de pions de s'effectuer
            }
            //pour le déplacement du pion
        if(plateau[a-1][b+1]==' ' && b<9 && d!=1 && g!=1)//cette condition détermine s'il est possible de se déplacer
                {
                    printf("voulez vous déplacer à droite?(tapez 1 pour oui 0 pour non \n");//demande au joueur s'il veut déplacer son pion sur la case déterminée vide par les conditions
                    scanf("%i",&deplcmnt_droit);
                    if(deplcmnt_droit==1)
                        {
                            plateau[a-1][b+1]=plateau[a][b];
                            plateau[a][b]=plateau[0][0];
                            a=a-1;
                            b=b+1;
                        }
                    else{deplcmnt_droit=0;}
                }

                 if(plateau[a-1][b-1]==' ' && b<9 && d!=1 && g!=1)
                 {
                     printf("voulez vous déplacer à gauche?(tapez 1 pour oui 0 pour non \n");
                     scanf("%i",&deplcmnt_gauche);
                     if(deplcmnt_droit==1)
                        {
                            plateau[a-1][b-1]=plateau[a][b];//déplcement du pion (les variables déplacement droite et gauche permettent de faire reprendre la fonction si le joueur répond non)
                            plateau[a][b]=plateau[0][0];
                            a=a-1;
                            b=b-1;
                        }
                        else{deplcmnt_gauche=0;}
                }

                if(a==0)
                {
                    plateau[a][b]='B';//permet la transformation du pion en dame
                }
        }while(deplcmnt_droit==0 && deplcmnt_gauche==0 && d==0 && g==0 && dame==0);

//pour effectuer un saut sur le plateau
        //else
        //{
            do// a partir de ce do commence la rafle
            {
                if(plateau[a-1][b+1]=='b' && plateau[a-2][b+2]==' ' && a<10 && b<10)// la condition
                {
                    printf("sauter en avant droit?(si oui tapez 1 sinon tapez 0)\n");// la demande
                    scanf("%i",& saut);
                    if(saut==1)
                    {
                        d=1;
                        plateau[a-1][b+1]=' ';
                        plateau[a-2][b+2]=plateau[a][b];                    //l'exécution
                        plateau[a][b]=plateau[0][0];
                        a=a-2;
                        b=b+2;
                    }
                }
                if(plateau[a-1][b-1]=='b'&& plateau[a-2][b-2]==' '&&a<10 && b>0)// la condition
                {
                    scanf("%i",& saut);
                    if(saut==1)
                    {
                        g=1;
                        plateau[a-1][b-1]=' ';
                        plateau[a-2][b-2]=plateau[a][b];
                        plateau[a][b]=plateau[0][0];
                        a=a-2;
                        b=b-2;
                    }
                }
            }while((plateau[a-1][b-1]=='b' && plateau[a-2][b-2]==' ')||(plateau[a-1][b-1]='b' && plateau[a-2][b+2]==' ') );

        }



void deplacement_j2(char plateau[10][10]){
int a,b;        //le déplacement se fait grâce à des coordonnées sur le plateau
int saut;
int d=0,g=0,dame=0;
int deplcmnt_droit=0,deplcmnt_gauche=0;
printf("\n JOUEUR 2:\n\n");
do  {
        do{
            printf("entrer les cooordonnées de votre pion:\nligne");
            scanf("%i",& a);
            printf("\nColonne:");
            scanf("%i",& b);
        }while(plateau[a][b]!='n'&&plateau[a][b]!='N');//la condition interdit au joueur de sélectionner une case vide ou un pion adverse

        if(plateau[a][b]=='N')
            {
                dame=DAMEN(a,b,plateau);//renvoie à la fonction des dames
                d=1;//empêche les fonctions de pions de s'effectuer
            }
            //pour le déplacement du pion

        if(plateau[a+1][b-1]==' ' && b<9 && d!=1 && g!=1)//cette condition détermine s'il est possibmle de se déplacer
                {
                    printf("voulez vous déplacer à droite?(tapez 1 pour oui 0 pour non \n");
                    scanf("%i",&deplcmnt_droit);
                    if(deplcmnt_droit==1)
                        {
                            plateau[a-1][b+1]=plateau[a][b];
                            plateau[a][b]=plateau[0][0];
                            a=a+1;
                            b=b-1;
                        }
                         else{deplcmnt_droit=0;}
                }


                 if(plateau[a+1][b+1]==' ' && b<9 && d!=1 && g!=1)
                 {
                     printf("voulez vous déplacer à gauche?(tapez 1 pour oui 0 pour non \n");
                     scanf("%i",&deplcmnt_gauche);
                     if(deplcmnt_droit==1)
                        {
                            plateau[a+1][b+1]=plateau[a][b];
                            plateau[a][b]=plateau[0][0];
                            a=a+1;
                            b=b+1;
                        }
                        else{deplcmnt_gauche=0;}
                }

                if(a==0)
                {
                    plateau[a][b]='N';
                }
        }while(deplcmnt_droit==0 && deplcmnt_gauche==0 && d==0 && g==0 && dame==0);

       //pour effectuer un saut sur le plateau
        //else
        //{
            do// a partir de ce do commence la rafle
            {
                if(plateau[a+1][b-1]=='n' && plateau[a-2][b+2]==' ' && a<10 && b<10)// la condition
                {
                    printf("sauter en avant droit?(si tapez oui 1 si non tapez 0)\n");// la demande
                    scanf("%i",& saut);
                    if(saut==1)
                    {
                        d=1;
                        plateau[a+1][b-1]=' ';
                        plateau[a+2][b-2]=plateau[a][b];                    //l'exécution
                        plateau[a][b]=plateau[0][0];
                        a=a+2;
                        b=b-2;
                    }
                }
                if(plateau[a+1][b+1]=='n'&& plateau[a+2][b+2]==' '&&a<10 && b>0)// la condition
                {
                    scanf("%i",& saut);
                    if(saut==1)
                    {
                        g=1;
                        plateau[a+1][b+1]=' ';
                        plateau[a+2][b+2]=plateau[a][b];
                        plateau[a][b]=plateau[0][0];
                        a=a-2;
                        b=b-2;
                    }
                }
            }while((plateau[a-1][b-1]=='n' && plateau[a-2][b-2]==' ')||(plateau[a-1][b-1]='n' && plateau[a-2][b+2]==' ') );

        }




//initialiser les dames
void DAMEB(int x,int y,char plateau[10][10]){
int i, j,e,f,a=0,b=0;
int c=0,k=0;
int dame=0;
do{
    dame=0;
    a=x;
    b=y;
    k=0;
    printf("entrée les coordonnées d'arrivée:\nligne:");//une autre demande des pions (coordonnées d'arriver)
    scanf("%i",&e);
    printf("\nColone:");
    scanf("%i",&f);
    do{                         //cette fonction parcours les diagonales de la dame
        a=a+1;
        b=b+1;
        c=c+1;
    }while((a!=e && b!=f)&& (a>0 || b<10));
    //pour effectuer le déplacement de la dame et la prise de pion
    if(a==e && b==f)
        {
        for(j=1;j<=c;j++)
            {
            if(plateau[e][f]==' ')
            {
                plateau[e][f]='B'; //déplacement
                plateau[x][y]=' ';
                k=1;
            }
        else
            dame=0;
        }
        if(k==1)
            {
            for(i=1;i<10;i++)
                {
                if(plateau[a+i][b-i]=='n' || plateau[a+i][b-i]=='N')
                    {
                        plateau[a+i][b-i]=' '; //prise: élimine les pions adverses dans la trajectoire de la dame
                    }
                }
            }
        for(i=1;i<10;i++)  //cette partie permet de reprendre la fonction s'il y a encore la possibilité de prendre voir de ressauter un pion grâce à la variable dame
            {
                if (plateau[a-i][b+i]=='n' && plateau[(a-i)-1][(b+i)+1]==' ')
                    {
                        dame=2;
                    }
                if (plateau[a-i][b-i]=='n' && plateau[(a-i)-1][(b-i)-1]==' ')
                    {
                        dame=2;
                    }
                if (plateau[a+i][b+i]=='n' && plateau[(a+i)+1][(b+i)+1]==' ')
                    {
                        dame=2;
                    }
                if (plateau[a+i][b-i]=='n' && plateau[(a+i)+1][(b-i)-1]==' ')
                    {
                        dame=2;
                    }
            }
        k=2;
        }
    a=x;
    b=y;
    } while (plateau[e][f]=='B' && plateau[x][y]!=' ');
}

void DAMEN(int x,int y,char plateau[10][10]){
int i, j,e,f,a=0,b=0;
int c=0,k=0;
int dame=0;
do{
    dame=0;
    a=x;
    b=y;
    k=0;
    printf("entrée les coordonnées d'arrivée:\nligne:");//une autre demande des pions (coordonnées d'arriver)
    scanf("%i",&e);
    printf("\nColone:");
    scanf("%i",&f);
    do{                         //cette fonction parcours les diagonales de la dame
        a=a+1;
        b=b+1;
        c=c+1;
    }while((a!=e && b!=f)&& (a>0 || b<10));
    //pour effectuer le déplacement de la dame et la prise de pion
    if(a==e && b==f)
        {
        for(j=1;j<=c;j++)
            {
            if(plateau[e][f]==' ')
            {
                plateau[e][f]='N'; //déplacement
                plateau[x][y]=' ';
                k=1;
            }
        else
            dame=0;
        }
        if(k==1)
            {
            for(i=1;i<10;i++)
                {
                if(plateau[a+i][b-i]=='b' ||plateau[a+i][b-i]=='B')
                    {
                    plateau[a+i][b-i]=' '; //prise: élimine les pions adverses dans la trajectoire de la dame
                }
            }
        }
      for(i=1;i<10;i++)  //cette partie permet de reprendre la fonction s'il y a encore la possibilité de prendre voir de ressauter un pion grâce à la variable dame
      {
          if (plateau[a-i][b+i]=='b' && plateau[(a-i)-1][(b+i)+1]==' ')
          {
              dame=2;
          }
          if (plateau[a-i][b-i]=='b' && plateau[(a-i)-1][(b-i)-1]==' ')
          {
              dame=2;
          }
          if (plateau[a+i][b+i]=='b' && plateau[(a+i)+1][(b+i)+1]==' ')
          {
              dame=2;
          }
          if (plateau[a+i][b-i]=='b' && plateau[(a+i)+1][(b-i)-1]==' ')
          {
              dame=2;
          }
      }
      k=2;
    }
    a=x;
    b=y;
    } while (plateau[e][f]=='N' && plateau[x][y]!=' ');
}


//réalisation du menu
int menu(int c)
{
do{
    printf("---------------------------------------\n");
    printf("------------------------------MENU-----\n");
    printf("---------------------------------------\n");
    printf("1------------->JOUER.\n\n");
    printf("2------------->REGLE DU JEU.\n\n");
    printf("3------------->CHARGER LA PARTIE.\n\n");
    printf("4------------->QUITTER LE JEU.\n\n");
    printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
    scanf("%i",& c);
    }while(c!=1 && c!=2 && c!=3 && c!=4);
    return c;
}
//realisation de la sauvegarde du jeu
//cette fonction permet d'enregistrer le dernier affichege que l'on ait pu faire dans un fichier de l'ordinateur
void sauvegarde(char plateau[10][10], int tour)
{
    int i,j;
    FILE*FICHER=NULL;
    FICHER=fopen("FICHIER.txt","w+");//w+:ouverture d'un fichier texte en lecture/écriture
    fprintf(FICHER,"%i\n",tour);
    for(i=0;i<10;i++)
    {
        for(j=0;j<10;j++)
        {
            fprintf(FICHER,"%i;",plateau[i][j]);//La fonction (fprintf), analogue à printf, permet d'écrire des données dans un fichier

        }
    }
   fclose(FICHER);//fclose:Elle permet de fermer le flot qui a été associé à un fichier par la fonction fopen
}

//cette fonction se charge de récuperer le fichier qui a été sauvergardé
int chargement(char plateau[10][10])
{
    int i,j,tour;
    FILE*FICHER=NULL;
    FICHER=fopen("FICHIER.txt","r");//r:ouverture d'un fichier texte en lecture
    fscanf(FICHER,"%i\n",&tour);
    for(i=0;i<10;i++)
    {
        for(j=0;j<10;j++)
        {
            fscanf(FICHER,"%i;",plateau[i][j]);//La fonction fscanf, analogue à scanf, permet de lire des données dans un fichier( sa syntaxe identique à celle du scanf)

        }
    }
   fclose(FICHER);//fclose:Elle permet de fermer le flot qui a été associé à un fichier par la fonction fopen
   return tour;
}



int fin_dela_partie(char plateau[10][10])//cette fonction fin de partie est identique à un compteur
{   int i,j,zq;
    int a=0,b=0,c=0,d=0;
    for(i=0;i<10;i++)
    {
        for(j=0;j<10;j++)
        {
            if(plateau[i][j]=='n')//correspond au pion noir
                a+=1;
            if(plateau[i][j]=='b')//correspond au pion blanc
                b+=1;
            if(plateau[i][j]=='B')//dame blanche
                c+=1;
            if(plateau[i][j]=='N')//dame noir
                d+=1;
        }
    }
    //cette partie permet en fonction de la connaissance
    //du nombre de pièce de chaque joeur, déterminer l'issue du jeu selon les pièces restantes

    if(a==0 && d==0)//détermine qui a plus de pion hors dame noir

    {
        printf("\n\n\n              JOUEUR 1 GAGNE !:\n\n\n\n");
        zq=2;
    }
    if(b==0 && c==0)//donne le nombre de pion blanc
    {
        printf("\n\n\n              JOUEUR 2 GAGNE !:\n\n\n\n");
        zq=2;
    }
    if(c==1 && d==1)//donne une damme de part   et d'autre du plateau
    {
        printf("\n\n\n              MATCH NUL !:\n\n\n\n");
    }
    return zq;
}



int main()
{
    char plateau[10][10];
    int zq=1,c=0;
    int tour;


    do
    {
        c=menu(c);//la variable issue du menu c'est à dire du choix de l'utilisateur permettant ainsi l'orientation mécanique du programme

        //correspond au jeu(on doit jouer)
        if(c==1)
        {
           initialisation(plateau);
           do
           {
               affichage_plateau_j1(plateau);
               deplacement_j1(plateau);
               zq=fin_dela_partie(plateau);
               if(zq==1)                                            //correspond au jeu
               {
                   affichage_plateau_j2(plateau);
                   deplacement_j2(plateau);
                   zq=fin_dela_partie(plateau);
               }
           }while(zq==1);

           //cette partie correspond au chargement du jeu

           if(c==3)
           {
               tour=chargement(plateau);
               do
               {
                   affichage_plateau_j1(plateau);
                   deplacement_j1(plateau);
                   zq=fin_dela_partie(plateau);
                   if(zq==1)
                   {
                       affichage_plateau_j2(plateau);
                       deplacement_j2(plateau);
                       zq=fin_dela_partie(plateau);
                   }
               }while(zq=1);
               tour=chargement(plateau);
               do
               {
                   affichage_plateau_j2(plateau);
                   deplacement_j2(plateau);
                   zq=fin_dela_partie(plateau);
                   if(zq==1)
                   {
                       affichage_plateau_j1(plateau);
                       deplacement_j1(plateau);
                       zq=fin_dela_partie(plateau);

                   }
               }while(zq==1);
           }


        }
    }while(c==1 || c==2);

    return 0;
}


<code>
A voir également:

2 réponses

NHenry Messages postés 15221 Date d'inscription   Statut Modérateur Dernière intervention   366
 
Quelles difficultés ?
0
math9 Messages postés 5 Date d'inscription   Statut Membre Dernière intervention  
 
le programme ne présente que le menu et quand j'entre la touche il ne compile plus et plante
0
NHenry Messages postés 15221 Date d'inscription   Statut Modérateur Dernière intervention   366
 
As-tu essayé en pas à pas et regardé les valeurs des variables ?
0
math9 Messages postés 5 Date d'inscription   Statut Membre Dernière intervention   > NHenry Messages postés 15221 Date d'inscription   Statut Modérateur Dernière intervention  
 
oui je l'ai essayé; et là je vais refaire l’initialisation du plateau
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846 > math9 Messages postés 5 Date d'inscription   Statut Membre Dernière intervention  
 
Je te conseille de prendre en compte mon post #5 avant de tout refaire...
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Soit le programme compile, soit il ne compile pas...
Si le programme affiche le menu alors il compile. De ce que je comprends c'est que le programme plante tout simplement après que tu as rentré une variable. Je regarde si je vois des choses qui ne vont pas.
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Plein de choses qui ne vont pas...

for(i=1;i<10;i+2)
Boucle infinie ça. Ce n'est pas i+2 qu'il faut mettre, mais i=i+2. Sinon i reste inchangé.
A corriger pour tous tes for.

dame=DAMEB(a,b,plateau);
Pourtant DAMEB est de type void... Ce n'est pas compatible.
A toi de voir en fonction de ce que tu préfères.

int dame=0;
Tu fais dame=0, puis dame=2 parfois. Mais tu ne te sers jamais de cette variable. A quoi sert-elle ?

fscanf(FICHER,"%i;",plateau[i][j])
Pourquoi %i; ? Un simple %i est mieux.
Ce n'est pas plateau[i][j] mais &plateau[i][j] qu'il faut mettre.

while(zq=1);
L'opérateur de comparaison est == (et non =).

Et il doit y en avoir d'autres. Je te conseille de bien lire les messages de ton compilateur. Les warning doivent être corrigés, même s'il compile.
0