Jeu de dame
math9
Messages postés
6
Date d'inscription
Statut
Membre
Dernière intervention
-
fiddy Messages postés 441 Date d'inscription Statut Contributeur Dernière intervention -
fiddy Messages postés 441 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
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>
2 réponses
-
Quelles difficultés ?
-
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.