Bonsoir à tous,
Je dois créer le jeu du démineur en python en plusieurs étapes.
Voici l'une d'elle:
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).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...
Voila ou j'en suis:
Merci pour vos remarques sur ce code.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)
Bonne soirée
-----