IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Programmation multimédia/Jeux Python Discussion :

Tortue Logo avec pygame


Sujet :

Programmation multimédia/Jeux Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2018
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2018
    Messages : 7
    Par défaut Tortue Logo avec pygame
    Bonjour,
    j'ai envie de faire un programme qui réalise des tracés en temps réel pendant que j'appuie sur les touches de direction.
    Comme un sorte de tortue logo ou scratch mais en live.
    Il me manque juste le tracé derrière
    et aussi que quand j'appuie sur la flèche du haut (avancer) et puis la flèche gauche (tourner à gauche) et puis que je relâche la flèche gauche mais pas la flèche du haut, ma flèche continue quand même d'avancer. Chez moi pour l'instant elle s'arrête nette après avoir appuyé sur la flèche gauche ou droite.
    Et je souhaiterai aussi que ma flèche ne sorte pas de la fenêtre svp
    J'espère avoir été assez claire.
    Je laisse un .zip à disposition où mon programme se trouve avec les autres fichiers.
    Fichiers attachés Fichiers attachés
    • Type de fichier : zip 2.zip (882,8 Ko, 172 affichages)

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 129
    Billets dans le blog
    149
    Par défaut
    Bonjour,

    Pour ne pas sortir de la fenêtre, il faut vérifier la position de la tortue avant de la déplacer. Si celle-ci est inférieure à 0 ou plus grande que la taille de fenêtre, alors il ne faut pas faire le déplacement.
    Pour les traits, on peut imaginer ne pas (re)faire le blit du fond afin de garder les pixels de la précédente image. Ainsi, il suffit de placer un pixel sur l'ancienne position de la tortue. Toutefois, cette solution pourrait apporter plus de problèmes que d'avantages.
    Pour les touches, la gestion me semble correcte.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2018
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2018
    Messages : 7
    Par défaut
    Bonsoir,
    Merci beaucoup d'avoir répondu.

    Je vais commencer déjà par régler l'histoire de la flèche qui dépasse la fenêtre.
    J'ai donc remplacé les paramètres de ma fenêtre par des variables que j'ai mis juste au dessus donc width = 640 et height = 480

    après les if keys[K_UP] et if keys[K_DOWN]
    j'ai mis une autre condition ; if ((position_perso <= 0 or position_perso >= width) or (position_perso <= 0 or position_perso >= height)):
    position_perso.move_ip(0,0)

    Python m'affiche cette erreur.
    Traceback (most recent call last):
    File "/media/serge/CLE/projet/pygame/2/test.py", line 50, in <module>
    if ((position_perso <= 0 or position_perso >= width) or (position_perso <= 0 or position_perso >= height)):
    TypeError: unorderable types: pygame.Rect() <= int()

    Est-ce qu'il y a une fonction dans pygame qui permet d'arrêter le mouvement quand des conditions sont dépassés

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    width = 640
    height = 480
    fenetre = pygame.display.set_mode((width, height))#ouverture de la fenêtre pygame
    fond = pygame.image.load("blanc.png").convert() #Chargement et collage du fond
    fenetre.blit(fond, (0,0))
    perso = pygame.image.load("perso.png").convert_alpha() # chargement et collage du personnage
    persoTemp=perso
    position_perso = persoTemp.get_rect()
     
    continuer = 1
    pygame.key.set_repeat(10, 0)
     
    anglePerso=0
    avancee=3
    while continuer:
        position_perso = persoTemp.get_rect(center = position_perso.center)
        for event in pygame.event.get(): # attente des événements
            if event.type == KEYDOWN and event.key == K_ESCAPE:
                continuer = 0
     
            if event.type == QUIT:
                continuer = 0
     
            keys=pygame.key.get_pressed()
            if keys[K_DOWN]:
                dX=-avancee*cos(anglePerso)
                dY=-avancee*sin(anglePerso)
                position_perso.move_ip(dX,dY)
                if ((position_perso <= 0 or position_perso >= width) or (position_perso <= 0 or position_perso >= height)):
                        position_perso.move_ip(0,0)
     
     
                #position_perso = position_perso.move(0,3)
            if keys[K_UP]:
                dX=avancee*cos(anglePerso)
                dY=avancee*sin(anglePerso)
                position_perso.move_ip(dX,dY)
                if ((position_perso <= 0 or position_perso >= width) or (position_perso <= 0 or position_perso >= height)):
                        position_perso.move_ip(0,0)
    Voici la partie du code que j'ai modifié

  4. #4
    Membre très actif

    Homme Profil pro
    Bidouilleur
    Inscrit en
    Avril 2016
    Messages
    721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Avril 2016
    Messages : 721
    Billets dans le blog
    1
    Par défaut
    Salut !

    L'erreur est on ne peut plus évidente.

    Tu compares un objet pygame.Rect avec un entier.
    pygame.Rect fournit un tas d'attributs pouvant être utilisés, dans ton cas, c'est donc x et y dont tu as besoin (position_perso.x, position_perso.y) pour les comparer aux limites de ta fenêtre.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2018
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2018
    Messages : 7
    Par défaut
    D'accord merci, je vais voir ça.

    EDIT:
    c'est bon j'ai réussi à faire en sorte que la petite flèche ne sorte plus de la fenêtre
    avec clamp_ip()

    J'ai rajouté une variable au début du programme, qui me délimite la fenêtre : fenetre_rect = pygame.Rect(0, 0, largeur, hauteur)
    et vers la fin après les conditions de mouvements j'ai rajouté : position_perso.clamp_ip(fenetre_rect)

    Bon il me reste plus qu'à faire le tracé derrière la flèche, le plus dur.

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2018
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2018
    Messages : 7
    Par défaut
    Quelqu'un m'a conseillé de créer une liste "trace = []"
    puis à chaque tour de boucle, ajouter la position actuelle à ma liste trace.append((posX,posY)).
    À chaque tour de boucle, mettre tous les pixels de la list een noir: for pixel in trace:
    fenetre.set_at((pixel[0],pixel[1]),(0,0,0))

    Mais je vois pas comment implémenter ça dans mon code, quelqu'un peut m'aider ?

Discussions similaires

  1. portabilité du code avec pygame
    Par stefff285 dans le forum Programmation multimédia/Jeux
    Réponses: 0
    Dernier message: 05/04/2009, 19h33
  2. Rafraichissement de l'image avec pygame + opengl
    Par bourriquet_42 dans le forum OpenGL
    Réponses: 1
    Dernier message: 23/03/2009, 18h22
  3. Rotation aléatoire de logo avec lien
    Par gregius dans le forum Général JavaScript
    Réponses: 63
    Dernier message: 03/09/2008, 22h16
  4. [web] position du logo avec TK
    Par stepha001 dans le forum Interfaces Graphiques
    Réponses: 6
    Dernier message: 20/04/2005, 13h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo