Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Blender][Python]Gérer des variables

    21 mars 2019 à 19:54:50

    Bonjour,

    Je commence sur Blender et connais Python depuis environ deux ans.

    J'ai actuellement un problème que je n'arrive pas à résoudre : Dans un premier temps, je cherche simplement à faire évoluer un objet dans un labyrinthe. Ce labyrinthe est modélisé par une matrice dans le programme python. Celui ci a pour but, à l'arrivée d'une commande du joystick, de vérifier si le bonhomme peut avancer et si oui, le faire.

    Mon programme fonctionne une fois seulement; je n'arrive pas à le faire tourner en boucle:

    -Si je mets la fonction principale dans un "while" infini, Blender crash;

    -si je relance à chaque fois le programme en entier grâce au "game logic", toutes les variables du programme sont réinitialisées et donc la position de l'objet n'est plus la bonne ...

    Je suis donc dans une impasse pour continuer mon jeu en théorie simple ... Voici le programme :

    from random import randrange
    from time import*
    import bge
    import bpy
    
    cont = bge.logic.getCurrentController()
    own = cont.owner
    Manette=bge.logic.joysticks[0]
    
    def verif_devant():
        global matrice,orientation,localisation,ok
        if orientation==0:
            if matrice[localisation[0]-1][localisation[1]]==0:
                ok=True
                localisation[0]-=1
            else:
                ok=False
        elif orientation==1:
            if matrice[localisation[0]][localisation[1]+1]==0:
                ok=True
                localisation[1]+=1
            else:
                ok=False
        elif orientation==2:
            if matrice[localisation[0]+1][localisation[1]]==0:
                ok=True
                localisation[0]+=1
            else:
                ok=False
        else:
            if matrice[localisation[0]][localisation[1]-1]==0:
                ok=True
                localisation[1]-=1
            else:
                ok=False
    def verif_derriere():
        global matrice,orientation,localisation,ok
        if orientation==0:
            if matrice[localisation[0]+1][localisation[1]]==0:
                ok=True
                localisation[0]+=1
            else:
                ok=False
        elif orientation==1:
            if matrice[localisation[0]][localisation[1]-1]==0:
                ok=True
                localisation[1]-=1
            else:
                ok=False
        elif orientation==2:
            if matrice[localisation[0]-1][localisation[1]]==0:
                ok=True
                localisation[0]-=1
            else:
                ok=False
        else:
            if matrice[localisation[0]][localisation[1]+1]==0:
                ok=True
                localisation[1]+=1
            else:
                ok=False
    def main():
        global jeu,orientation,ok
    
        if Manette.axisValues[0]==1:
            for i in range(1):#30
                bge.logic.sendMessage('droite')
                
            orientation=(orientation+1)%4
        elif Manette.axisValues[0]==-1:
            for i in range(1):#30
                bge.logic.sendMessage('gauche')
    
            orientation=(orientation+1)%4
        elif Manette.axisValues[1]==-1:
            verif_devant()
            if ok==True:
                for i in range(1):#10
                    bge.logic.sendMessage('avance')
                    print('devant')
        elif Manette.axisValues[1]==1:
            verif_derriere()
            if ok==True:
                for i in range(1):#10
                    bge.logic.sendMessage('recule')
                    print('derriere')
                    
    #variables
    localisation=[1,1]
    matrice=[
        [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],
        [1,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,1],
        [1,0,1,1,1,0,1,0,0,0,1,0,1,1,1,0,1],
        [1,0,0,0,1,0,0,0,1,1,0,0,1,0,0,0,1],
        [1,0,1,0,1,1,0,1,0,0,0,1,1,0,1,1,1],
        [1,0,0,0,0,0,0,1,0,1,0,0,1,0,0,0,1],
        [1,1,1,1,1,0,1,1,0,1,1,0,1,0,1,0,1],
        [1,0,0,0,1,0,1,0,0,0,1,0,1,0,0,0,1],
        [1,0,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1],
        [1,0,0,1,0,0,1,0,0,0,1,1,0,1,1,1,1],
        [1,1,0,1,0,0,1,1,0,1,1,1,0,0,0,0,1],
        [1,1,0,1,1,0,0,1,0,0,0,0,1,1,0,0,1],
        [1,1,0,0,0,1,0,1,0,1,1,0,0,0,0,1,1],
        [1,0,0,1,0,0,0,1,0,0,0,1,1,1,0,0,1],
        [1,0,1,1,0,1,0,1,1,1,0,0,0,1,1,0,1],
        [1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1],
        [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]]
    orientation=2 #0 haut,1 droite,2 bas,3 gauche
    ok=False
    boucle=True
    #fonctions
    #while boucle==True:
    main()
    
    
    

    Il me reste deux solutions peut être possibles : -Réussir à obtenir la position de l'objet à chaque fois que le programme est lancé;

    -enregistrer les variables dans un autre programme.

    Je n'ai aucune connaissance dans ses deux idées ...

    Merci pour vos retours !

    Baptiste Viée 

    -
    Edité par Bastok 21 mars 2019 à 20:00:02

    • Partager sur Facebook
    • Partager sur Twitter
      24 mars 2019 à 15:37:34

      Quelqu'un pourrait-il m'aider ?
      • Partager sur Facebook
      • Partager sur Twitter
        24 mars 2019 à 20:54:26

        Si tu essayes de repenser ton code en t'interdisant le mot clé global (car c'est le mal) tu devrais trouver des solutions par toi même.

        Tes fonctions pourraient avoir des paramètres et des valeurs de retour à la place.

        • Partager sur Facebook
        • Partager sur Twitter
          26 mars 2019 à 13:23:17

          Merci ! J'essaierai 😊
          • Partager sur Facebook
          • Partager sur Twitter

          [Blender][Python]Gérer des variables

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown