Labyrinthe à bille

Fermé
mistoufleee Messages postés 19 Date d'inscription samedi 10 mars 2018 Statut Membre Dernière intervention 10 mars 2018 - Modifié le 10 mars 2018 à 12:49
yg_be Messages postés 22729 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 - 10 mars 2018 à 19:49
Bonjour,
Pour un projet, j'aimerais créer un labyrinthe à billes...
J'ai modélisé mon labyrinthe par un tableau numpy
J'aimerais d'abord modéliser un mouvement vers la droite.
J'ai donc créer un tableau contenant des 2(chemin), 0(trous) et 1(mur). Ce tableau contient également un 4 qui correspondrait à la sortie. J'ai essayé de créer ce programme pour un mouvement vers la droite, mais j'ai l'impression que ma boucle ne marche pas...
Voici mon programme:

Quelqu'un pourrait-il m'aider à trouver mon erreur ? Merci d'avance !

2 réponses

yg_be Messages postés 22729 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 477
Modifié le 10 mars 2018 à 12:15
bonjour,
"ma boucle ne marche pas": comment se comporte-t-elle?
merci de partager le texte du programme, en utilisant la coloration syntaxique, et pas l'image du programme.
pourrais-tu expliquer la logique de ton algorithme? je crois deviner que "5" marque la position de la bille. cependant, on dirait que tu oublies de tenir compte de cette position. ne devrais-tu pas mémoriser les coordonnées de cette position?
0
mistoufleee Messages postés 19 Date d'inscription samedi 10 mars 2018 Statut Membre Dernière intervention 10 mars 2018
10 mars 2018 à 12:13
bonjour!
Qu'entendez-vous par comment se comporte-elle ? Je vous avoue que j'ai commencé cette année la programmation....
De plus, je ne sais pas comment utiliser la coloration syntaxique sur ce site...
0
yg_be Messages postés 22729 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 477
10 mars 2018 à 12:25
je comprends maintenant que ton programme ne fonctionne que quand la bille est en 0,0.
quand tu atteins un mur, je pense qu'il faut simplement arrêter la boucle, sans rien changer dans le tableau
dans le cas "else", il faut mettre 2 en (0,k-1), et mettre 5 en (0,k)
0
mistoufleee Messages postés 19 Date d'inscription samedi 10 mars 2018 Statut Membre Dernière intervention 10 mars 2018
Modifié le 10 mars 2018 à 12:30
Merci pour ton aide, mais j'ai essayé mais je pense qu'il y a déjà un autre problème car le programme me renvoie le tableau avec la bille en première position comme ci la boucle n'avait pas été prise en compte...?
Peut-être qu'il manque un k=k+1 quelque part pour que la boucle continue a tourner...?
0
yg_be Messages postés 22729 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 477 > mistoufleee Messages postés 19 Date d'inscription samedi 10 mars 2018 Statut Membre Dernière intervention 10 mars 2018
10 mars 2018 à 12:35
quand tu atteins un mur, je pense qu'il faut simplement arrêter la boucle, sans rien changer dans le tableau
dans le cas "else", il faut mettre 2 en (0,k-1), et mettre 5 en (0,k) (et, évidemment, ne pas faire return dans le else)
0
mistoufleee Messages postés 19 Date d'inscription samedi 10 mars 2018 Statut Membre Dernière intervention 10 mars 2018
10 mars 2018 à 12:39
Ah oui.. Mais le programme affiche plusieurs tableau avec la bille qui se positionne sur toutes les cases avant le mur... Il m'a affiché 3 tableaux car il y avait deux 2 (chemin) avant le mur (plus le tableau ou la bille est en premiere position..)
0
yg_be Messages postés 22729 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 477
10 mars 2018 à 18:46
    while True:
        deplacement = input("Quel deplacement souhaitez-vous effectuer ?") 
        if deplacement == "Droite": 
            dl=0
            dc=1
        elif deplacement == "Gauche": 
            dl=0
            dc=-1
        elif deplacement == "Bas": 
            dl=1
            dc=0
        elif deplacement == "Haut": 
            dl=-1
            dc=0
        else :
            continue
        while A[ligne+dl,colonne+dc]==2 :
                A[ligne,colonne] = 2 
                colonne = colonne + dc
                ligne=ligne+dl
                A[ligne,colonne]  = 5
        print(A)
        if A[ligne,colonne] == 0: 
            print("Game Over") 
            return
        elif A[ligne,colonne] == 4: 
            print("Well play") 
            return
0
mistoufleee Messages postés 19 Date d'inscription samedi 10 mars 2018 Statut Membre Dernière intervention 10 mars 2018
10 mars 2018 à 18:56
Merci beaucoup de consacrer autant de temps à m'aider...
Mais je dois avouer que je ne comprends pas votre programme... que sont dl et cd ?? (les positions initiales de la bille??)
Et après le 2ème while, je ne comprends plus rien...
0
yg_be Messages postés 22729 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 477 > mistoufleee Messages postés 19 Date d'inscription samedi 10 mars 2018 Statut Membre Dernière intervention 10 mars 2018
10 mars 2018 à 19:49
dl et dc représentent le déplacement choisi. par exemple, aller à gauche, c'est rester sur la même ligne (dl=0) et augmenter de 1 le numéro de colonne (dc=1).
le deuxième while,
 while A[ligne+dl,colonne+dc]==2 :
                A[ligne,colonne] = 2 
                colonne = colonne + dc
                ligne=ligne+dl
                A[ligne,colonne]  = 5

fait ceci: tant que la case suivante (dans le sens du déplacement) contient 2, on enregistre 2 dans la case où se trouve la bille, et on met 5 dans la case suivante, qui devient la case courante.
0