Le démineur , python
Répondre à la discussion
Affichage des résultats 1 à 3 sur 3

Le démineur , python



  1. #1
    invite4c80defd

    Le démineur , python


    ------

    Bonsoir à tous,
    Je dois créer le jeu du démineur en python en plusieurs étapes.
    Voici l'une d'elle:

    Code HTML:
    La partie complexe du démineur est la propagation des cases sûres : si une case sans mine n'a aucun voisin avec une mine, on peut automatiquement découvrir les cases voisines, etc. C'est ceci qui permet d'obtenir la configuration de droite en un seul clic sur le coin supérieur gauche :
    
    On parle de composante connexe : on découvre toutes les cases qui ne contiennent rien (ni de mine, ni un entier strictement supérieur à 0), en s'arrêtant aux cases qui contiennent un entier strictement supérieur à 0.
    
    Le plus simple pour programmer cette opération est d'utiliser une fonction récursive. Le calcul de la composante connexe au démineur se fait de la manière suivante : pour une case donnée (sans mine),
    
    si la case était déjà découverte (etat != INCONNU), on s'arrête,
    sinon :
    on compte le nombre de mines voisines : c,
    on met à jours cette case dans le plateau (etat = c),
    on teste :
    si la case a au moins une mine parmi ses voisine, on s'arrête,
    si la case n'a aucune mine parmi ses voisines, on recommence la fonction récursivement sur toutes les cases voisines.
    Cette fonction s'arrête forcement au bout d'un moment car on ne fait pas d'appel récursif si la case de départ était déjà découverte. Comme toutes les cases qu'on explore sont découverte, il ne peut pas y avoir de boucle infinie...
    Avec un collègue, nous avons écrit une éventuelle réponse à cette question mais le prof m'a dit qu'il manque un petit quelque chose à cette fonction, mais je ne vois pas trop quoi car je ne pense pas avoir oublié d'étapes (ou du moins c'est ce que je crois).

    Voila ou j'en suis:
    Code:
            
    def composante_connexe(plateau, x, y):
        """Met le plateau à jour en ouvrant toutes les cases vides à partir de la
    case "(x,y)".
    Attention, c'est une procédure..."""
        
    
        if plateau[x][y]["etat"]!=INCONNU:
            return
        
        else:
            c=compte_mines_voisines(x,y,plateau)
            plateau[x][y]["etat"] = c
            if c!=0:
                return
            else:
                voisines=cases_voisines(plateau,x,y)
                for i in range(len(voisines)):
                    composante_connexe(plateau, voisines[i][0], voisines[i][1])
        print(plateau)
    Merci pour vos remarques sur ce code.
    Bonne soirée

    -----

  2. #2
    invitee840409b

    Re : Le démineur , python

    J'ai l'impression que ce code ne se termine jamais. Imagines que tu as de cases l'une à côté de l'autre : à chaque appel de composante_connexe, composante_connexe va s'appeller elle-même pour l'autre case.
    As-tu au moins testé le code ?

    Par ailleurs, tu as fait une boucle for comme on la ferait en C. Mais il y a une bien plus belle méthode en Python, regarde :

    Code:
                for (voisine_x, voisine_y) in voisines:
                    composante_connexe(plateau, voisine_x, voisine_y)
    Valentin

  3. #3
    invite4c80defd

    Re : Le démineur , python

    Malheureusement, il me faut une autre partie de code faite par le prof pour tester ce code (avec la plateau, les trucs graphiques etc...), je ne peux pas le faire comme ça ...
    Vous disiez que le code se termine jamais: au niveau de quelle ligne y -aurait-il un problème ?

Discussions similaires

  1. Python
    Par invitee0960580 dans le forum Programmation et langages, Algorithmique
    Réponses: 2
    Dernier message: 02/12/2012, 09h36
  2. devenir demineur
    Par invitee804a465 dans le forum Orientation avant le BAC
    Réponses: 1
    Dernier message: 15/02/2011, 17h20
  3. devenir plongeur démineur ??
    Par inviteb5bd0c79 dans le forum Orientation après le BAC
    Réponses: 2
    Dernier message: 17/03/2010, 18h34
  4. demineur en c
    Par invite43ebc126 dans le forum Logiciel - Software - Open Source
    Réponses: 4
    Dernier message: 03/02/2008, 12h03
  5. Probabilité et démineur de Windows
    Par Bleyblue dans le forum Mathématiques du supérieur
    Réponses: 13
    Dernier message: 21/02/2005, 12h58