Jeu de dame
math9
Messages postés
6
Statut
Membre
-
fiddy Messages postés 11653 Statut Contributeur -
fiddy Messages postés 11653 Statut Contributeur -
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>
A voir également:
- Jeu de dame
- 94 jeu - Télécharger - Puzzle & Réflexion
- 94 degrés jeu - Télécharger - Divers Jeux
- Jeu zuma - Télécharger - Jeux vidéo
- Jeu logo - Télécharger - Jeux vidéo
- Jeu google - Guide
2 réponses
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.
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.
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.