Aide programme démineur

Aide programme démineur - Java - Programmation

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

Reply

Marsh Posté le 30-04-2013 à 16:18:38   

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed