Bonjour à tous ! J'ai commencé le java il y a très peu de temps et je dois créer un démineur. Le problème étant que je ne comprends pas ce que je dois modifier afin de réussir à le compiler. Si vous réussissiez à m'aider vous me seriez d'un grand secours. Merci d'avance !
Voici le programme:
import java.util.Scanner; public class Demi {
int lignes,colonnes; // lignes les lignes, colonnes les colonnes int NMA; // Nombre de mines autour int NbMines; // le nombre de mines choisi par le joueur int choix; // le choix effectué par le joueur pour découvrir ou placer un drapeau int nbCaseVue; // nombre de case dévoilée
Scanner sc = new Scanner(System.in);
char [][]t1 = new char [10][10];; // grille de jeu char [][]t2 = new char [10][10]; // la grille avec les mines
/* * FONCTION INITIALISATION */ public void Init() { for(lignes=0;lignes<10;lignes++) { for(colonnes=0;colonnes<10;colonnes++) { t1[lignes][colonnes]='-';//' 'implique case cachée t2[lignes][colonnes]='0'; } } }
/* * FONCTION PLACER LES MINES */ public void PlaceMines() { int CompteMines;//compteur de mines for (CompteMines=0;CompteMines<NbMines;CompteMines++) { lignes=(int) (Math.random()%10);//on choisit la ligne de manière aléatoire colonnes=(int) (Math.random()%10);//on choisit la colonne de manière aléatoire if(t2[lignes][colonnes]=='0')//On vérifie que la case est libre { t2[lignes][colonnes]='M';//on place un M pour indiquer qu'il y a une mine }
else { NbMines++;//Sinon, il y a déjà un M et il faut faire un tour de plus } } }
/* * FONCTION QUI REGARDE SI IL Y A UNE MINE * Fonction qui permet de savoir il y a une mine sur la case donnée en paramètre * retourne 1 si il y a une case sinon 0 */ int RegarderMine(final int _lignes, final int _colonnes) { if( _lignes >= 0 && _lignes < 10 && _colonnes >= 0 && _colonnes < 10 && t2[_lignes][_colonnes]=='M') return 1; return 0; }
/* * FONCTION CALCULER LE NB DE MINES AUTOUR * fonction équivalente à NbMinesAutour() mais qui prend les paramètres de position de case * retourne le nombre de mine qui se trouve autour d'une position */ int NbMinesAutourBis(final int _lignes, final int _colonnes) { int NbMA = 0;
/* * FONCTION QUI CHERCHE LES CASES PROCHE DES MINES * fonction appelé que si le nombre de mine qui se trouve autour d'elle est 0 * fonction récursive, qui demande a ses voisins de devoilé leur case */ public void DevoileCase(final int _lignes, final int _colonnes) { if( _lignes >= 0 && _lignes < 10 && _colonnes >= 0 && _colonnes < 10 && t1[_lignes][_colonnes]=='-') { int NbMA = NbMinesAutourBis(_lignes,_colonnes); t1[_lignes][_colonnes]=(char) ('0'+NbMA); ++nbCaseVue;
/* * FONCTION AFFICHER LA GRILLE DE JEU * affiche le tableau JEU */ public void AfficheJeu() { System.out.println("\n\n" ); System.out.println(" | 1 2 3 4 5 6 7 8 9 10\n" ); System.out.println("___|______________________________\n" ); for(lignes=0;lignes<10;lignes++) { if(lignes<9) System.out.println(" %d | ",lignes+1); else System.out.println("%d | ",lignes+1); for(colonnes=0;colonnes<10;colonnes++) { System.out.println("%c ",t1[lignes][colonnes]); } System.out.println("\n" ); } }
/* * FONCTION CALCULER LE NB DE MINES AUTOUR * renvoie le nombre de mine autour d'une position qui se trouve en i j * renvoie -1 si on se trouve sur une mine sinon le nombre de mine autour */ int NbMinesAutour() { NMA=0; if(t2[lignes][colonnes]=='M') // on se trouve sur une mine { NMA = -1; } else { NMA+=RegarderMine(lignes+1, colonnes); NMA+=RegarderMine(lignes+1, colonnes+1); NMA+=RegarderMine(lignes, colonnes+1); NMA+=RegarderMine(lignes-1, colonnes); NMA+=RegarderMine(lignes-1, colonnes-1); NMA+=RegarderMine(lignes, colonnes-1);
/* * FONCTION JOUER * dévoiler une case ou placer un drapeau */ public void Jouer() { switch (choix) { case 1 : // On dévoile une case if( NbMinesAutour() != -1 ) // Si on est pas sur une mine { if( NMA == 0 ) // Si on n'a pas de mine comme voisin DevoileCase(lignes,colonnes); else // Sinon, si on a au moins une mine comme voisin { t1[lignes][colonnes]=(char) ('0'+NMA); ++nbCaseVue; } } break;
case 2 : // On met un drapeau t1[lignes][colonnes]='D'; break; } }
/* * FONCTION CHOISIR * On demande au joueur de choisir une case */ public void Choisir() { System.out.println("\n\nVeuillez entrer la case choisie (numero de ligne [espace] numero de colonne):\t" ); int T = sc.nextInt (); Comptes = new double[T];("%d %d",&lignes,&colonnes); System.out.println("Vous avez choisi la case (%d,%d).\n Que voulez-vous faire ?\n",lignes,colonnes); lignes-=1; colonnes-=1;
System.out.println("\t1. Decouvrir une case\n" ); System.out.println("\t2. Placer un drapeau" ); do { System.out.println("\t\tVotre choix : " ); int T = sc.nextInt (); Comptes = new double[T];("%d",&choix); } while (choix!=1 && choix!=2); // faut pas se compliquer tu as que 2 choix donc que 2 comparaisons }
/* * Fonction main * lancement du jeu */ int main() { sRand((time)Null);
//Afficher le début du jeu System.out.println(" ________________________________\n" ); System.out.println("| |\n" ); System.out.println("| Démineur |\n" ); System.out.println("|________________________________|\n\n" );
Init();
do // Choisir le nombre de mine dans le demineur { System.out.println("\nCombien de mines voulez-vous ?(entre 1 et 50)\n\n" ); int T = sc.nextInt (); Comptes = new double[T];("%d",&NbMines); } while(NbMines<=0 && NbMines>50); // nombre de mines comprise entre 1 et 50 sinon on redemande
System.out.println("D'accord, vous avez choisi de jouer avec %d mines\n\n",NbMines); PlaceMines();
System.out.println("Voici la grille des mines pour controle:\n" ); for(lignes=0;lignes<10;lignes++) { System.out.println("\t\t\t" ); for(colonnes=0;colonnes<10;colonnes++) { System.out.println("%c ",t2[lignes][colonnes]); } System.out.println("\n" ); }
System.out.println("\n\nVoici votre grille : A vous de jouer !\n\n" ); nbCaseVue=0; while( nbCaseVue<(100-NbMines) && NMA != -1 ) // On regarde si on a vu toutes les cases sans mines ou qu'on a touché une mine { AfficheJeu(); Choisir(); Jouer(); }
if( NMA != -1 ) // On a gagné { System.out.println("\n\n\t\tBravo vous avez gagné !" ); AfficheJeu(); } else // On a perdu { System.out.println("Vous avez perdu !!!\n\n" );
Marsh Posté le 30-04-2013 à 16:18:38
Bonjour à tous ! J'ai commencé le java il y a très peu de temps et je dois créer un démineur. Le problème étant que je ne comprends pas ce que je dois modifier afin de réussir à le compiler. Si vous réussissiez à m'aider vous me seriez d'un grand secours. Merci d'avance !
Voici le programme:
import java.util.Scanner;
public class Demi {
int lignes,colonnes; // lignes les lignes, colonnes les colonnes
int NMA; // Nombre de mines autour
int NbMines; // le nombre de mines choisi par le joueur
int choix; // le choix effectué par le joueur pour découvrir ou placer un drapeau
int nbCaseVue; // nombre de case dévoilée
Scanner sc = new Scanner(System.in);
char [][]t1 = new char [10][10];; // grille de jeu
char [][]t2 = new char [10][10]; // la grille avec les mines
/*
* FONCTION INITIALISATION
*/
public void Init()
{
for(lignes=0;lignes<10;lignes++)
{
for(colonnes=0;colonnes<10;colonnes++)
{
t1[lignes][colonnes]='-';//' 'implique case cachée
t2[lignes][colonnes]='0';
}
}
}
/*
* FONCTION PLACER LES MINES
*/
public void PlaceMines()
{
int CompteMines;//compteur de mines
for (CompteMines=0;CompteMines<NbMines;CompteMines++)
{
lignes=(int) (Math.random()%10);//on choisit la ligne de manière aléatoire
colonnes=(int) (Math.random()%10);//on choisit la colonne de manière aléatoire
if(t2[lignes][colonnes]=='0')//On vérifie que la case est libre
{
t2[lignes][colonnes]='M';//on place un M pour indiquer qu'il y a une mine
}
else
{
NbMines++;//Sinon, il y a déjà un M et il faut faire un tour de plus
}
}
}
/*
* FONCTION QUI REGARDE SI IL Y A UNE MINE
* Fonction qui permet de savoir il y a une mine sur la case donnée en paramètre
* retourne 1 si il y a une case sinon 0
*/
int RegarderMine(final int _lignes, final int _colonnes)
{
if( _lignes >= 0 && _lignes < 10 && _colonnes >= 0 && _colonnes < 10 && t2[_lignes][_colonnes]=='M')
return 1;
return 0;
}
/*
* FONCTION CALCULER LE NB DE MINES AUTOUR
* fonction équivalente à NbMinesAutour() mais qui prend les paramètres de position de case
* retourne le nombre de mine qui se trouve autour d'une position
*/
int NbMinesAutourBis(final int _lignes, final int _colonnes)
{
int NbMA = 0;
NbMA+=RegarderMine(_lignes+1, _colonnes);
NbMA+=RegarderMine(_lignes+1, _colonnes+1);
NbMA+=RegarderMine(_lignes, _colonnes+1);
NbMA+=RegarderMine(_lignes-1, _colonnes);
NbMA+=RegarderMine(_lignes-1, _colonnes-1);
NbMA+=RegarderMine(_lignes, _colonnes-1);
NbMA+=RegarderMine(_lignes+1, _colonnes-1);
NbMA+=RegarderMine(_lignes-1, _colonnes+1);
return NbMA;
}
/*
* FONCTION QUI CHERCHE LES CASES PROCHE DES MINES
* fonction appelé que si le nombre de mine qui se trouve autour d'elle est 0
* fonction récursive, qui demande a ses voisins de devoilé leur case
*/
public void DevoileCase(final int _lignes, final int _colonnes)
{
if( _lignes >= 0 && _lignes < 10 && _colonnes >= 0 && _colonnes < 10 && t1[_lignes][_colonnes]=='-')
{
int NbMA = NbMinesAutourBis(_lignes,_colonnes);
t1[_lignes][_colonnes]=(char) ('0'+NbMA);
++nbCaseVue;
if( NbMA == 0 ) // partie récursive
{
DevoileCase(_lignes+1,_colonnes);
DevoileCase(_lignes+1,_colonnes+1);
DevoileCase(_lignes,_colonnes+1);
DevoileCase(_lignes-1,_colonnes);
DevoileCase(_lignes-1,_colonnes-1);
DevoileCase(_lignes,_colonnes-1);
DevoileCase(_lignes-1,_colonnes+1);
DevoileCase(_lignes+1,_colonnes-1);
}
}
}
/*
* FONCTION AFFICHER LA GRILLE DE JEU
* affiche le tableau JEU
*/
public void AfficheJeu()
{
System.out.println("\n\n" );
System.out.println(" | 1 2 3 4 5 6 7 8 9 10\n" );
System.out.println("___|______________________________\n" );
for(lignes=0;lignes<10;lignes++)
{
if(lignes<9)
System.out.println(" %d | ",lignes+1);
else
System.out.println("%d | ",lignes+1);
for(colonnes=0;colonnes<10;colonnes++)
{
System.out.println("%c ",t1[lignes][colonnes]);
}
System.out.println("\n" );
}
}
/*
* FONCTION CALCULER LE NB DE MINES AUTOUR
* renvoie le nombre de mine autour d'une position qui se trouve en i j
* renvoie -1 si on se trouve sur une mine sinon le nombre de mine autour
*/
int NbMinesAutour()
{
NMA=0;
if(t2[lignes][colonnes]=='M') // on se trouve sur une mine
{
NMA = -1;
}
else
{
NMA+=RegarderMine(lignes+1, colonnes);
NMA+=RegarderMine(lignes+1, colonnes+1);
NMA+=RegarderMine(lignes, colonnes+1);
NMA+=RegarderMine(lignes-1, colonnes);
NMA+=RegarderMine(lignes-1, colonnes-1);
NMA+=RegarderMine(lignes, colonnes-1);
NMA+=RegarderMine(lignes+1, colonnes-1);
NMA+=RegarderMine(lignes-1, colonnes+1);
}
return NMA;
}
/*
* FONCTION JOUER
* dévoiler une case ou placer un drapeau
*/
public void Jouer()
{
switch (choix)
{
case 1 : // On dévoile une case
if( NbMinesAutour() != -1 ) // Si on est pas sur une mine
{
if( NMA == 0 ) // Si on n'a pas de mine comme voisin
DevoileCase(lignes,colonnes);
else // Sinon, si on a au moins une mine comme voisin
{
t1[lignes][colonnes]=(char) ('0'+NMA);
++nbCaseVue;
}
}
break;
case 2 : // On met un drapeau
t1[lignes][colonnes]='D';
break;
}
}
/*
* FONCTION CHOISIR
* On demande au joueur de choisir une case
*/
public void Choisir()
{
System.out.println("\n\nVeuillez entrer la case choisie (numero de ligne [espace] numero de colonne):\t" );
int T = sc.nextInt ();
Comptes = new double[T];("%d %d",&lignes,&colonnes);
System.out.println("Vous avez choisi la case (%d,%d).\n Que voulez-vous faire ?\n",lignes,colonnes);
lignes-=1;
colonnes-=1;
System.out.println("i : %d | j : %d\n",lignes,colonnes);
System.out.println("\t1. Decouvrir une case\n" );
System.out.println("\t2. Placer un drapeau" );
do
{
System.out.println("\t\tVotre choix : " );
int T = sc.nextInt ();
Comptes = new double[T];("%d",&choix);
}
while (choix!=1 && choix!=2); // faut pas se compliquer tu as que 2 choix donc que 2 comparaisons
}
/*
* Fonction main
* lancement du jeu
*/
int main()
{
sRand((time)Null);
//Afficher le début du jeu
System.out.println(" ________________________________\n" );
System.out.println("| |\n" );
System.out.println("| Démineur |\n" );
System.out.println("|________________________________|\n\n" );
Init();
do // Choisir le nombre de mine dans le demineur
{
System.out.println("\nCombien de mines voulez-vous ?(entre 1 et 50)\n\n" );
int T = sc.nextInt ();
Comptes = new double[T];("%d",&NbMines);
}
while(NbMines<=0 && NbMines>50); // nombre de mines comprise entre 1 et 50 sinon on redemande
System.out.println("D'accord, vous avez choisi de jouer avec %d mines\n\n",NbMines);
PlaceMines();
System.out.println("Voici la grille des mines pour controle:\n" );
for(lignes=0;lignes<10;lignes++)
{
System.out.println("\t\t\t" );
for(colonnes=0;colonnes<10;colonnes++)
{
System.out.println("%c ",t2[lignes][colonnes]);
}
System.out.println("\n" );
}
System.out.println("\n\nVoici votre grille : A vous de jouer !\n\n" );
nbCaseVue=0;
while( nbCaseVue<(100-NbMines) && NMA != -1 ) // On regarde si on a vu toutes les cases sans mines ou qu'on a touché une mine
{
AfficheJeu();
Choisir();
Jouer();
}
if( NMA != -1 ) // On a gagné
{
System.out.println("\n\n\t\tBravo vous avez gagné !" );
AfficheJeu();
}
else // On a perdu
{
System.out.println("Vous avez perdu !!!\n\n" );
System.out.println(" | 1 2 3 4 5 6 7 8 9 10\n" );
System.out.println("___|______________________________\n" );
for(lignes=0;lignes<10;lignes++)
{
if(lignes<9)
System.out.println(" %d | ",lignes+1);
else
System.out.println("%d | ",lignes+1);
for(colonnes=0;colonnes<10;colonnes++)
System.out.println("%c ",t2[lignes][colonnes]);
System.out.println("\n" );
}
}
System.out.println("pause" );
return 0;
}
}