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

Python Discussion :

Boucle for qui ne marche pas [Python 2.X]


Sujet :

Python

  1. #1
    Membre du Club
    Homme Profil pro
    Conseil en assistance à maîtrise d'ouvrage
    Inscrit en
    Février 2015
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Conseil en assistance à maîtrise d'ouvrage

    Informations forums :
    Inscription : Février 2015
    Messages : 126
    Points : 65
    Points
    65
    Par défaut Boucle for qui ne marche pas
    Bonsoir,
    Comme le titre l'indique, j'ai un problème avec une boucle for qui ne fonctionne pas totalement.
    Elle sert à gérer une collision entre un joueur et l'ensemble des obstacles du jeu (appelés o in obstacles).
    Jusqu'ici tout va bien, mais quand le joueur rencontre ces obstacles, il n'y a que pour le premier que le joueur est bloqué, il traverse les autres.
    Là ou c'est problématique, c'est que lorsque je ne met "sys.exit()" après la collision, la commande s’effectue correctement pour chaque obstacles.
    Merci de votre aide. Voici les codes :

    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
    def move(animat,c,background,obstacles):
      x = animat['x']
      y = animat['y']
      savex = animat['x']
      savey = animat['y']
      if c=='d':
    		animat["direction"]= 'right'
    		x = animat['x'] + 1
      elif c=='q':
    		animat["direction"]='left'	
    		x = animat['x'] -1
      elif c=='s':
    		animat["direction"]='up'
    		y = animat['y'] + 1
      elif c=='z':
    		animat["direction"]='down'
    		y = animat['y'] - 1
      if Background.isValid(background,x+1,y+1):
        for o in obstacles:
          if Obstacle.testCollision(o,x+1,y+1)==False:
            animat['x']= savex
            animat['y']= savey
          else:
            animat['x']= x
            animat['y']= y
    Version sys.exit():
    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
    def move(animat,c,background,obstacles):
      x = animat['x']
      y = animat['y']
      savex = animat['x']
      savey = animat['y']
      if c=='d':
    		animat["direction"]= 'right'
    		x = animat['x'] + 1
      elif c=='q':
    		animat["direction"]='left'	
    		x = animat['x'] -1
      elif c=='s':
    		animat["direction"]='up'
    		y = animat['y'] + 1
      elif c=='z':
    		animat["direction"]='down'
    		y = animat['y'] - 1
      if Background.isValid(background,x+1,y+1):
        for o in obstacles:
          if Obstacle.testCollision(o,x+1,y+1)==False:
            sys.exit()
          else:
            animat['x']= x
            animat['y']= y

  2. #2
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 823
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 823
    Points : 7 119
    Points
    7 119
    Par défaut
    J'ai pas trop compris, peut-être veux-tu le mot clé break à la place de ton sys.exit
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  3. #3
    Membre du Club
    Homme Profil pro
    Conseil en assistance à maîtrise d'ouvrage
    Inscrit en
    Février 2015
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Conseil en assistance à maîtrise d'ouvrage

    Informations forums :
    Inscription : Février 2015
    Messages : 126
    Points : 65
    Points
    65
    Par défaut
    Non en fait le problème est que la boucle ne fonctionne que pour un seul obstacle ( un seul 'o') lorsque je met
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    animat['x'] = savex
    animat['y'] = savey
    Alors qu'elle fonctionne bien pour chaque obstacle o lorsque j'écris à la place de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    animat['x'] = savex
    animat['y'] = savey
    Merci

  4. #4
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 462
    Points : 9 249
    Points
    9 249
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Bizarre que sys.exit() n'arrête pas ton programme puisque c'est sa fonction!

    Comme c'est un problème de logique de programme, tu devrais mettre des "print" pour connaître l'évolution de la valeur de tes variables aux différents endroits.
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  5. #5
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Salut,

    Ici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
          if Obstacle.testCollision(o,x+1,y+1)==False:
            animat['x']= savex
            animat['y']= savey
    * x et y est la nouvelle position, pourquoi ajoutes-tu 1 à chaque coordonnées ?
    * Si il n'y a pas de collision tu utilises savex pour animat['x'] mais c'est déjà sa valeur, donc l'objet ne bouge pas. C'est plutôt x et y que tu devrais utiliser.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. boucle For qui ne marche pas entiérement
    Par ayms75 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 24/10/2014, 15h06
  2. [XL-2010] Boucle For qui ne fonctionne pas pour toutes les valeurs
    Par pleskyd dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 13/02/2012, 15h16
  3. Réponses: 8
    Dernier message: 01/06/2010, 11h43
  4. une boucle for qui ne fonctionne pas
    Par piffeo dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 06/11/2008, 21h52
  5. boucle for qui ne marche pas
    Par Invité dans le forum Langage
    Réponses: 16
    Dernier message: 12/06/2006, 10h59

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