Variable globale
Résolu
didy_gwatinik
Messages postés
352
Date d'inscription
Statut
Membre
Dernière intervention
-
lenrok Messages postés 1437 Date d'inscription Statut Membre Dernière intervention -
lenrok Messages postés 1437 Date d'inscription Statut Membre Dernière intervention -
Bonjour
je suis sur un programme, j'ai déclaré des variables globales (je débute je n'arrive pas à faire autrement) et j'obtiens le message : 6 variable-size type declared outside of any function
Ca veut dire qu'une variable globale ne peut pas etre modifier???
A l'aide par pitié je desespere
je suis sur un programme, j'ai déclaré des variables globales (je débute je n'arrive pas à faire autrement) et j'obtiens le message : 6 variable-size type declared outside of any function
Ca veut dire qu'une variable globale ne peut pas etre modifier???
A l'aide par pitié je desespere
A voir également:
- Variable globale
- Vba range avec variable ✓ - Forum VB / VBA
- Variable d'environnement temp ✓ - Forum Microsoft Office
- Variable objet ou variable de bloc with non définie - Forum VB / VBA
- Le fichier contient un programme écrit en python. le programme construit un mot secret mais il ne l'affiche pas. modifiez ce programme afin que à chaque itération de la boucle : la variable a augmente de 2 la variable b diminue de 1 ajoutez une instruction pour faire afficher le mot secret construit. quel est ce mot secret ? ✓ - Forum Python
- Variable objet ou bloc "with" non définie - Forum VB / VBA
24 réponses
Je les ai déclaré comme suit (je ne mets qu'une partie du programme) :
J'ai fait une erreur?
#include<stdio.h> #include<conio.h> #include<stdlib.h> #include<time.h> int nbMine=10, i, j,nombreLigne=9,nombreColonne=9,tab[nombreLigne][nombreColonne]; void personalise(void) { int Ligne=-1, Colonne=-1; printf("=>Personalisation du jeu<="); while(Ligne<1 || Ligne>10) {puts("\n\nDe quelle longueur voulez vous que votre champ de mine soit? (9 par defaut)"); scanf("%d", &nombreLigne);//non-lvalue in unary '&' Ligne=nombreLigne;} while(Colonne<1 || Colonne>10) {puts("\n\nDe quelle largeur voulez vous que votre champ de mine soit? (9 par defaut)"); scanf("%d", &nombreColonne);//non-lvalue in unary '&' Colonne=nombreColonne;} do{ puts("\n\nCombien de mines voulez vous avoir a desamorcer? (10 par defaut)"); scanf("%d", &nbMine); }while(nbMine>nombreLigne*nombreColonne); } void choisir (void) { int choix; textcolor(2); printf("Que voulez vous faire?\n\t-1 Commencer a jouer\n\t-2 Personnaliser le jeu\n\t-3 Voir les regles du jeu\n"); scanf("%d", &choix); system("cls"); switch(choix) { case 1 : { printf("Veuillez entrer votre niveau de jeu : \n\t-1 Debutant\n\t-2 Intermediaire\n\t-3 Expert\n"); scanf("%d",&choix); switch(choix) { case 1 : { nombreLigne=9; nombreColonne=9; nbMine=10; } break; case 2 : { nombreLigne=10; nombreColonne=10; nbMine=40; } break; case 3 : { nombreLigne=10; nombreColonne=10; nbMine=60; } break; default : ; } } break; case 2 : personalise (); break; case 3 : printf("=>Les Regles du jeu<=\n\nLe jeu se presente sous la forme d'un tableau de cases a deux dimensions. Certaines cases contiennent des mines. Au depart toutes les cases sont masquees (et on ne voit donc pas les mines). L'objectif est de localiser les mines (le nombre de mines restant a localiser etant donne au joueur). Le joueur peut au choix decouvrir le contenu d'une case, ou la marquer pour signaler la presence d'une mine (c'est son hypothese et le decompte des mines se fixe la dessus). Les cases decouvertes affichent le nombre de mines dans les 8 cases voisines, sauf si la case contient elle meme une mine (auquel cas le joueur meurt et la partie est termine). Si le joueur n'est pas mort, la partie se termine lorsque le joueur a decouvert toutes les cases (sauf celles avec les mines). Son score est le temps mis pour terminer.\n"); break; default : ; } } void jeu ( ) {;} void affichage_tableau ( ) { printf(" ");//4 espace for(j=0;j<nombreColonne;j++)//revoir l'initialisation avc la convention { printf("%d ",j); } printf("\n -"); for(j=0;j<nombreColonne;j++) { printf("--"); } for(i=0;i<nombreLigne;i++) { puts(" "); printf("%d | ",i); for(j=0;j<nombreColonne;j++) { printf("x ",tab[i][j]); // affichage du tableau } } puts("\n"); } main(void) { int lignemine,colonnemine,recommencer,tabcase[nombreLigne][nombreColonne], i, j,mine=0,mineAlentour=0,reponse,confirmCase,compteurMine=10,caseDecouverte=0,nbCase=81; do{ system("cls"); textcolor(4); printf("\n\n\n\n\t\t\t\t===>>>LE DEMINEUR<<===\n\n\n\n"); textcolor(2); choisir( ); nbCase=nombreColonne*nombreLigne; system("pause"); system("cls"); affichage_tableau( ); /*Initilisation du tableau avec les mines et les mines alentours*/ srand(time(NULL));
J'ai fait une erreur?
Bonjour didy_gwatinik,
...
#include<time.h>
#define nbMine 10 //au lieu de int, lorsque tu changes ce paramètre tout le programme est impacté
int i, j; //J'initialliserai tout de suite ces variables.Même si tu le fais dans tes boucles
#define nombreLigne 9
#define nombreColonne 9
int tab[nombreLigne][nombreColonne];
void personalise(void)
...
Pour ma part, je racourccirai les noms ! Ils sont trop long.
nombreLigne =>NbrLig
nombreColonne =>NbrCol
etc...
Essaye...
...
#include<time.h>
#define nbMine 10 //au lieu de int, lorsque tu changes ce paramètre tout le programme est impacté
int i, j; //J'initialliserai tout de suite ces variables.Même si tu le fais dans tes boucles
#define nombreLigne 9
#define nombreColonne 9
int tab[nombreLigne][nombreColonne];
void personalise(void)
...
Pour ma part, je racourccirai les noms ! Ils sont trop long.
nombreLigne =>NbrLig
nombreColonne =>NbrCol
etc...
Essaye...
J'ai mis ca (c'est toujours une partie du code):
Mais j'obtiens l'erreur suivante :
17 non-lvalue in unary `&'
#include<stdio.h> #include<conio.h> #include<stdlib.h> #include<time.h> #define nbMine 10 #define nombreLigne 9 #define nombreColonne 9 int i=0, j=0; int tab[nombreLigne][nombreColonne]; void personalise(void) { int Ligne=-1, Colonne=-1; printf("=>Personalisation du jeu<="); while(Ligne<1 || Ligne>10) {puts("\n\nDe quelle longueur voulez vous que votre champ de mine soit? (9 par defaut)"); scanf("%d", &nombreLigne); Ligne=nombreLigne;} while(Colonne<1 || Colonne>10) {puts("\n\nDe quelle largeur voulez vous que votre champ de mine soit? (9 par defaut)"); scanf("%d", &nombreColonne); Colonne=nombreColonne;} do{ puts("\n\nCombien de mines voulez vous avoir a desamorcer? (10 par defaut)"); scanf("%d", &nbMine); }while(nbMine>nombreLigne*nombreColonne); } void choisir (void) { int choix; textcolor(2); printf("Que voulez vous faire?\n\t-1 Commencer a jouer\n\t-2 Personnaliser le jeu\n\t-3 Voir les regles du jeu\n"); scanf("%d", &choix); system("cls"); switch(choix) { case 1 : { printf("Veuillez entrer votre niveau de jeu : \n\t-1 Debutant\n\t-2 Intermediaire\n\t-3 Expert\n"); scanf("%d",&choix); switch(choix) { case 1 : { nombreLigne=9; nombreColonne=9; nbMine=10; } break; case 2 : { nombreLigne=10; nombreColonne=10; nbMine=40; } break; case 3 : { nombreLigne=10; nombreColonne=10; nbMine=60; } break; default : ; } } break; case 2 : personalise (); break; case 3 : printf("=>Les Regles du jeu<=\n\nLe jeu se presente sous la forme d'un tableau de cases a deux dimensions. Certaines cases contiennent des mines. Au depart toutes les cases sont masquees (et on ne voit donc pas les mines). L'objectif est de localiser les mines (le nombre de mines restant a localiser etant donne au joueur). Le joueur peut au choix decouvrir le contenu d'une case, ou la marquer pour signaler la presence d'une mine (c'est son hypothese et le decompte des mines se fixe la dessus). Les cases decouvertes affichent le nombre de mines dans les 8 cases voisines, sauf si la case contient elle meme une mine (auquel cas le joueur meurt et la partie est termine). Si le joueur n'est pas mort, la partie se termine lorsque le joueur a decouvert toutes les cases (sauf celles avec les mines). Son score est le temps mis pour terminer.\n"); break; default : ; } } void jeu ( ) {;} void affichage_tableau (void) { printf(" ");//4 espace for(j=0;j<nombreColonne;j++)//revoir l'initialisation avc la convention { printf("%d ",j); } printf("\n -"); for(j=0;j<nombreColonne;j++) { printf("--"); } for(i=0;i<nombreLigne;i++) { puts(" "); printf("%d | ",i); for(j=0;j<nombreColonne;j++) { printf("x ",tab[i][j]); // affichage du tableau } } puts("\n"); } main(void) { int lignemine,colonnemine,recommencer,tabcase[nombreLigne][nombreColonne], i, j,mine=0,mineAlentour=0,reponse,confirmCase,compteurMine=10,caseDecouverte=0,nbCase=81; do{ system("cls"); textcolor(4); printf("\n\n\n\n\t\t\t\t===>>>LE DEMINEUR<<===\n\n\n\n"); textcolor(2); choisir(); nbCase=nombreColonne*nombreLigne; system("pause"); system("cls"); affichage_tableau( ); /*Initilisation du tableau avec les mines et les mines alentours*/ srand(time(NULL)); for(i=0;i<nombreLigne;i++) { for(j=0;j<nombreColonne;j++) { tab[i][j]=rand( )%2; if ((tab[i][j]>0.5) && (mine<nbMine)) { tab[i][j]=9; mine++; } else{tab[i][j]=0;} } } for(i=0;i<nombreLigne;i++) { for(j=0;j<nombreColonne;j++) { if(tab[i][j]!=9) { if (tab[i-1][j+1]==9) mineAlentour++;//Case diagonale haut gauche if (tab[i][j+1]==9) mineAlentour++;//case du haut if (tab[i+1][j+1]==9) mineAlentour++;//Case diagonale haut droite if (tab[i-1][j]==9) mineAlentour++;//CAse de gauche if (tab[i+1][j]==9) mineAlentour++;//Case de droite if (tab[i-1][j-1]==9) mineAlentour++;//case diagonale bas gauche if (tab[i][j-1]==9) mineAlentour++;//case du bas if (tab[i+1][j-1]==9) mineAlentour++;//case diagonale droite bas tab[i][j]=mineAlentour; } mineAlentour=0; } } printf("\n "); for(j=0;j<nombreColonne;j++) { printf("%d ",j); } printf("\n -"); for(j=0;j<nombreColonne;j++) { printf("--"); } for(i=0;i<nombreLigne;i++) { puts(""); printf("%d | ",i); for(j=0;j<nombreColonne;j++) { printf("%d ",tab[i][j]); // affichage du tableau } } //initialisation du tableau d'affichage// for(i=0;i<nombreLigne;i++) { for(j=0;j<nombreColonne;j++) { tabcase[i][j]=0;//on initialise le tableau a 0 car toutes les cases sont masquées. } } //Choix de la case// while(caseDecouverte<=nbCase-nbMine) { while(confirmCase!=1) {i=-1; confirmCase=0; do{ puts("\nQuelles sont les coordonnees de la case que vous souhaitez choisir (ligne colonne)?"); scanf("%d",&i); scanf("%d",&j); }while(i<0 || i>nombreLigne+1 || j<0 || j>nombreColonne+1); do{ printf("Etes vous sur de vouloir choisir cette case? (1) Oui (2) Non\n"); scanf("%d", &confirmCase); }while(confirmCase<1 || confirmCase>2) } confirmCase=0; //Choix case marquer ou desamorcer printf("Que voulez vous faire de la case %d %d? La desamorcer (1) ou la marquer (2) en tant que mine?\n", i ,j); scanf("%d",&reponse );//Blinder les saisies system("cls"); if(reponse==1 && tab[i][j]!=9)//on affecte a la case une valeur suivant le choix de lutilisateur tabcase[i][j]=1;
Mais j'obtiens l'erreur suivante :
17 non-lvalue in unary `&'
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonjour didy_gwatinik,
Le fait d'appeler la touche F1(aide) que dit ton compilateur ?
As-tu essayé de te mettre en en mode pas à pas ?
Le fait d'appeler la touche F1(aide) que dit ton compilateur ?
As-tu essayé de te mettre en en mode pas à pas ?
Bonjour didy_gwatinik,
J'utilises C++ BORLAND V6 et je passe en mode console.
Pour le travail en mode pas à pas : c'est F7.
Maintenant cela va dépendre de ton environnement, et de l'outil que tu utilises...
Qu'as-tu ?
J'utilises C++ BORLAND V6 et je passe en mode console.
Pour le travail en mode pas à pas : c'est F7.
Maintenant cela va dépendre de ton environnement, et de l'outil que tu utilises...
Qu'as-tu ?
Bonjour didy_gwatinik,
Désolé, je ne connais pas cet outil de développement.
Mais, va voir sur ce site : https://www.developpez.net/forums/
Dans C et C++, il y a DEV C++. Tu auras peut-être plus de chance... Bon courage....
Désolé, je ne connais pas cet outil de développement.
Mais, va voir sur ce site : https://www.developpez.net/forums/
Dans C et C++, il y a DEV C++. Tu auras peut-être plus de chance... Bon courage....
Je ne pense pas que tu es ton temps à perdre mais pourrai tu copier mon code si je te le donne dans ton compilo pour voir l'erreur si tu n'a pas le temps ce n'est pas grave! merci tout de même pour ton aide
Voila tout est la :
#include<stdio.h> #include<conio.c> #include<stdlib.h> #include<time.h> #define nbMine 10 #define nombreLigne 9 #define nombreColonne 9 int i=0, j=0; int tab[nombreLigne][nombreColonne]; void personalise(void) { int Ligne=-1, Colonne=-1; printf("=>Personalisation du jeu<="); while(Ligne<1 || Ligne>10) {puts("\n\nDe quelle longueur voulez vous que votre champ de mine soit? (9 par defaut)"); scanf("%d", &nombreLigne); Ligne=nombreLigne;} while(Colonne<1 || Colonne>10) {puts("\n\nDe quelle largeur voulez vous que votre champ de mine soit? (9 par defaut)"); scanf("%d", &nombreColonne); Colonne=nombreColonne;} do{ puts("\n\nCombien de mines voulez vous avoir a desamorcer? (10 par defaut)"); scanf("%d", &nbMine); }while(nbMine>nombreLigne*nombreColonne); } void choisir (void) { int choix; textcolor(2); printf("Que voulez vous faire?\n\t-1 Commencer a jouer\n\t-2 Personnaliser le jeu\n\t-3 Voir les regles du jeu\n"); scanf("%d", &choix); system("cls"); switch(choix) { case 1 : { printf("Veuillez entrer votre niveau de jeu : \n\t-1 Debutant\n\t-2 Intermediaire\n\t-3 Expert\n"); scanf("%d",&choix); switch(choix) { case 1 : { nombreLigne=9; nombreColonne=9; nbMine=10; } break; case 2 : { nombreLigne=10; nombreColonne=10; nbMine=40; } break; case 3 : { nombreLigne=10; nombreColonne=10; nbMine=60; } break; default : ; } } break; case 2 : personalise (); break; case 3 : printf("=>Les Regles du jeu<=\n\nLe jeu se presente sous la forme d'un tableau de cases a deux dimensions. Certaines cases contiennent des mines. Au depart toutes les cases sont masquees (et on ne voit donc pas les mines). L'objectif est de localiser les mines (le nombre de mines restant a localiser etant donne au joueur). Le joueur peut au choix decouvrir le contenu d'une case, ou la marquer pour signaler la presence d'une mine (c'est son hypothese et le decompte des mines se fixe la dessus). Les cases decouvertes affichent le nombre de mines dans les 8 cases voisines, sauf si la case contient elle meme une mine (auquel cas le joueur meurt et la partie est termine). Si le joueur n'est pas mort, la partie se termine lorsque le joueur a decouvert toutes les cases (sauf celles avec les mines). Son score est le temps mis pour terminer.\n"); break; default : ; } } void jeu ( ) {;} void affichage_tableau (void) { printf(" ");//4 espace for(j=0;j<nombreColonne;j++)//revoir l'initialisation avc la convention { printf("%d ",j); } printf("\n -"); for(j=0;j<nombreColonne;j++) { printf("--"); } for(i=0;i<nombreLigne;i++) { puts(" "); printf("%d | ",i); for(j=0;j<nombreColonne;j++) { printf("x ",tab[i][j]); // affichage du tableau } } puts("\n"); } main(void) { int lignemine,colonnemine,recommencer,tabcase[nombreLigne][nombreColonne], i, j,mine=0,mineAlentour=0,reponse,confirmCase,compteurMine=10,caseDecouverte=0,nbCase=81; do{ system("cls"); textcolor(4); printf("\n\n\n\n\t\t\t\t===>>>LE DEMINEUR<<===\n\n\n\n"); textcolor(2); choisir(); nbCase=nombreColonne*nombreLigne; system("pause"); system("cls"); affichage_tableau( ); /*Initilisation du tableau avec les mines et les mines alentours*/ srand(time(NULL)); for(i=0;i<nombreLigne;i++) { for(j=0;j<nombreColonne;j++) { tab[i][j]=rand( )%2; if ((tab[i][j]>0.5) && (mine<nbMine)) { tab[i][j]=9; mine++; } else{tab[i][j]=0;} } } for(i=0;i<nombreLigne;i++) { for(j=0;j<nombreColonne;j++) { if(tab[i][j]!=9) { if (tab[i-1][j+1]==9) mineAlentour++;//Case diagonale haut gauche if (tab[i][j+1]==9) mineAlentour++;//case du haut if (tab[i+1][j+1]==9) mineAlentour++;//Case diagonale haut droite if (tab[i-1][j]==9) mineAlentour++;//CAse de gauche if (tab[i+1][j]==9) mineAlentour++;//Case de droite if (tab[i-1][j-1]==9) mineAlentour++;//case diagonale bas gauche if (tab[i][j-1]==9) mineAlentour++;//case du bas if (tab[i+1][j-1]==9) mineAlentour++;//case diagonale droite bas tab[i][j]=mineAlentour; } mineAlentour=0; } } printf("\n "); for(j=0;j<nombreColonne;j++) { printf("%d ",j); } printf("\n -"); for(j=0;j<nombreColonne;j++) { printf("--"); } for(i=0;i<nombreLigne;i++) { puts(""); printf("%d | ",i); for(j=0;j<nombreColonne;j++) { printf("%d ",tab[i][j]); // affichage du tableau } } //initialisation du tableau d'affichage// for(i=0;i<nombreLigne;i++) { for(j=0;j<nombreColonne;j++) { tabcase[i][j]=0;//on initialise le tableau a 0 car toutes les cases sont masquées. } } //Choix de la case// while(caseDecouverte<=nbCase-nbMine) { while(confirmCase!=1) {i=-1; confirmCase=0; do{ puts("\nQuelles sont les coordonnees de la case que vous souhaitez choisir (ligne colonne)?"); scanf("%d",&i); scanf("%d",&j); }while(i<0 || i>nombreLigne+1 || j<0 || j>nombreColonne+1); do{ printf("Etes vous sur de vouloir choisir cette case? (1) Oui (2) Non\n"); scanf("%d", &confirmCase); }while(confirmCase<1 || confirmCase>2) } confirmCase=0; //Choix case marquer ou desamorcer printf("Que voulez vous faire de la case %d %d? La desamorcer (1) ou la marquer (2) en tant que mine?\n", i ,j); scanf("%d",&reponse );//Blinder les saisies system("cls"); if(reponse==1 && tab[i][j]!=9)//on affecte a la case une valeur suivant le choix de lutilisateur tabcase[i][j]=1; else{if(reponse==2) tabcase[i][j]=2;} if(tab[i][j]!=9 || reponse==2)//simple case { //Affichage du tableau printf(" ");//4 espace for(j=0;j<nombreColonne;j++) { printf("%d ",j); } printf("\n -"); for(j=0;j<nombreColonne;j++) { printf("--"); } for(i=0;i<nombreLigne;i++) { puts(""); printf("%d | ",i); for(j=0;j<nombreColonne;j++) { if (tabcase[i][j]==1) {textcolor(6);printf("%d " ,tab[i][j]); caseDecouverte++;} if(tabcase[i][j]==2) {textcolor(8);printf("# ");} if(tabcase[i][j]==0) {textcolor(10);printf("x ");} textcolor(2);} } } else{if(tab[i][j]==9)//c'est une mine alors partie perdue puts("Vous avez perdu! Partie terminee"); //Affichage du tableau de début printf(" ");//4 espace for(j=0;j<nombreColonne;j++) { printf("%d ",j); } printf("\n -"); for(j=0;j<nombreColonne;j++) { printf("--"); } for(i=0;i<nombreLigne;i++) { puts(""); printf("%d | ",i); for(j=0;j<nombreColonne;j++) { if(tab[i][j]==9) {textcolor(4);printf("* ");} else{textcolor(2); printf("%d ",tab[i][j]); } textcolor(2); } } caseDecouverte=80;//pour sortir de la boucle } system("pause"); //system("cls"); } // GAGNER if(caseDecouverte>nbCase-nbMine && caseDecouverte!=80) { system("cls"); printf("\a\a\n\nFELICITATIONS !!!, vous avez gagne"); //Affichage du tableau de début printf(" ");//4 espace for(j=0;j<nombreColonne;j++) { puts(""); printf("%d ",j); } printf("\n -"); for(j=0;j<nombreColonne;j++) { printf("--"); } for(i=0;i<nombreLigne;i++) { puts(""); printf("%d | ",i); for(j=0;j<nombreColonne;j++) { if(tab[i][j]==9) {printf("* ");} else{ printf("%d ",tab[i][j]); } } } } textcolor(2); printf("\nVoulez vous (1) recommencer (2) quitter\n"); scanf("%d", &recommencer); }while(recommencer!=2); getch(); return 0; }
Bonjour didy_gwatinik,
Le prototype est : #include <conio.h> et non pas conio.c
Essaye de nouveau...
Le prototype est : #include <conio.h> et non pas conio.c
Essaye de nouveau...
Salut
Revient a la premiere version de ton programme.
En effet tu fait des #define qui créent des constantes et tu les utilise comme entier c'est incorrect. Il faut donc déclarer nombreLigne et nombreColonne comme des entiers (int) comme tu l'avais fait au début.
De plus tu déclare mal tes tableaux : tu ne peut pas déclarer leur taille avec des int il faut utiliser une constante. Tape plutot : int tab[9][9].
Voila dis moi si il reste des erreurs.
++
Revient a la premiere version de ton programme.
En effet tu fait des #define qui créent des constantes et tu les utilise comme entier c'est incorrect. Il faut donc déclarer nombreLigne et nombreColonne comme des entiers (int) comme tu l'avais fait au début.
De plus tu déclare mal tes tableaux : tu ne peut pas déclarer leur taille avec des int il faut utiliser une constante. Tape plutot : int tab[9][9].
Voila dis moi si il reste des erreurs.
++
Bonjour didy_gwatinik,
Voilà le code repris, j'ai trouvé quelque erreurs :
Déclaration d'un tableau à 2 dimensions non déclaré : tabcase[][]...
Do while(...);
Après analyse, j'ai remis int au lieu de #define...
Sur la fin, il y a une parenthèse de trop... plus de courage à la localiser...
Par contre mon compliateur ne "bronche" plus sauf pour la paranthèse...
Un conseil, essaye d'aérer ton code . Saute des lignes...
Remarque : Faute de place je n'ai décalé que d'une case ! Normalement j'en mets 3.
Mets du commentaire; aujourd'hui tout va bien, mais dans 1 an quand il faudra reprendre le code...
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<time.h>
int nbMine=0;
int nombreLigne=9;
int nombreColonne=9;
int i=0, j=0;
int tab[9][9];
//+++++++++++++++++++++++++++++++++++++++++++++++
// Fonction Personaliser
//***********************************************
void personalise(void)
{
int Ligne=-1, Colonne=-1;
printf("=>Personalisation du jeu<=");
while(Ligne<1 || Ligne>10)
{
puts("\n\nDe quelle longueur voulez vous que votre champ de mine soit? (9 par defaut)");
scanf("%d", &tab[nombreLigne]);
Ligne=nombreLigne;
}
while(Colonne<1 || Colonne>10)
{
puts("\n\nDe quelle largeur voulez vous que votre champ de mine soit? (9 par defaut)");
scanf("%d", &tab[nombreColonne]);
Colonne=nombreColonne;
}
do
{
puts("\n\nCombien de mines voulez vous avoir a desamorcer? (10 par defaut)");
scanf("%d", &nbMine);
}while(nbMine>nombreLigne*nombreColonne);
}
//+++++++++++++++++++++++++++++++++++++++
//Fonction choisir
//+++++++++++++++++++++++++++++++++++++++
void choisir (void)
{
int choix;
textcolor(2);
printf("Que voulez vous faire?\n\t-1 Commencer a jouer\n\t-2 Personnaliser le jeu\n\t-3 Voir les regles du jeu\n");
scanf("%d", &choix);
system("cls");
switch(choix)
{
case 1 :
{
printf("Veuillez entrer votre niveau de jeu : \n\t-1 Debutant\n\t-2 Intermediaire\n\t-3 Expert\n");
scanf("%d",&choix);
switch(choix)
{
case 1 :
{
nombreLigne=9;
nombreColonne=9;
nbMine=10;
}
break;
case 2 :
{
nombreLigne=10;
nombreColonne=10;
nbMine=40;
}
break;
case 3 :
{
nombreLigne=10;
nombreColonne=10;
nbMine=60;
}
break;
default : ;
}
}
break;
case 2 :
personalise ();
break;
case 3 :
printf("=>Les Regles du jeu<=\n\nLe jeu se presente sous la forme d'un tableau de cases a deux dimensions. Certaines cases contiennent des mines. Au depart toutes les cases sont masquees (et on ne voit donc pas les mines). L'objectif est de localiser les mines (le nombre de mines restant a localiser etant donne au joueur). Le joueur peut au choix decouvrir le contenu d'une case, ou la marquer pour signaler la presence d'une mine (c'est son hypothese et le decompte des mines se fixe la dessus). Les cases decouvertes affichent le nombre de mines dans les 8 cases voisines, sauf si la case contient elle meme une mine (auquel cas le joueur meurt et la partie est termine). Si le joueur n'est pas mort, la partie se termine lorsque le joueur a decouvert toutes les cases (sauf celles avec les mines). Son score est le temps mis pour terminer.\n");
break;
default : ;
}
}
//+++++++++++++++++++++++++++++++++
//Fonction Jeu
//++++++++++++++++++++++++++++++
void jeu ( )
{;}
//++++++++++++++++++++++++++++++++
//Fonction affichage_tableau
//+++++++++++++++++++++++++++++++
void affichage_tableau (void)
{
printf(" "); //4 espace
for(j=0;j<nombreColonne;j++) //revoir l'initialisation avc la convention
{
printf("%d ",j);
}
printf("\n -");
for(j=0;j<nombreColonne;j++)
{
printf("--");
}
for(i=0;i<nombreLigne;i++)
{
puts(" ");
printf("%d | ",i);
for(j=0;j<nombreColonne;j++)
{
printf("x ",tab[i][j]); // affichage du tableau
}
}
puts("\n");
}
main(void)
{
int lignemine,colonnemine,recommencer;
int i, j,mine=0,mineAlentour=0,reponse,confirmCase,compteurMine=10,caseDecouverte=0,nbCase=81;
do
{
system("cls");
textcolor(4);
printf("\n\n\n\n\t\t\t\t===>>>LE DEMINEUR<<===\n\n\n\n");
textcolor(2);
choisir();
nbCase=nombreColonne*nombreLigne;
system("pause");
system("cls");
affichage_tableau( );
//Initilisation du tableau avec les mines et les mines alentours
srand(time(NULL));
for(i=0;i<nombreLigne;i++)
{
for(j=0;j<nombreColonne;j++)
{
tab[i][j]=rand( )%2;
if ((tab[i][j]>0.5) && (mine<nbMine))
{
tab[i][j]=9;
mine++;
}
else{tab[i][j]=0;}
}
}
for(i=0;i<nombreLigne;i++)
{
for(j=0;j<nombreColonne;j++)
{
if(tab[i][j]!=9)
{
if (tab[i-1][j+1]==9)
mineAlentour++; //Case diagonale haut gauche
if (tab[i][j+1]==9)
mineAlentour++;//case du haut
if (tab[i+1][j+1]==9)
mineAlentour++;//Case diagonale haut droite
if (tab[i-1][j]==9)
mineAlentour++;//CAse de gauche
if (tab[i+1][j]==9)
mineAlentour++;//Case de droite
if (tab[i-1][j-1]==9)
mineAlentour++;//case diagonale bas gauche
if (tab[i][j-1]==9)
mineAlentour++;//case du bas
if (tab[i+1][j-1]==9)
mineAlentour++;//case diagonale droite bas
tab[i][j]=mineAlentour;
}
mineAlentour=0;
}
}
printf("\n ");
for(j=0;j<nombreColonne;j++)
{
printf("%d ",j);
}
printf("\n -");
for(j=0;j<nombreColonne;j++)
{
printf("--");
}
for(i=0;i<nombreLigne;i++)
{
puts("");
printf("%d | ",i);
for(j=0;j<nombreColonne;j++)
{
printf("%d ",tab[i][j]); // affichage du tableau
}
}
//initialisation du tableau d'affichage//
for(i=0;i<nombreLigne;i++)
{
for(j=0;j<nombreColonne;j++)
{
tab[i][j]=0; //on initialise le tableau a 0 car toutes les cases sont masquées.
}
}
//--------------------Choix de la case-----------------------
while(caseDecouverte<=nbCase-nbMine)
{
while(confirmCase!=1)
{
i=-1;
confirmCase=0;
do
{
puts("\nQuelles sont les coordonnees de la case que vous souhaitez choisir (ligne colonne)?");
scanf("%d",&i);
scanf("%d",&j);
}while(i<0 || i>nombreLigne+1 || j<0 || j>nombreColonne+1);
do
{
printf("Etes vous sur de vouloir choisir cette case? (1) Oui (2) Non\n");
scanf("%d", &confirmCase);
}while(confirmCase<1 || confirmCase>2);
}
confirmCase=0;
//-------------Choix case marquer ou desamorcer
printf("Que voulez vous faire de la case %d %d? La desamorcer (1) ou la marquer (2) en tant que mine?\n", i ,j);
scanf("%d",&reponse );//Blinder les saisies
system("cls");
if(reponse==1 && tab[i][j]!=9)//on affecte a la case une valeur suivant le choix de lutilisateur
tab[i][j]=1;
else
{
if(reponse==2)
tab[i][j]=2;}
if(tab[i][j]!=9 || reponse==2)//simple case
{
//Affichage du tableau
printf(" ");//4 espace
for(j=0;j<nombreColonne;j++)
{
printf("%d ",j);
}
printf("\n -");
for(j=0;j<nombreColonne;j++)
{
printf("--");
}
for(i=0;i<nombreLigne;i++)
{
puts("");
printf("%d | ",i);
for(j=0;j<nombreColonne;j++)
{
if (tab[i][j]==1)
{
textcolor(6);printf("%d " ,tab[i][j]);
caseDecouverte++;
}
if(tab[i][j]==2)
{
textcolor(8);printf("# ");
}
if(tab[i][j]==0)
{
textcolor(10);printf("x ");}
textcolor(2);}
}
}
else
{
if(tab[i][j]==9)//c'est une mine alors partie perdue
puts("Vous avez perdu! Partie terminee");
//Affichage du tableau de début
printf(" ");//4 espace
for(j=0;j<nombreColonne;j++)
{
printf("%d ",j);
}
printf("\n -");
for(j=0;j<nombreColonne;j++)
{
printf("--");
}
for(i=0;i<nombreLigne;i++)
{
puts("");
printf("%d | ",i);
for(j=0;j<nombreColonne;j++)
{
if(tab[i][j]==9)
{
textcolor(4);printf("* ");}
else
{
textcolor(2);
printf("%d ",tab[i][j]);
}
textcolor(2);
}
}
caseDecouverte=80;//pour sortir de la boucle
}
system("pause");
//system("cls");
// }
// GAGNER
if(caseDecouverte>nbCase-nbMine && caseDecouverte!=80)
{
system("cls");
printf("\a\a\n\nFELICITATIONS !!!, vous avez gagne");
//Affichage du tableau de début
printf(" ");//4 espace
for(j=0;j<nombreColonne;j++)
{
puts("");
printf("%d ",j);
}
printf("\n -");
for(j=0;j<nombreColonne;j++)
{
printf("--");
}
for(i=0;i<nombreLigne;i++)
{
puts("");
printf("%d | ",i);
for(j=0;j<nombreColonne;j++)
{
if(tab[i][j]==9)
{
printf("* ");}
else
{
printf("%d ",tab[i][j]);
}
}
}
}
textcolor(2);
printf("\nVoulez vous (1) recommencer (2) quitter\n");
scanf("%d", &recommencer);
}while(recommencer!=2);
getch();
return 0;
}
Voilà le code repris, j'ai trouvé quelque erreurs :
Déclaration d'un tableau à 2 dimensions non déclaré : tabcase[][]...
Do while(...);
Après analyse, j'ai remis int au lieu de #define...
Sur la fin, il y a une parenthèse de trop... plus de courage à la localiser...
Par contre mon compliateur ne "bronche" plus sauf pour la paranthèse...
Un conseil, essaye d'aérer ton code . Saute des lignes...
Remarque : Faute de place je n'ai décalé que d'une case ! Normalement j'en mets 3.
Mets du commentaire; aujourd'hui tout va bien, mais dans 1 an quand il faudra reprendre le code...
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<time.h>
int nbMine=0;
int nombreLigne=9;
int nombreColonne=9;
int i=0, j=0;
int tab[9][9];
//+++++++++++++++++++++++++++++++++++++++++++++++
// Fonction Personaliser
//***********************************************
void personalise(void)
{
int Ligne=-1, Colonne=-1;
printf("=>Personalisation du jeu<=");
while(Ligne<1 || Ligne>10)
{
puts("\n\nDe quelle longueur voulez vous que votre champ de mine soit? (9 par defaut)");
scanf("%d", &tab[nombreLigne]);
Ligne=nombreLigne;
}
while(Colonne<1 || Colonne>10)
{
puts("\n\nDe quelle largeur voulez vous que votre champ de mine soit? (9 par defaut)");
scanf("%d", &tab[nombreColonne]);
Colonne=nombreColonne;
}
do
{
puts("\n\nCombien de mines voulez vous avoir a desamorcer? (10 par defaut)");
scanf("%d", &nbMine);
}while(nbMine>nombreLigne*nombreColonne);
}
//+++++++++++++++++++++++++++++++++++++++
//Fonction choisir
//+++++++++++++++++++++++++++++++++++++++
void choisir (void)
{
int choix;
textcolor(2);
printf("Que voulez vous faire?\n\t-1 Commencer a jouer\n\t-2 Personnaliser le jeu\n\t-3 Voir les regles du jeu\n");
scanf("%d", &choix);
system("cls");
switch(choix)
{
case 1 :
{
printf("Veuillez entrer votre niveau de jeu : \n\t-1 Debutant\n\t-2 Intermediaire\n\t-3 Expert\n");
scanf("%d",&choix);
switch(choix)
{
case 1 :
{
nombreLigne=9;
nombreColonne=9;
nbMine=10;
}
break;
case 2 :
{
nombreLigne=10;
nombreColonne=10;
nbMine=40;
}
break;
case 3 :
{
nombreLigne=10;
nombreColonne=10;
nbMine=60;
}
break;
default : ;
}
}
break;
case 2 :
personalise ();
break;
case 3 :
printf("=>Les Regles du jeu<=\n\nLe jeu se presente sous la forme d'un tableau de cases a deux dimensions. Certaines cases contiennent des mines. Au depart toutes les cases sont masquees (et on ne voit donc pas les mines). L'objectif est de localiser les mines (le nombre de mines restant a localiser etant donne au joueur). Le joueur peut au choix decouvrir le contenu d'une case, ou la marquer pour signaler la presence d'une mine (c'est son hypothese et le decompte des mines se fixe la dessus). Les cases decouvertes affichent le nombre de mines dans les 8 cases voisines, sauf si la case contient elle meme une mine (auquel cas le joueur meurt et la partie est termine). Si le joueur n'est pas mort, la partie se termine lorsque le joueur a decouvert toutes les cases (sauf celles avec les mines). Son score est le temps mis pour terminer.\n");
break;
default : ;
}
}
//+++++++++++++++++++++++++++++++++
//Fonction Jeu
//++++++++++++++++++++++++++++++
void jeu ( )
{;}
//++++++++++++++++++++++++++++++++
//Fonction affichage_tableau
//+++++++++++++++++++++++++++++++
void affichage_tableau (void)
{
printf(" "); //4 espace
for(j=0;j<nombreColonne;j++) //revoir l'initialisation avc la convention
{
printf("%d ",j);
}
printf("\n -");
for(j=0;j<nombreColonne;j++)
{
printf("--");
}
for(i=0;i<nombreLigne;i++)
{
puts(" ");
printf("%d | ",i);
for(j=0;j<nombreColonne;j++)
{
printf("x ",tab[i][j]); // affichage du tableau
}
}
puts("\n");
}
main(void)
{
int lignemine,colonnemine,recommencer;
int i, j,mine=0,mineAlentour=0,reponse,confirmCase,compteurMine=10,caseDecouverte=0,nbCase=81;
do
{
system("cls");
textcolor(4);
printf("\n\n\n\n\t\t\t\t===>>>LE DEMINEUR<<===\n\n\n\n");
textcolor(2);
choisir();
nbCase=nombreColonne*nombreLigne;
system("pause");
system("cls");
affichage_tableau( );
//Initilisation du tableau avec les mines et les mines alentours
srand(time(NULL));
for(i=0;i<nombreLigne;i++)
{
for(j=0;j<nombreColonne;j++)
{
tab[i][j]=rand( )%2;
if ((tab[i][j]>0.5) && (mine<nbMine))
{
tab[i][j]=9;
mine++;
}
else{tab[i][j]=0;}
}
}
for(i=0;i<nombreLigne;i++)
{
for(j=0;j<nombreColonne;j++)
{
if(tab[i][j]!=9)
{
if (tab[i-1][j+1]==9)
mineAlentour++; //Case diagonale haut gauche
if (tab[i][j+1]==9)
mineAlentour++;//case du haut
if (tab[i+1][j+1]==9)
mineAlentour++;//Case diagonale haut droite
if (tab[i-1][j]==9)
mineAlentour++;//CAse de gauche
if (tab[i+1][j]==9)
mineAlentour++;//Case de droite
if (tab[i-1][j-1]==9)
mineAlentour++;//case diagonale bas gauche
if (tab[i][j-1]==9)
mineAlentour++;//case du bas
if (tab[i+1][j-1]==9)
mineAlentour++;//case diagonale droite bas
tab[i][j]=mineAlentour;
}
mineAlentour=0;
}
}
printf("\n ");
for(j=0;j<nombreColonne;j++)
{
printf("%d ",j);
}
printf("\n -");
for(j=0;j<nombreColonne;j++)
{
printf("--");
}
for(i=0;i<nombreLigne;i++)
{
puts("");
printf("%d | ",i);
for(j=0;j<nombreColonne;j++)
{
printf("%d ",tab[i][j]); // affichage du tableau
}
}
//initialisation du tableau d'affichage//
for(i=0;i<nombreLigne;i++)
{
for(j=0;j<nombreColonne;j++)
{
tab[i][j]=0; //on initialise le tableau a 0 car toutes les cases sont masquées.
}
}
//--------------------Choix de la case-----------------------
while(caseDecouverte<=nbCase-nbMine)
{
while(confirmCase!=1)
{
i=-1;
confirmCase=0;
do
{
puts("\nQuelles sont les coordonnees de la case que vous souhaitez choisir (ligne colonne)?");
scanf("%d",&i);
scanf("%d",&j);
}while(i<0 || i>nombreLigne+1 || j<0 || j>nombreColonne+1);
do
{
printf("Etes vous sur de vouloir choisir cette case? (1) Oui (2) Non\n");
scanf("%d", &confirmCase);
}while(confirmCase<1 || confirmCase>2);
}
confirmCase=0;
//-------------Choix case marquer ou desamorcer
printf("Que voulez vous faire de la case %d %d? La desamorcer (1) ou la marquer (2) en tant que mine?\n", i ,j);
scanf("%d",&reponse );//Blinder les saisies
system("cls");
if(reponse==1 && tab[i][j]!=9)//on affecte a la case une valeur suivant le choix de lutilisateur
tab[i][j]=1;
else
{
if(reponse==2)
tab[i][j]=2;}
if(tab[i][j]!=9 || reponse==2)//simple case
{
//Affichage du tableau
printf(" ");//4 espace
for(j=0;j<nombreColonne;j++)
{
printf("%d ",j);
}
printf("\n -");
for(j=0;j<nombreColonne;j++)
{
printf("--");
}
for(i=0;i<nombreLigne;i++)
{
puts("");
printf("%d | ",i);
for(j=0;j<nombreColonne;j++)
{
if (tab[i][j]==1)
{
textcolor(6);printf("%d " ,tab[i][j]);
caseDecouverte++;
}
if(tab[i][j]==2)
{
textcolor(8);printf("# ");
}
if(tab[i][j]==0)
{
textcolor(10);printf("x ");}
textcolor(2);}
}
}
else
{
if(tab[i][j]==9)//c'est une mine alors partie perdue
puts("Vous avez perdu! Partie terminee");
//Affichage du tableau de début
printf(" ");//4 espace
for(j=0;j<nombreColonne;j++)
{
printf("%d ",j);
}
printf("\n -");
for(j=0;j<nombreColonne;j++)
{
printf("--");
}
for(i=0;i<nombreLigne;i++)
{
puts("");
printf("%d | ",i);
for(j=0;j<nombreColonne;j++)
{
if(tab[i][j]==9)
{
textcolor(4);printf("* ");}
else
{
textcolor(2);
printf("%d ",tab[i][j]);
}
textcolor(2);
}
}
caseDecouverte=80;//pour sortir de la boucle
}
system("pause");
//system("cls");
// }
// GAGNER
if(caseDecouverte>nbCase-nbMine && caseDecouverte!=80)
{
system("cls");
printf("\a\a\n\nFELICITATIONS !!!, vous avez gagne");
//Affichage du tableau de début
printf(" ");//4 espace
for(j=0;j<nombreColonne;j++)
{
puts("");
printf("%d ",j);
}
printf("\n -");
for(j=0;j<nombreColonne;j++)
{
printf("--");
}
for(i=0;i<nombreLigne;i++)
{
puts("");
printf("%d | ",i);
for(j=0;j<nombreColonne;j++)
{
if(tab[i][j]==9)
{
printf("* ");}
else
{
printf("%d ",tab[i][j]);
}
}
}
}
textcolor(2);
printf("\nVoulez vous (1) recommencer (2) quitter\n");
scanf("%d", &recommencer);
}while(recommencer!=2);
getch();
return 0;
}