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;
}
}
Partager