Partage
  • Partager sur Facebook
  • Partager sur Twitter

Jeu démineur.

Problème pour une fonction

    27 avril 2016 à 11:47:15

    Bonjour, je code un démineur et je bloque sur la fonction suivante :

    " public static void decouvrir(int nc, int nl, Projet.Demineur demineur)

    Fonction de "decouverture" par exploration de toutes les cases sans mine joignables a partir d'une position germe en ne passant que par des cases sans mine.
    Parameters:
    nc - Le numero de colonne de la case germe.
    nl - Le numero de ligne de la case germe.
    demineur - Le demineur.  "
    Je bloque totalement sur cette fonction, je ne vois pas du tout comment faire. Merci à ceux qui m'aideront.

    Bonne journée/soirée !
    • Partager sur Facebook
    • Partager sur Twitter
      27 avril 2016 à 12:07:26

      Bonjour,

      Tu explores les huits cases autour de ta case germe et a chaque fois que l'une de ces cases est une case sans mine autour tu appelles la fonction découvrir  (c'est une fonction récursive)

      • Partager sur Facebook
      • Partager sur Twitter
        27 avril 2016 à 12:31:20

        Bonjour, je vais essayer de développer ça, mais je ne voit pas trop comment faire du tout, j'ai le fonctionnement en tête mais je ne sais pas comment faire ça ne java..

        • Partager sur Facebook
        • Partager sur Twitter
          27 avril 2016 à 16:11:09

          public static void decouvrir(int nc, int nc, Projet.Demineur demineur){
          	int i = 0;
          	int j = 0;
          	int k = 0;
              while (i != 0);
              {
                
                for (j=0; j < demineur.nbLignes; j++) {
                  for (k = 0; k < demineur.nbColonnes; k++) {
                    if ((demineur.casesJouees[j][k] == 0) && (existerUneCaseVideDecouverteDansVoisinage(k, j, paramDemineur)))
                    {
                      i = 1;
                      demineur.nbCases ++;
                      demineur.casesJouees[j][k] = 1;
                    }
                  }
                
              } 
            }
            }
          J'ai fais ça mais je ne pense pas que ça soit la bonne méthode..

          Ps : La fonction existerUneCaseVideDecouverteDansVoisinage est la suivante :
          public static boolean existerUneCaseVideDecouverteDansVoisinage(int c, int l,Projet.Demineur demineur){
          			
          			boolean res = false;
          			for (int ligne = l - 1 ; l < ligne + 1 ; ligne++) {
          			     for (int colonne = c - 1 ; l < colonne + 1 ; colonne++) {
          			          if (aucuneMinePresenteEtCaseDecouverte(colonne, ligne, demineur) && !(ligne == l && colonne == c)) {
          			              res= true;
          			          }
          			      }
          			}
          
          			return res;
          			}
          	


          • Partager sur Facebook
          • Partager sur Twitter
            27 avril 2016 à 16:21:44

            Tu prends le problème à l'envers, tu scan chaque case en regardant si il y a une case vide autour alors qu'il faut que tu prennes ta case vide et tu regarde au tour d'elle.

            Tu as les coordonnées de ta case vide tu sais que tu donne scanner les case de {x-1,y-1} à {x+1,y+1}

            Après j'ai l'impression que le seul objet de ton démineur et les démineur lui même. Il serait mieux de faire un objet Case avec des méthodes telque estDécouverte(), estVide(), etc. Cela simplifiait le nom de tes fonctions (parce que existerUneCaseVideDecouverteDansVoisinage() c'est quand même vachement long), ferait gagner du temps et te simplifierait le travail

            • Partager sur Facebook
            • Partager sur Twitter
              27 avril 2016 à 21:35:39

              Les noms des fonctions sont celles du "cahier des charges" si ça tenais qu'à moi j'aurai fais comme tu me le dis... 

              Après j'ai du mal à voir comment faire ce que tu me dis.. :-(

              • Partager sur Facebook
              • Partager sur Twitter
                27 avril 2016 à 21:58:06


                Tu as une case vide de coordonnée {nc;nl}, tu sais que tu dois dévoiler tous les cases qui sont autour donc {nc-1;nl-1},{nc;nl-1},{nc+1;nl-1}

                {nc-1;nl},{nc+1;nl},{nc-1;nl+1},{nc;nl+1},{nc+1;nl+1}

                RémiBerger a écrit:

                Les noms des fonctions sont celles du "cahier des charges" si ça tenais qu'à moi j'aurai fais comme tu me le dis... 


                Un peu con de donner un exercice en Java sans faire d'objet >_<
                • Partager sur Facebook
                • Partager sur Twitter
                  28 avril 2016 à 8:33:16

                  Bonjour,

                  Si je me rappelle bien, quand on ouvre une case, on a 3 possibilités

                  1) Mine : c'est perdu

                  2) Pas de mine mais des mines adjacentes : on ouvre juste cette case

                  3) Pas de mines et 0 mines adjacentes : on ouvre toutes les cases adjacentes et on propage l'ouverture à toutes les cases adjacentes sans mines

                  Pour le 3, regarde l'algrithme Depth-First Search (parcours en profondeur en français).

                  • Partager sur Facebook
                  • Partager sur Twitter
                    28 avril 2016 à 11:42:08

                    Bonjour, merci de toutes vos réponses malheureusement après queques heures passées dessus je n'ai toujours pas aboutis a quelque chose.. Je vais donc surement laisser tomber ce projet.. Merci quand même à tous pour vos réponses..

                    Bonne journée.
                    • Partager sur Facebook
                    • Partager sur Twitter

                    Jeu démineur.

                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                    • Editeur
                    • Markdown