Projet "Labyrinthe"
Fermé
Hugo7700
Messages postés
8
Date d'inscription
samedi 25 avril 2020
Statut
Membre
Dernière intervention
31 octobre 2020
-
Modifié le 23 nov. 2022 à 15:59
mamiemando Messages postés 33544 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 24 février 2025 - 23 nov. 2022 à 16:30
mamiemando Messages postés 33544 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 24 février 2025 - 23 nov. 2022 à 16:30
A voir également:
- Labyrinthe python
- Citizen code python avis - Accueil - Outils
- Python generator - Télécharger - Sécurité
- Trouver la position d'un élément dans une liste python ✓ - Forum Python
- Python retour à la ligne dans le code - Forum Python
3 réponses
Hugo7700
Messages postés
8
Date d'inscription
samedi 25 avril 2020
Statut
Membre
Dernière intervention
31 octobre 2020
2
Modifié le 23 nov. 2022 à 15:57
Modifié le 23 nov. 2022 à 15:57
.
mamiemando
Messages postés
33544
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
24 février 2025
7 828
Modifié le 24 nov. 2022 à 18:10
Modifié le 24 nov. 2022 à 18:10
Bonjour,
Le principale problème est que tu fais des turtle.onkeypress() alors que le programme est en train de tourner. Il faut les faire une fois pour toute avant de lancer turtle.mainloop().
Ensuite, ta fonction deplacer ne semble pas cohérente avec ta matrice.
Voici à quoi ça pourrait ressembler :
ZONE_PLAN_MINI = (-240, -240) # Coin inférieur gauche de la zone d'affichage du plan ZONE_PLAN_MAXI = (50, 200) # Coin supérieur droit de la zone d'affichage du plan POINT_AFFICHAGE_ANNONCES = (-240, 240) # Point d'origine de l'affichage des annonces POINT_AFFICHAGE_INVENTAIRE = (70, 210) # Point d'origine de l'affichage de l'inventaire # Les valeurs ci-dessous définissent les couleurs des cases du plan COULEUR_CASES = 'white' COULEUR_COULOIR = 'white' COULEUR_MUR = 'grey' COULEUR_OBJECTIF = 'yellow' COULEUR_PORTE = 'orange' COULEUR_OBJET = 'green' COULEUR_VUE = 'wheat' COULEURS = [COULEUR_COULOIR, COULEUR_MUR, COULEUR_OBJECTIF, COULEUR_PORTE, COULEUR_OBJET, COULEUR_VUE] COULEUR_EXTERIEUR = 'white' # Couleur et dimension du personnage COULEUR_PERSONNAGE = 'red' RATIO_PERSONNAGE = 0.9 # Rapport entre diamètre du personnage et dimension des cases POSITION_DEPART = (0, 1) # Porte d'entrée du château # Désignation des fichiers de données à utiliser fichier_plan = 'plan_chateau.txt' fichier_questions = 'dico_portes.txt' fichier_objets = 'dico_objets.txt' # importation du module turtle import turtle # Definitions des fonctions utilisées def lire_matrice(fichier): """Transforme un fichier texte sous sa forme matricielle""" matrice = [] f = open(fichier) for i in f: matrice.append([int(x) for x in i.split()]) return matrice def calculer_pas(matrice): """Calcule la dimension à donner aux cases pour que le plan tienne dans le zone de la fenêtre turtle""" nbre_cases_y = 440 / len(matrice) # hauteur du rectangle nbre_cases_x = 290 / len(matrice[0]) # largeur du rectangle if nbre_cases_y < nbre_cases_x: pas = nbre_cases_y else: pas = nbre_cases_x return pas def coordonnees(case, pas): """Calcule les coordonées du coin inférieur gauche d'une case définie par ses coordonnées""" coo = (-240 + case[1] * pas, (200 - pas) - case[0] * pas) return coo def tracer_carre(dimension): """Trace un carré de côté dimension""" turtle.setheading(0) turtle.down() turtle.forward(dimension) turtle.left(90) turtle.forward(dimension) turtle.left(90) turtle.forward(dimension) turtle.left(90) turtle.forward(dimension) turtle.left(90) def tracer_case(case, couleur, pas): """Trace une case en fonction du couple de coordonnées d'une case, une couleur et un pas""" turtle.setheading(0) turtle.up() turtle.speed('fastest') turtle.tracer(0) turtle.goto(case) turtle.down() turtle.fillcolor(couleur) turtle.pencolor(couleur) turtle.begin_fill() tracer_carre(pas) turtle.end_fill() turtle.up() def afficher_plan(matrice): """Affiche le plan du château""" for x in range(len(matrice)): for y in range(len(matrice[0])): pas = calculer_pas(matrice) case = (x, y) case = coordonnees(case, pas) j = matrice[x][y] if j == 0: couleur = 'white' elif j == 1: couleur = 'grey' elif j == 2: couleur = 'yellow' elif j == 3: couleur = 'orange' elif j == 4: couleur = 'green' else: couleur = 'white' tracer_case(case, couleur, pas) def deplacer(matrice, position, mouvement): """Fonction qui donne la nouvelle coordonée d'une case après un certain mouvement.""" nv_position = (position[0] + mouvement[0], position[1] + mouvement[1]) if matrice[nv_position[0]][nv_position[1]] != 0: print(f"!!", position, matrice[position[0]][position[1]], "-->", nv_position, matrice[nv_position[0]][nv_position[1]]) nv_position = position else: print("mv", position, "-->", nv_position) return nv_position def deplacer_gauche(): """Fonction qui déplace le personnage vers la gauche""" global matrice, position, pas mouvement = (0, -1) nv_position = deplacer(matrice, position, mouvement) if position == nv_position: pass else: dessine_point(coordonnees(nv_position, pas)) tracer_case(coordonnees(position, pas), couleur, pas) position = nv_position def deplacer_droite(): """Fonction qui déplace le personnage vers la droite""" global matrice, position, pas mouvement = (0, 1) nv_position = deplacer(matrice, position, mouvement) if position == nv_position: pass else: tracer_case(coordonnees(position, pas), couleur, pas) position = nv_position dessine_point(coordonnees(nv_position, pas)) position = nv_position def deplacer_haut(): """Fonction qui déplace le personnage vers le haut""" global matrice, position, pas mouvement = (-1, 0) nv_position = deplacer(matrice, position, mouvement) if position == nv_position: pass else: dessine_point(coordonnees(nv_position, pas)) tracer_case(coordonnees(position, pas), couleur, pas) position = nv_position def deplacer_bas(): """Fonction qui déplace le personnage vers le bas""" global matrice, position, pas mouvement = (1, 0) nv_position = deplacer(matrice, position, mouvement) if position == nv_position: pass else: dessine_point(coordonnees(nv_position, pas)) tracer_case(coordonnees(position, pas), couleur, pas) position = nv_position def dessine_point(coo): """Fonction qui dessine le perssonage, ici un point.""" global pas turtle.setheading(0) # Tourne la tête de la tortue vers la droite turtle.up() turtle.goto(coo) turtle.forward(pas / 2) turtle.left(90) turtle.forward(pas / 2) turtle.down() turtle.dot(0.9 * pas, COULEUR_PERSONNAGE) # Attribution des valeurs 'invariables' matrice = lire_matrice('plan_chateau.txt') pas = calculer_pas(matrice) position = (0, 1) couleur = 'white' # Corps du programme afficher_plan(lire_matrice('plan_chateau.txt')) # Affiche le plan du chateau dessine_point(coordonnees(position, pas)) # Affiche le personnage à sa position de départ. turtle.listen() # Déclenche l’écoute du clavier turtle.onkeypress(deplacer_gauche, "Left") # Associe à la touche Left une fonction appelée deplacer_gauche turtle.onkeypress(deplacer_droite, "Right") turtle.onkeypress(deplacer_haut, "Up") turtle.onkeypress(deplacer_bas, "Down") turtle.mainloop() # Place le programme en position d’attente d’une action du joueur
Bonne chance
Modifié le 18 nov. 2022 à 13:38
Bonjour
Ceci ne serait-il pas un exercice provenant de l'ULB à Bruxelles ?
Si oui je vous rappelle qu'il y a des restrictions de publication sur ces lignes de code.
Bàv