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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Lycéen
    Inscrit en
    Avril 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2014
    Messages : 13
    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 confirmé

    Avatar de deusyss
    Homme Profil pro
    Expert Python
    Inscrit en
    Mars 2010
    Messages
    1 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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
    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é

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

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2014
    Messages : 13
    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 confirmé

    Avatar de deusyss
    Homme Profil pro
    Expert Python
    Inscrit en
    Mars 2010
    Messages
    1 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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
    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

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

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2014
    Messages : 13
    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 confirmé

    Avatar de deusyss
    Homme Profil pro
    Expert Python
    Inscrit en
    Mars 2010
    Messages
    1 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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
    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.

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