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 :

Système Proies Prédateurs


Sujet :

Programmation multimédia/Jeux Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2016
    Messages : 10
    Par défaut Système Proies Prédateurs
    Bonjour,

    Je suis étudiant dans le supérieur en biologie et je souhaite illustrer de façon (très) simplifiée l'interaction proies/prédateurs dans un milieu fermé.
    Je cherche d'abord à faire bouger mes proies de façon aléatoire.
    Pour définir plusieurs proies, j'utilise un dictionnaire (dont je ne connais pas les subtilités...), en leur donnant l'attribue de simples points une interface plotlib.
    Cependant, les objets "plot" sont alors stockés dans le dictionnaire sous forme de list, et je ne peux modifier la valeur en utilisant "set_data".
    Une ligne de code valant mieux qu'un long discours :
    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
    import matplotlib.pyplot as mp
    import random
     
    def deplacement() :
        mp.xlim(-100,100)
        mp.ylim(-100,100)
        dd={}
        for i in range(20) :
            (x,y)=(random.randint(-50,50),random.randint(-50,50))
            dd['proie%s' %(i)]=mp.plot(x,y,'o',color='b')
        for proie in dd.values() :
            x+=random.randint(-1,1)
            y+=random.randint(-1,1)
            proie.set_data(x,y)
            pause(0.1)
            mp.draw()
        mp.show()
        return()
    Le problème est ici que Python n'accepte pas le set_data sur une 'list', évidemment...
    Comment faire, en sachant que je dois rester dans la simplicité pour ne pas être trop hors-programme...

    Je vous remercie d'avance.

  2. #2
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2013
    Messages
    388
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Janvier 2013
    Messages : 388
    Par défaut
    Salut,
    Pour ne pas tout remettre à plat, tu peux te limiter à affecter la valeur du tuple à dd (en ajoutant une virgule) :
    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
    def deplacement() :
        mp.xlim(-100,100)
        mp.ylim(-100,100)
        dd={}
        for i in range(20) :
            (x,y)=(random.randint(-50,50),random.randint(-50,50))
            dd['proie%s' %(i)], = mp.plot(x,y,'o',color='b')
        for proie in dd.values() :
            x+=random.randint(-10,10)
            y+=random.randint(-10,10)
            proie.set_data(x,y)
            pause(0.1)
            mp.draw()
        mp.show()
        return()

  3. #3
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2016
    Messages : 10
    Par défaut
    D'accord... Dans ce cas-là l'objet considéré ne sera plus une liste ?

  4. #4
    Expert confirmé

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Salut,

    Pourquoi le fais-tu en deux fois ?

    Ce ne serait pas plus simple comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        x = random.randint(-50, 50) + random.randint(-10, 10)
        y = random.randint(-50, 50) + random.randint(-10, 10)
        dd['proie%s' %(i)] = mp.plot(x, y, 'o', color='b')
    Quant à savoir si la valeur de dd['proiex'] est une liste ou un tuple tu peux le savoir savoir avec type(dd['proiex']), peut-être est-ce un objet mp.plot.

  5. #5
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2016
    Messages : 10
    Par défaut
    Mon but est de faire k déplacements visibles sur la fenêtre du module plot.
    Voici ce que donne mon code au final :
    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
    import matplotlib.pyplot as mp
    import random
     
    def deplacement(N,k) :
        mp.xlim(-100,100)
        mp.ylim(-100,100)
        dd={}
        X=[]
        Y=[]
        for i in range(N) :
            (x,y)=(random.randint(-50,50),random.randint(-50,50))
            dd['proie%s' %(i)], = mp.plot(x,y,'o',color='b')
            X+=[x]
            Y+=[y]
        while k!=0 :
            i=0
            for proie in dd.values() :
                print(X[i],Y[i])
                X[i]+=random.randint(-1,1)
                Y[i]+=random.randint(-1,1)
                proie.set_data(X[i],Y[i])
                mp.pause(0.001)
                mp.draw()
                print(X[i],Y[i])
                i+=1
            k-=1
        mp.show()
        return()
    Tout marche niquel, sauf (évidemment) l'initialisation graphique qui affiche quelques trucs bizarres au départ...

  6. #6
    Expert confirmé

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Avec la boucle while ça prend effectivement un tout autre sens.

Discussions similaires

  1. Aquarium, Proies, Prédateurs, algorithmes Java !
    Par TheRogerFederer dans le forum Général Java
    Réponses: 8
    Dernier message: 16/10/2014, 22h04
  2. Réponses: 4
    Dernier message: 07/03/2009, 20h32
  3. système Lotka volterra ( proie-prédateur)
    Par jeltimohamed dans le forum Mathématiques
    Réponses: 2
    Dernier message: 09/05/2007, 17h27
  4. [système] Comment ajouter un item dans le context menu de Windows ?
    Par ddmicrolog dans le forum API, COM et SDKs
    Réponses: 8
    Dernier message: 29/06/2005, 17h03
  5. IA avec le système de note
    Par scorpiwolf dans le forum C
    Réponses: 4
    Dernier message: 06/05/2002, 12h13

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