Partage
  • Partager sur Facebook
  • Partager sur Twitter

Génerateur de grille de démineur

probleme de generation

    28 décembre 2005 à 14:26:29

    Voila je me suis lancé dans le déminage!!
    Donc pour le moment je veux créer une fonction qui génere une grille de démineur.
    Pour le moment ma fonction place aléatoirement les mines mais je veux qu'elle place aussi sur toutes les cases le nombres de mines qui sont a coté. Je ne comprend pas trop comment faire.

    Voici mon code pour le moment:

    function mineur()
    {
    $mines=0;
    $nbmines = 9;

    // on créer la grille
    $grille = array(

    array(0, 0, 00, 0, 00, 0, 0),
    array(0, 0, 00, 0, 00, 0, 0),
    array(0, 0, 00, 0, 00, 0, 0),

    array(0, 0, 00, 0, 00, 0, 0),
    array(0, 0, 00, 0, 00, 0, 0),
    array(0, 0, 00, 0, 00, 0, 0),

    array(0, 0, 00, 0, 00, 0, 0),
    array(0, 0, 00, 0, 00, 0, 0),
    array(0, 0, 00, 0, 00, 0, 0)

    );
    //on place les mines
    do
    {
           
            $abscisse = rand(0,8);
            $ordonee = rand(0,8);
            if($grille[$abscisse][$ordonee] == "0")
            {       
                    $grille[$abscisse][$ordonee]= "X";
                    $nbmines = $nbmines - 1;
            }
            else
            {
                    $mines = $mines-1;
            }
            $mines++;
    }while($nbmines > 0);

    // on affiche
    for($ebcl = 0; $ebcl < 9; $ebcl++)
    {
            for($ebcl1 = 0; $ebcl1 < 9; $ebcl1++)
            {
                    echo "|<u>".$grille[$ebcl][$ebcl1]."</u>"
            }
            echo "|<br />" ;
    }
    echo "il ya ".$mines." mines";
    }


    Merci de votre aide!!
    • Partager sur Facebook
    • Partager sur Twitter
      28 décembre 2005 à 14:30:37

      Yoop
      Voilà un problème d'algo ^^
      Le meilleur moyen pour toi est de faire une fonction qui parcourt toutes les cases autour et qui retourne le nombre de mines trouvées aux alentours !
      Tu fais cela pour chacune des cases de ton tableau :)
      Voilà bonne aprem :p
      • Partager sur Facebook
      • Partager sur Twitter
        28 décembre 2005 à 14:31:42

        Je peux dire des conneries mais je tente quand meme :

        if($grille[$abscisse][$ordonee] == "0")
        {
        $grille[$abscisse][$ordonee]= "X";
        $nbmines = $nbmines - 1;
        //Rajoute ici
        }

        Tu rajoute :
        $grille[$abscisse++][$ordonne] = $grille[$abscisse++][$ordonne]++ ;
        $grille[$abscisse--][$ordonne] = $grille[$abscisse--][$ordonne]++ ;
        Etc...
        • Partager sur Facebook
        • Partager sur Twitter
          28 décembre 2005 à 14:38:08

          Ta technique ne fonctionne pas puisquil faut verifier si l'on est au bord de la grille!
          Mais je ne vois pas trop comment coder un truc propre.
          Et puis je me pose une question!!
          Faut-il partir des cases vides et les remplir ou partir d'une mine et a jouter 1 a toutes les cases alentours?
          • Partager sur Facebook
          • Partager sur Twitter
            28 décembre 2005 à 14:48:29

              $abscisse = rand(0,8);
                    $ordonee = rand(0,8);
                    if(is_int($grille[$abscisse][$ordonee]))
                    {       
                            $grille[$abscisse][$ordonee]= "X";
                                           
                                            if(is_int($grille[$abscisse+1][$ordonee+1]))
                                            {
                                            $grille[$abscisse+1][$ordonee+1]++;
                                            }
                                            if(is_int($grille[$abscisse+1][$ordonee]))
                                            {
                                            $grille[$abscisse+1][$ordonee]++;
                                            }
                                            if(is_int($grille[$abscisse+1][$ordonee-1]))
                                            {
                                            $grille[$abscisse+1][$ordonee-1]++;
                                            }
                                            if(is_int($grille[$abscisse-1][$ordonee]))
                                            {
                                            $grille[$abscisse-1][$ordonee]++;
                                            }
                                            if(is_int($grille[$abscisse-1][$ordonee+1]))
                                            {
                                            $grille[$abscisse-1][$ordonee+1]++;
                                            }
                                            if(is_int($grille[$abscisse-1][$ordonee-1]))
                                            {
                                            $grille[$abscisse-1][$ordonee-1]++;
                                            }
                                            if(is_int($grille[$abscisse][$ordonee+1]))
                                            {
                                            $grille[$abscisse][$ordonee+1]++;
                                            }
                                            if(is_int( $grille[$abscisse+1][$ordonee-1]))
                                            {
                                            $grille[$abscisse][$ordonee-1]++;
                            }
                            $nbmines = $nbmines - 1;
                    }


            Le code est lourd mais a le merite de marcher ;)
            A mince, parfois il merde... :(
            Enfaite, il a des Y a la place de X ... j'comprends pas la... o_O
            C'est pas souvent mais bon :colere:
            • Partager sur Facebook
            • Partager sur Twitter
              28 décembre 2005 à 15:08:26

              Arf moi aussi j'ai eu le droit au Y a la place des X!!!!

              "S...O...S..." Appelons .. meilleurs.... codeurs...Fin de transmition...

              • Partager sur Facebook
              • Partager sur Twitter
                29 décembre 2005 à 23:02:59

                Voila j'ai réfléchi et je suis arrivé a ceci:
                J'arrive a créer une grille de taille définie par l'utilisateur(toujours carré pour le moment)
                Mes mines sont symbolisées par le chiffre "9"
                Bon ici je genere une grille vramant grande mais c'est pour voir si cela fonctionne. :p
                Place au code :
                <?
                function mineur()
                {
                // Configuration
                $nbmines = 400;
                $taille_grille = 50; // 50² = 625 cases
                $motif = 9;

                // on créer la grille vide
                for($ebcl = 0; $ebcl < $taille_grille; $ebcl++)
                {
                        for($ebcl1 = 0; $ebcl1 < $taille_grille; $ebcl1++)
                        {
                                $grille[$ebcl][$ebcl1] = 0 ;
                        }
                }


                //on place les mines
                $mines = 0;
                do
                {
                       
                        $abscisse = rand(0,$taille_grille - 1);
                        $ordonnee = rand(0,$taille_grille - 1);
                        if($grille[$abscisse][$ordonnee] == 0)
                        {       
                                $grille[$abscisse][$ordonnee]= $motif;
                                $nbmines = $nbmines - 1;
                        }
                        else
                        {
                                $mines = $mines-1;
                        }
                        $mines++;
                }while($nbmines > 0);

                // on place les nombres qui entourent les mines
                for($abs = 0; $abs < $taille_grille; $abs++)
                {
                        for($ord  = 0; $ord < $taille_grille; $ord++)
                        {
                                $compt = 0;
                                if($grille[$abs][$ord] == 0) // si on trouve un 0 on cherche le nombre de mines dans les cases alentours
                                {       
                                        $absmoins = $abs - 1;
                                        $absplus = $abs+ 1;
                                        $ordmoins = $ord - 1;
                                        $ordplus = $ord + 1;
                                       
                                        if( $absmoins >= 0 and $ordmoins >= 0 and $grille[$absmoins][$ordmoins]== $motif) // bas droite
                                        {
                                        $compt++;
                                        }
                                        if( $absplus < $taille_grille  and $ordplus < $taille_grille and $grille[$absplus][$ordplus]== $motif) // haut gauche
                                        {
                                        $compt++;
                                        }
                                        if( $absplus < $taille_grille  and $ordmoins >= 0 and $grille[$absplus][$ordmoins]== $motif) // haut droite
                                        {
                                        $compt++;
                                        }                     
                                        if( $absmoins >= 0  and $ordplus < $taille_grille and $grille[$absmoins][$ordplus]== $motif) // bas gauche
                                        {
                                        $compt++;
                                        }
                                       
                                        if( $absplus < $taille_grille  and $grille[$absplus][$ord]== $motif) //haut
                                        {
                                        $compt++;
                                        }
                                        if( $absmoins >=0  and $grille[$absmoins][$ord]== $motif) //bas
                                        {
                                        $compt++;
                                        }
                                        if( $ordmoins >=0  and $grille[$abs][$ordmoins]== $motif) //droite
                                        {
                                        $compt++;
                                        }
                                        if( $ordplus < $taille_grille  and $grille[$abs][$ordplus]== $motif) //gauche
                                        {
                                        $compt++;
                                        }
                                       
                                        $grille[$abs][$ord] = $compt;
                                }
                               
                        }

                }


                // on affiche
                for($ebcl = 0; $ebcl < $taille_grille; $ebcl++)
                {
                        for($ebcl1 = 0; $ebcl1 < $taille_grille; $ebcl1++)
                        {
                                if($grille[$ebcl][$ebcl1] == 9)
                                {
                                        echo "|<u><font color=\"red\">".$grille[$ebcl][$ebcl1]."</font></u>";
                                }
                                else
                                {
                                        echo "|<u>".$grille[$ebcl][$ebcl1]."</u>";
                                }
                        }
                        echo "|<br />" ;
                }
                echo "il ya ".$mines." mines";
                }

                // on appelle la fonction
                mineur();

                ?>
                • Partager sur Facebook
                • Partager sur Twitter

                Génerateur de grille de 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