Forum Programmation.python aide Turtle

Posté par  . Licence CC By‑SA.
Étiquettes : aucune
0
4
déc.
2024

Bonjour,
cela fais presque 3jours que suis bloqué sur une question pour mon projet de fin de semestre en python qui est à rendre dans les jours a venir..
Mon projet consiste à afficher graphiquement un labyrinthe avec turtle et intégrer une flèche qui puisse se déplacer (avec les flèche du clavier) en évitant les murs. J'ai déjà réussie à gérer l'affichage graphique j'ai des fonction qui me permette de connaitre le type de cellule avec la ligne et la colonne qu'on passe en argument, et une fonction qui permet de convertir les coordonnées en pixels (x, y) en coordonnées de cellule (ligne, colonne) du labyrinthe.
Cela dis l'affichage marche sans aucun problème que ce soit l'affichage de la flèche et son déplacement en dehors du labyrinthe ou l'affichage du labyrinthe tout seul. mais je n'arrive pas a les combiner et afficher la flèche dans le labyrinthe.
quelqu'un pourrait me donner une solution s'il vous plaît ?

  • # Show me the code !

    Posté par  (Mastodon) . Évalué à 5 (+2/-0).

    Là comme ça ça va pas être évident de t'aider, il te faudrait nous partager ton code, par exemple sur github.com ou gitlab.com.

    En théorie, la théorie et la pratique c'est pareil. En pratique c'est pas vrai.

  • # Un simple exemple

    Posté par  . Évalué à 2 (+1/-0).

    Voici un simple exemple.

    import turtle
    
    SQUARE_SIZE = 60
    
    MAZE = (
        '1111111111',
        '1000000001',
        '1011111101',
        '1010101001',
        '1010001011',
        '1010111101',
        '1010000001',
        '1011011101',
        '1000001001',
        '1111111111',
    )
    
    SCREEN_WIDTH = (len(MAZE[0]) + 2) * SQUARE_SIZE
    SCREEN_HEIGHT = (len(MAZE[1]) + 2) * SQUARE_SIZE
    
    TOP = -SCREEN_HEIGHT // 2
    LEFT = SCREEN_WIDTH // 2
    
    PLAYER = dict(
        turtle=turtle.Turtle(),
        color='blue',
        x=1,
        y=1,
    )
    
    
    def square_draw(x, y, size, color):
        turtle.up()
        turtle.goto(x, y)
        turtle.down()
        turtle.fillcolor('red')
        turtle.begin_fill()
        for _ in range(4):
          turtle.forward(size)
          turtle.right(90)
        turtle.up()
        turtle.end_fill()
    
    
    def maze_draw(maze):
        for y, line in enumerate(maze):
            for x, value in enumerate(line):
                if value == '1':
                    square_draw(
                        x * SQUARE_SIZE - LEFT + SQUARE_SIZE,
                        y * -SQUARE_SIZE - TOP - SQUARE_SIZE,
                        SQUARE_SIZE,
                        'red'
                    )
    
    
    def player_draw(player):
        player['turtle'].clear()
        player['turtle'].up()
        x = player['x'] * SQUARE_SIZE - LEFT + SQUARE_SIZE * 1.5
        y = player['y'] * -SQUARE_SIZE - TOP - SQUARE_SIZE * 1.75
        player['turtle'].goto(x, y)
        player['turtle'].down()
        player['turtle'].fillcolor(player['color'])
        player['turtle'].begin_fill()
        player['turtle'].circle(SQUARE_SIZE // 4)
        player['turtle'].end_fill()
    
    
    turtle.hideturtle()
    turtle.speed(0)
    screen = turtle.Screen()
    screen.setup(SCREEN_WIDTH, SCREEN_HEIGHT)
    
    PLAYER['turtle'].hideturtle()
    PLAYER['turtle'].speed(0)
    
    maze_draw(MAZE)
    player_draw(PLAYER)
    
    def player_move_left(maze, player):
        if maze[player['y']][player['x'] - 1] == '1':
            return
        player['x'] -= 1
        player_draw(player)
    
    def player_move_right(maze, player):
        if maze[player['y']][player['x'] + 1] == '1':
            return
        player['x'] += 1
        player_draw(player)
    
    def player_move_up(maze, player):
        if maze[player['y'] - 1][player['x']] == '1':
            return
        player['y'] -= 1
        player_draw(player)
    
    def player_move_down(maze, player):
        if maze[player['y'] + 1][player['x']] == '1':
            return
        player['y'] += 1
        player_draw(player)
    
    
    turtle.onkeypress(lambda: player_move_left(MAZE, PLAYER), 'Left')
    turtle.onkeypress(lambda: player_move_right(MAZE, PLAYER), 'Right')
    turtle.onkeypress(lambda: player_move_up(MAZE, PLAYER), 'Up')
    turtle.onkeypress(lambda: player_move_down(MAZE, PLAYER), 'Down')
    
    turtle.listen()
    turtle.done()

    Y a sans doute des trucs à revoir, et si t'es familier avec l'objet python, faire des classes.

    • [^] # Re: Un simple exemple

      Posté par  . Évalué à 2 (+1/-0).

      il y a une erreur sur cette ligne:

      SCREEN_HEIGHT = (len(MAZE[1]) + 2) * SQUARE_SIZE

      il faudrait mettre plutôt

      SCREEN_HEIGHT = (len(MAZE) + 2) * SQUARE_SIZE

Envoyer un commentaire

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.