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

Tkinter Python Discussion :

Projet ISN Planche de Galton Python/Pygame/Tkinter


Sujet :

Tkinter Python

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Lycéen
    Inscrit en
    Avril 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2014
    Messages : 13
    Points : 6
    Points
    6
    Par défaut Projet ISN Planche de Galton Python/Pygame/Tkinter
    Bonjour,

    Je poste mon programme pygame/python afin de vous demander de l'aide. Nous avons un projet pour la fin de l'année qui est la Planche de Galton, le but est qu'un grand nombre de billes tombent sur des clous. Cependant, nous ne trouvons pas le moyen de générer plusieurs billes ( le nombre de billes totales sélectionnées lors des paramètres par le joueur) et d'y mettre un temps d'attente entre chaque bille et de les voir tombées. Je vous copie colle notre programme, Merci d'avance pour votre aide ! Mélanie

    from tkinter import *
    from tkinter.messagebox import *
    import pygame
    from pygame.locals import *
    import random
    import time

    Mafenetre=Tk()
    Mafenetre.title("Fenêtre des paramètres")

    text4=Label(Mafenetre,text="Bienvenue ! Remplissez les paramètres suivants:")
    text4.pack()


    def quitter():
    Mafenetre.destroy

    # Le cadre
    cadre=Frame(Mafenetre,bg ='grey', bd =4, relief =FLAT)
    cadre.pack(padx=5,pady=10)

    # Les textes
    text1=Label(cadre,text=" Choisir un nombre de billes entre 100 et 1000")
    text2=Label(cadre,text=" Nombre de rangées de clous entre 5 et 20 ")
    text3=Label(cadre,text=" Vitesse : Moyenne ")



    photo = PhotoImage(file ='jouer.gif')
    photo1 = PhotoImage(file ='fermer.gif')

    nombrebille=StringVar()
    champbille=Entry(cadre,textvariable=nombrebille)
    nbrangees=StringVar()
    champclou=Entry(cadre,textvariable=nbrangees)


    # Le placement
    text1.grid(row=0,column=0)
    text2.grid(row=1,column=0)
    text3.grid(row=2,column=0)
    champbille.grid(row=0,column=1)
    champclou.grid(row=1,column=1)





    boutonjouer=Button(Mafenetre, image=photo, command=Mafenetre.destroy)
    boutonjouer.pack()

    boutonquitter=Button(Mafenetre, image=photo1, command=Mafenetre.destroy)
    boutonquitter.pack(side=RIGHT)




    Mafenetre.mainloop()

    pygame.init()

    pygame.display.init()
    #Ouverture de la fenêtre Pygame

    n=int(nbrangees.get())
    b=int(nombrebille.get())



    speed=[0,1]


    fenetre = pygame.display.set_mode((1000, 1000 ))

    #Chargement et collage du fond

    fond = pygame.image.load("blanc.jpg").convert_alpha()
    fenetre.blit(fond, (0,0))

    #Chargement et collage des personnages ( billes + clous )

    bille = pygame.image.load("bille2.png").convert_alpha()
    billerect=bille.get_rect()
    billerect.x=500
    billerect.y=50



    clou = pygame.image.load("clou4.png").convert_alpha()





    def placementclous(n):
    global pos
    pos=[]
    for i in range(0,n):
    pos.append((-(n-1)+2*i,n-1))

    l=[1]
    j=1

    for e in range(n,2,-1):
    j=j+e
    l.append(j)

    for i in range (0,n-1):
    for e in range (l[i],len(pos)):
    pos.append ((pos[e][0]-1,pos[e][1]-1))

    fenetre.blit(fond,(0,0))
    for i in range(0,len(pos)):
    fenetre.blit(clou, (pos[i][0]*25+480,pos[i][1]*25+180))
    if (billerect.x,billerect.y) == (pos[i][0]*25+500,pos[i][1]*25+193) :
    cote=random.randint(0,1)
    if cote==1:
    speed[0]=-1
    else:
    speed[0]=1
    if billerect.y == pos[0][1]*25+220 :
    speed[0]=0










    #Rafraîchissement de l'écran
    pygame.display.flip()
    placementclous(n)


    continuer=1
    #BOUCLE INFINIE
    while continuer:
    for event in pygame.event.get():
    if event.type==pygame.KEYDOWN:
    if event.type==pygame.K_ESCAPE:
    continuer=0
    break
    elif event.type==pygame.QUIT:
    continuer=0
    break

    billerect=billerect.move(speed)



    billedepart(b)
    placementclous(n)
    fenetre.blit(bille, billerect)
    pygame.display.flip()
    pygame.time.delay(10)
    pygame.quit()

  2. #2
    Expert éminent

    Avatar de deusyss
    Homme Profil pro
    Expert Python
    Inscrit en
    Mars 2010
    Messages
    1 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Expert Python
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 659
    Points : 8 442
    Points
    8 442
    Par défaut
    Salut,

    Et bienvenue sur le forum. Avant toute chose, quand tu poste du code, utilise le bouton "#" qui va te permettre de formatter automatiquement ton code pour le post.

    Concernant ta demande, je ne suis pas expert tkinter, mais ce que je constate c'est que tu n'utilises aucune classe. Pour ce que tu veut faire, il te faut en créer une. Une classe est un peu comme un moule. Quand tu créé un objet à partir d'une classe, tu créé donc une copie conforme. SI tu te créé une classe bille, tu pourra alors te créer autant de copie que désiré
    "La connaissance appartient à tout le monde" (Film Antitrust)

    Tout le nécessaire pour Python:
    *News/Accueil *Cours/tutoriels *FAQ
    *Forums *Outils dédiés *Mon espace personnel avec mes Articles, Cours et Tutoriels

  3. #3
    Futur Membre du Club
    Femme Profil pro
    Lycéen
    Inscrit en
    Avril 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2014
    Messages : 13
    Points : 6
    Points
    6
    Par défaut Projet ISN
    Merci de votre réponse, pourriez vous me donner des liens ou un exemple pour expliquer le fonctionnement d'une classe ! Merci d'avance

  4. #4
    Expert éminent

    Avatar de deusyss
    Homme Profil pro
    Expert Python
    Inscrit en
    Mars 2010
    Messages
    1 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Expert Python
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 659
    Points : 8 442
    Points
    8 442
    Par défaut
    Bien sur, c'est assez simple. Cela fait parti de la POO: Programmation objet

    Pour les explications du concept general, je te renvoie vers mon livre, dispo en libre acces sur le site: http://python.developpez.com/tutorie...-en-bref/#LIII

    Pour l'utilisation specifique python, c'est ici: http://python.developpez.com/tutorie...ref/#LIV-K-2-d

    Si tu desires plus d'infos, que tu as des questions apres, je suis disponible
    "La connaissance appartient à tout le monde" (Film Antitrust)

    Tout le nécessaire pour Python:
    *News/Accueil *Cours/tutoriels *FAQ
    *Forums *Outils dédiés *Mon espace personnel avec mes Articles, Cours et Tutoriels

  5. #5
    Futur Membre du Club
    Femme Profil pro
    Lycéen
    Inscrit en
    Avril 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2014
    Messages : 13
    Points : 6
    Points
    6
    Par défaut Les classes
    Bonsoir

    Après avoir navigué dans vos liens, je dois vous avouer rester perplexe par rapport à la fonction class de python, je pense avoir comprit qu'elle permet d'attribuer les mêmes caractéristiques à des objets, mais ne l'ayant jamais réellement croisé et ne sachant pas comment elle se construit j'aurai besoin d'un exemple .

    Comment créer une classe pour les billes de mon programme en sachant qu'elles partagent:
    -les mêmes coordonnées de départ
    -la même image
    -la même vitesse

    Une classe permet-elle de différencier différent objets ? ( j'ai cru comprendre que oui)

    Merci d'avance pour votre aide, le déplacement de plusieurs billes est la partie finale de mon projet et semble être la plus dure .

  6. #6
    Expert éminent

    Avatar de deusyss
    Homme Profil pro
    Expert Python
    Inscrit en
    Mars 2010
    Messages
    1 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Expert Python
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 659
    Points : 8 442
    Points
    8 442
    Par défaut
    Alors je fais te faire un petit exemple tout simple. J'espère que cela sera assez clair. Je vais imager un peu pour simplifier. Le code qui suit est donc un melange d'algo et de code pour essayer d'etre le plus clair possible.

    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
     
    class UneBille():
        def __init__(self, x=0, y=0, picture="path", vitesse=5.0):
            self.coordonnée = (x, y)
            self.image = picture
            self.speed = vitesse
     
        def change_param(param, value):
            if param == "coord":
                self.coordonnee = value) # ou value est un tuple
            elif param == "image":
                self.image = value
            elif param == "speed":
                self.speed = value
            else:
                print("bad parameter")
    Ensuite pour créer un objet, tu lui done un nom et tu appelle ta classe, qui va créer une copie puis te renvoyer l'objet ainsi créé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ma_bille_01 = MaBille()
    ma_bille_02 = MaBille()
    ...
    TU differencie ainsi les objets par leur nom. Dans l'exemple que j'ai pris, en essayant de m'approcher au maximum, tu constates que tu dispose d'une fonction de classe qui te permettras ainsi de bouger ton objet (à condition de l'effacer puis de le reafficher ensuite, une fois ses paramètre modifié). Ma methode est loin d'etre la plus propre, mais pour debuter c'est mieux ainsi. On ne vas pas t'embeter avec les accesseurs, mutateurs & cie.

    Ais-je été assez clair? Si ce n'est pas le cas n'hésite pas à redemander.
    "La connaissance appartient à tout le monde" (Film Antitrust)

    Tout le nécessaire pour Python:
    *News/Accueil *Cours/tutoriels *FAQ
    *Forums *Outils dédiés *Mon espace personnel avec mes Articles, Cours et Tutoriels

  7. #7
    Futur Membre du Club
    Femme Profil pro
    Lycéen
    Inscrit en
    Avril 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2014
    Messages : 13
    Points : 6
    Points
    6
    Par défaut projet ISN
    J'ai essayé de créer une classe suivant votre exemple, pourriez vous corriger mon exemple s'il vous plaît ?

    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
    class Bille():
        def __init__(self,x=650,y=260,bille = pygame.image.load("bille3.png").convert_alpha(),vitesse=(0,1)):
            self.coordonnées = (x,y)
            self.image = bille
            self.move(vitesse)
     
        def collision_bille():
     
        #Mouvement aléatoire de la bille
            for i in range(0,len(pos)):
                if (billerect.x,billerect.y) == (pos[i][0]*40+650,pos[i][1]*40+320) :
                    cote=random.randint(0,1)
                    if cote==1:
                        speed[0]=-1
                    else:
                        speed[0]=1
     
        #Pour que la bille ne se déplace que verticalement arrivé au milieu des deux clous de la rangée finale.
                if billerect.y == pos[0][1]*40+360 :
                    speed[0]=0
    Merci infiniment de votre aide.

  8. #8
    Expert éminent

    Avatar de deusyss
    Homme Profil pro
    Expert Python
    Inscrit en
    Mars 2010
    Messages
    1 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Expert Python
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 659
    Points : 8 442
    Points
    8 442
    Par défaut
    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
    class Bille():
        def __init__(self,x=650,y=260,bille="bille3.png",vitesse=0.1):
            self.coordonnées = (x,y)
            self.image = pygame.image.load(bille).convert_alpha()
            self.move(vitesse)
     
        def collision_bille():
        #Mouvement aléatoire de la bille
            for i in range(0,len(pos)):
                if (billerect.x,billerect.y) == (pos[i][0]*40+650,pos[i][1]*40+320) :
                    self.cote=random.randint(0,1)
                    if self.cote==1:
                        self.speed[0]=-1
                    else:
                        self.speed[0]=1
     
        #Pour que la bille ne se déplace que verticalement arrivé au milieu des deux clous de la rangée finale.
                if self.billerect.y == self.pos[0][1]*40+360 :
                    self.speed[0]=0
    alors je ne suis pas sur, car je ne sais pas d'ou sort pos, ni billerect (rect? utilisation de pygame?). Mais cela dois deja etre plus proche de ce dont tu as besoin
    "La connaissance appartient à tout le monde" (Film Antitrust)

    Tout le nécessaire pour Python:
    *News/Accueil *Cours/tutoriels *FAQ
    *Forums *Outils dédiés *Mon espace personnel avec mes Articles, Cours et Tutoriels

  9. #9
    Futur Membre du Club
    Femme Profil pro
    Lycéen
    Inscrit en
    Avril 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2014
    Messages : 13
    Points : 6
    Points
    6
    Par défaut
    Pos est la liste contenant les coordonnées de tout les clous de ma planche de Galton.
    Ensuite nous avons effectivement utilisé pygame pour le projet, j'ai oublié de le préciser
    Si vous avez des connaissances en pygame, pourriez vous me dire si je dois faire un .get pour récupérer les mesures du rect de ma bille avant la class ou dedans ?Et si dans la class, où?

    Merci encore de l'aide

  10. #10
    Expert éminent

    Avatar de deusyss
    Homme Profil pro
    Expert Python
    Inscrit en
    Mars 2010
    Messages
    1 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Expert Python
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 659
    Points : 8 442
    Points
    8 442
    Par défaut
    Oulaaaa... Cela va faire un petit moment que je n'ai pas touché à pygame.

    De memoire, pygame utilise une boucle infinie. L'affichage dois etre mis à jour à chaque boucle. Il est possible de regler la vitesse de rafraichissement. La classe te permet de créer et de paramétrer un objet. SI tu désire modifier l'affichage, tu as besoin de manipuler le rect. Le get doit donc se placer au même niveau que le rect. Si le rect est dans la classe, il faut placer le get dans la classe.
    "La connaissance appartient à tout le monde" (Film Antitrust)

    Tout le nécessaire pour Python:
    *News/Accueil *Cours/tutoriels *FAQ
    *Forums *Outils dédiés *Mon espace personnel avec mes Articles, Cours et Tutoriels

  11. #11
    Futur Membre du Club
    Femme Profil pro
    Lycéen
    Inscrit en
    Avril 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2014
    Messages : 13
    Points : 6
    Points
    6
    Par défaut Projet ISN
    Bonsoir ,

    J'ai essayer de modifier la classe en me servant de votre exemple, mais l'erreur revenant à chaque fois que j'essaye de lancer le programme est "AttributeError: 'Bille' object has no attribute 'move'.
    Pourriez vous regarder l'intégralité de notre programme s'il vous plait ? J'avoue être désarmé face à ce problème.
    Merci d'avance

    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    from tkinter import *
    from tkinter.messagebox import *
    import pygame
    from pygame.locals import *
    import random
    import time
     
    Mafenetre=Tk()
    Mafenetre.title("La Planche D'Angry Birds")
     
    text4=Label(Mafenetre,text="Bienvenue ! Remplissez les paramètres suivants:")
    text4.pack()
     
     
     
     # Le cadre
    cadre=Frame(Mafenetre,bg ='#ff9900', bd =4, relief =FLAT)
    cadre.pack(padx=5,pady=10)
     
     # Les textes
    text1=Label(cadre,text="   Choisir un nombre de billes entre 100 et 1000      ")
    text2=Label(cadre,text="             Nombre de rangées de clous entre 5 et 10 ")
    text3=Label(cadre,text="                           Vitesse : Moyenne                           ")
     
     
     
    photo = PhotoImage(file ='jouer1.gif')
    photo1 = PhotoImage(file ='fermer.gif')
     
    nombrebille=StringVar()
    champbille=Entry(cadre,textvariable=nombrebille)
    nbrangees=StringVar()
    champclou=Entry(cadre,textvariable=nbrangees)
     
     
     # Le placement
    text1.grid(row=0,column=0)
    text2.grid(row=1,column=0)
    text3.grid(row=2,column=0)
    champbille.grid(row=0,column=1)
    champclou.grid(row=1,column=1)
     
     
    n=nbrangees.get()
    b=nombrebille.get()
     
     
    boutonjouer=Button(Mafenetre, image=photo, command=Mafenetre.destroy)
    boutonjouer.pack()
     
     
     
     
     
    Mafenetre.mainloop()
     
    pygame.init()
     
    pygame.display.init()
    #Ouverture de la fenêtre Pygame
     
    n=int(nbrangees.get())
    b=int(nombrebille.get())
     
     
    speed=[0,1]
     
     
    fenetre = pygame.display.set_mode((1280, 850 ))
     
    #Chargement et collage du fond
     
    fond = pygame.image.load("blanc1.jpg").convert_alpha()
     
     
    #Chargement et collage des personnages ( billes + clous )
    class Bille():
        def __init__(self,x=650,y=260,bille="bille3.png",vitesse=speed):
            self.coordonnées = (x,y)
            self.image = pygame.image.load(bille).convert_alpha()
            self.move(vitesse)
     
        def collision_bille():
        #Mouvement aléatoire de la bille
            for i in range(0,len(pos)):
                if (billerect.x,billerect.y) == (pos[i][0]*40+650,pos[i][1]*40+320) :
                    self.cote=random.randint(0,1)
                    if self.cote==1:
                        self.speed[0]=-1
                    else:
                        self.speed[0]=1
     
        #Pour que la bille ne se déplace que verticalement arrivé au milieu des deux clous de la rangée finale.
                if self.billerect.y == self.pos[0][1]*40+360 :
     
     
                    self.speed[0]=0
    bille1=Bille()
    #def creationbilles(b):
        #for i in range (1,b+1):
            #str(i)=Bille()
     
     
    #bille = pygame.image.load("bille3.png").convert_alpha()
    #billerect=bille.get_rect()
    #billerect.x=650
    #billerect.y=260
     
     
     
    clou = pygame.image.load("cochon3.png").convert_alpha()
     
     
     
     
    def placementclous(n):
        global pos
        pos=[]
        for i in range(0,n):
            pos.append((-(n-1)+2*i,n-1))
     
        l=[1]
        j=1
     
        for e in range(n,2,-1):
            j=j+e
            l.append(j)
     
        for i in range (0,n-1):
            for e in range (l[i],len(pos)):
                pos.append ((pos[e][0]-1,pos[e][1]-1))
        fenetre.blit(fond,(0,0))
     
        for i in range(0,len(pos)):
            fenetre.blit(clou, (pos[i][0]*40+650,pos[i][1]*40+350))
     
     
     
     
     
        posfinales=[]                                     # POUR JEREMY, OBTENIR LE X DE LA BILLE POUR FAIRE L'HISTO !
        for i in range (0,b):
            if billerect.y == pos[0][1]*40+350:
                posfinales.append(billerect.x)
     
     
    #BOUCLE INFINIE
     
    continuer=1
    while continuer==1:
        for event in pygame.event.get():
            if event.type==pygame.KEYDOWN:
                if event.type==pygame.K_ESCAPE:
                    continuer=0
                    break
            elif event.type==pygame.QUIT:
                continuer=0
                break
     
     
            #pygame.time.wait(500)  # Temps d'attente avant que le programme se lance
     
     
     
        placementclous(n)
        pygame.display.flip()
        pygame.time.delay(10)
    pygame.quit()

  12. #12
    Expert éminent

    Avatar de deusyss
    Homme Profil pro
    Expert Python
    Inscrit en
    Mars 2010
    Messages
    1 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Expert Python
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 659
    Points : 8 442
    Points
    8 442
    Par défaut
    Aucun soucis pour regarder, mais il me faudrait les images en plus.
    "La connaissance appartient à tout le monde" (Film Antitrust)

    Tout le nécessaire pour Python:
    *News/Accueil *Cours/tutoriels *FAQ
    *Forums *Outils dédiés *Mon espace personnel avec mes Articles, Cours et Tutoriels

  13. #13
    Futur Membre du Club
    Femme Profil pro
    Lycéen
    Inscrit en
    Avril 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2014
    Messages : 13
    Points : 6
    Points
    6
    Par défaut Projet ISN
    Voilà le programme et ses composants, merci d'étudier notre programme et ses images. Nous cherchons à faire apparaître le nombre de bille voulu par le joueur. Merci d'avance
    Images attachées Images attachées     
    Fichiers attachés Fichiers attachés

  14. #14
    Expert éminent

    Avatar de deusyss
    Homme Profil pro
    Expert Python
    Inscrit en
    Mars 2010
    Messages
    1 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Expert Python
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 659
    Points : 8 442
    Points
    8 442
    Par défaut
    Bon alors après analyse du code et des erreurs, je t'annonce que l'erreur que tu as n'es que le debut de tes galeres, desole.

    En fait, pour l'erreur que tu as, dans la classe bille, dans le init tu marque vitesse=speed, tu ne peut pas faire ça. Tu peut donner une valeur par defaut uniquement. Sinon passer des paramètres. Ensuite, trois lignes apres, tu marques un self.move(vitesse). C'est self.move=vitesse, d'ou ton erreur.

    Vu ce que tu essaie de faire ça va pas etre simple, surtout pour quelqu'un qui debute dans un langage.

    Pour t'aider voiciquelques petites infos qui vont t'aider:
    -Dans ton cas, tu dois utiliser les classes partout et bien compartimenter ton code, sinon tu cours dans le mur. Il te faut une classe pour les billes, une pour les clous, une pour l'IHM.
    -Quand tu créé un objet, et quand tu appelle ses fonctions, tu peux passer des paramètres en arguments, mais en aucun cas, tu peux appeler des variables qui n'appartiennent pas à la classe (je pense au billerect là et au pos)
    -Essaie d'y aller petit à petit: implemente d'abord l'IHM, puis les billes, puis les clous, puis la collision, ... Actuellement tu essaie de tout implementer en même temps, ce ne sera que source d'ennui.

    Je previens de suite, mon experience pygame s'est arreté aux deplacement d'objet, je n'ai jamais fait les collisions, donc excepté cette partie, aucun soucis pour t'aider .

    Le post risquant d'etre un peu long, je te propose de repartir à zero avec une structure propre, en voici une:

    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
     
    from Tkinter import *
    from tkMessageBox import *
    import pygame
    from pygame.locals import *
    import random
    import time
     
     
    class TkIhm():
     
    	def __init__(self):
     
     
    	def read_values(self):
    		#code, lecture des champs
     
    		return nb_bille, nb_clou
     
     
     
     
    class PygameElement():
     
    	def __init__(self):
     
     
     
     
     
    class Bille():
     
    	def __init__(self):
     
     
     
    class Clou():
     
    	def __init__(self):
     
     
     
    if __name__ == "__main__":
    	#Ici on place le code qui sera exécuté au lancement du programme
     
    	#-créé l'IHM TK
     
    	#-récupère le nbre de biolle et de clou puis créé les, rien ne t'empeche de 
    	#créer des variables avec le même nom, mais ce ne sont pas les meme
    	#ex: for i in range(nb_billes):
    	#		list_bille.append(Bille())
    	#Ici, chaque item de la liste list_bille est un objet de type Bille
     
    	#Une fois tes objet créé tu passes à la partie pygame
     
    	continuer = True
     
    	while continuer:
    		for event in pygame.event.get():
    			if event.type==pygame.KEYDOWN:
    				if event.type==pygame.K_ESCAPE:
    					continuer=False
    					break
    			elif event.type==pygame.QUIT:
    				continuer=False
    				break
     
    		#code eventuel
     
    		pygame.display.flip()
    		pygame.time.delay(10)
    	pygame.quit()
    Implemente deja la partie IHM Tkinter, ce sera la premiere etape.

    Pour info, je n'aurais pas acces à internet jusqu'à dimanche soir, ne t'inquiete donc pas si je ne repond pas avant. Sinon quelqu'un d'autre passera peut etre d'ici là t'aider aussi
    "La connaissance appartient à tout le monde" (Film Antitrust)

    Tout le nécessaire pour Python:
    *News/Accueil *Cours/tutoriels *FAQ
    *Forums *Outils dédiés *Mon espace personnel avec mes Articles, Cours et Tutoriels

Discussions similaires

  1. [Python 3.X] Projet ISN Numpy et tkinter
    Par Louis63584 dans le forum Tkinter
    Réponses: 7
    Dernier message: 06/05/2015, 18h19
  2. [Question] Projet ISN - Tkinter ou pas ?
    Par Tom38211 dans le forum Tkinter
    Réponses: 3
    Dernier message: 21/12/2014, 20h44
  3. Projet ISN Python programme Piano Tkinter
    Par Biloute42 dans le forum Programmation multimédia/Jeux
    Réponses: 4
    Dernier message: 07/05/2014, 18h11
  4. projets isn debutant pb avec tkinter
    Par ssydjay dans le forum Général Python
    Réponses: 0
    Dernier message: 07/04/2014, 10h57
  5. Aide python mini projet ISN
    Par Trirouson dans le forum Général Python
    Réponses: 22
    Dernier message: 19/12/2013, 20h01

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