Labyrinthe à bille

[Fermé]
Signaler
Messages postés
19
Date d'inscription
samedi 10 mars 2018
Statut
Membre
Dernière intervention
10 mars 2018
-
Messages postés
17126
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
21 octobre 2021
-
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

Messages postés
17126
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
21 octobre 2021
910
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?
Messages postés
19
Date d'inscription
samedi 10 mars 2018
Statut
Membre
Dernière intervention
10 mars 2018

Ah oui ! Mais du coup mes déplacements ne marchent plus... Il me semble que les indentations soient justes pourtant..
Messages postés
17126
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
21 octobre 2021
910 >
Messages postés
19
Date d'inscription
samedi 10 mars 2018
Statut
Membre
Dernière intervention
10 mars 2018

"ne marchent plus"= ?
Messages postés
19
Date d'inscription
samedi 10 mars 2018
Statut
Membre
Dernière intervention
10 mars 2018

Oui, la boucle while fonctionne, c'est-a-dire que tant que le jeu n'est pas terminé, le programme demande quel est le prochain déplacement..
Mais la bille reste en position 1 et ne bouge pas... Peu importe les mouvements alors qu'ils marchaient avant qu'on mette la boucle while
Messages postés
19
Date d'inscription
samedi 10 mars 2018
Statut
Membre
Dernière intervention
10 mars 2018

Ha erreur de ma part, les mouvements ne marchent pas même sans la boucle while
Messages postés
19
Date d'inscription
samedi 10 mars 2018
Statut
Membre
Dernière intervention
10 mars 2018

Autant pour moi, les mouvements marchent, mais j'ai le même problème avec la position de ma bille... Après le deuxième déplacement, c'est une deuxième bille qui apparait et celle d'avant ne bouge plus... Peut-être que le problème vient de la position des "c=k"...
Je n'arrive pas à entrer dans le programme la nouvelle position de la bille à chaque fois..
Messages postés
17126
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
21 octobre 2021
910
    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
Messages postés
19
Date d'inscription
samedi 10 mars 2018
Statut
Membre
Dernière intervention
10 mars 2018

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...
Messages postés
17126
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
21 octobre 2021
910 >
Messages postés
19
Date d'inscription
samedi 10 mars 2018
Statut
Membre
Dernière intervention
10 mars 2018

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.