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 Terminale BAC [Python 3.X]


Sujet :

Tkinter Python

  1. #1
    Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Mai 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mai 2017
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Projet ISN Terminale BAC
    Bonjour, bonsoir,
    Je suis élève de terminale et je suis la spécialité ISN. Comme projet du BAC j'ai choisi un jeu reprenant le concept de TRON ; deux véhicules spawn et leurs traces sont affichées, si l'un des deux joueurs rentre dans la trace de l'autre joueur ou dans la sienne il perd.
    Mais je rencontre deux difficultés majeures :

    1. J'ai définis un total de 8 touches du clavier pour les deux joueurs (haut, bas, gauche et droite ; 4x2=8). Mais les deux joueurs ne peuvent pas se déplacer simultanément, si l'un va vers la gauche, dès que le deuxième joueur va vers la droite le joueur 1 s'arrête. Donc les deux joueurs ne peuvent pas jouer en même temps. En effet je ne connaît pas très bien la fonction "thread".

    2. Dès lors que les deux joueurs pourront joueur en même temps, il faudra définir le principe de collision. J'effectue la traînée de chaque joueur en ne supprimant pas l'image aux coordonnées à t-1. C'est à dire que si on appuie sur "droite" le personnage apparaît toutes les 0.5 s à y= y+5. Cela donne donc une impression de "trajet" ou "traînée".

    Merci de votre temps et de votre lecture, j'ai besoin de votre aide afin de paramétrer ces deux fonctions, mon épreuve du BAC est dans moins de deux semaines :/
    Je laisse en pièce jointe le dossier complet qui fait fonctionner mon programme.
    Merci.
    Fichiers attachés Fichiers attachés

  2. #2
    Membre confirmé

    Homme Profil pro
    Bidouilleur
    Inscrit en
    Avril 2016
    Messages
    721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Avril 2016
    Messages : 721
    Points : 503
    Points
    503
    Billets dans le blog
    1
    Par défaut
    Si tu n'utilises pas mainloop comme une fonction, ça va pas bien marcher.

    Maintenant pour le problème de faire jouer 2 joueurs sur le même clavier, c'est pas un thread qui pourra résoudre le problème à mon sens.

    Il serait juste suffisant de faire jouer tour à tour (très très rapidement) les joueurs en regardant lesquelles de leurs commandes de déplacement sont pressées, ça devrait rester transparent dans le jeu, et dans le code se résumer à tester alternativement les touches utilisées par chaque joueur, j'ai jamais testé, mais je pense que c'est faisable.
    Le temps ronge l'amour comme l'acide.

  3. #3
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 778
    Points
    36 778
    Par défaut
    Salut,

    Citation Envoyé par Xeode Voir le message
    1. J'ai définis un total de 8 touches du clavier pour les deux joueurs (haut, bas, gauche et droite ; 4x2=8). Mais les deux joueurs ne peuvent pas se déplacer simultanément, si l'un va vers la gauche, dès que le deuxième joueur va vers la droite le joueur 1 s'arrête. Donc les deux joueurs ne peuvent pas jouer en même temps.
    Pour attraper ces évènements là, il faut faire des .bind sur <KeyPress>, <KeyRelease> et gérer la transition d'état de chacune des 8 touches.
    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
    import tkinter as tk
    import sys
     
    xmap = {}
     
    def shoot_key(keysym, delay=10):
        print (keysym if keysym == 's' else '*', end='')
        sys.stdout.flush()
        xmap[keysym] = root.after(delay, lambda: shoot_key(keysym))
     
    def key_press(keysym):
        if keysym in ('s', 'space') and xmap.get(keysym) is None:
            shoot_key(keysym)
     
    def key_release(keysym):
        if keysym in ('s', 'space') and xmap.get(keysym) is not None:
            root.after_cancel(xmap[keysym])
            xmap[keysym] = None
     
     
    root = tk.Tk()
    root.bind('<KeyRelease>', lambda e: key_release(e.keysym))
    root.bind('<KeyPress>', lambda e: key_press(e.keysym))
    tk.mainloop()

    Citation Envoyé par Xeode Voir le message
    2. Dès lors que les deux joueurs pourront joueur en même temps, il faudra définir le principe de collision. J'effectue la traînée de chaque joueur en ne supprimant pas l'image aux coordonnées à t-1. C'est à dire que si on appuie sur "droite" le personnage apparaît toutes les 0.5 s à y= y+5. Cela donne donc une impression de "trajet" ou "traînée".
    Ah ben on verra bien à ce que ressemblera le code à ce moment là.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  4. #4
    Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Mai 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mai 2017
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Merci beaucoup pour votre aide ; cependant je suis un grand débutant et ne parvient pas à essayer vos lignes de codes :/
    Pourriez vous me guider ?

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 778
    Points
    36 778
    Par défaut
    Comment çà vous n'arrivez pas à l'essayer?
    Vous le recopier, vous le lancez, vous tapez "s" et/ou barre d'espace et vous regardez ce qui s'affiche...

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  6. #6
    Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Mai 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mai 2017
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    J'avais effectivement déjà testé votre programme ; les événements s et space s'effectuent en même temps. Mais je ne parviens pas à transférer le code avec mes propres fonctions de déplacements :/

  7. #7
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 778
    Points
    36 778
    Par défaut
    Citation Envoyé par Xeode Voir le message
    J'avais effectivement déjà testé votre programme ; les événements s et space s'effectuent en même temps. Mais je ne parviens pas à transférer le code avec mes propres fonctions de déplacements :/
    Il faut comprendre ce qu'il fait. Puis essayer de l'adapter en fonction de ce que vous voulez, puis envisager de l'intégrer dans votre code.
    Ceci dit écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    def droite1(event):
        global x1, y1, user1right
        i=0
        while i<2000 :
            x1=x1+10
            image1=canvas.create_image(x1,y1,image=user1right)
            i=i+1
            sleep(0.01)
            canvas.update()
    signifie qu'on ne termine qu'a la sortie du while i.e. après 20 secondes et pendant ce temps là, les utilisateurs peuvent toujours taper ce qu'ils veulent, çà ne changera rien. Comme votre code est basé la dessus, vous avez aussi à étudier .after/.after_cancel pour rendre la chose plus réactive. In fine, tout est à comprendre et refaire.

    Pour l'adapter, vous pourriez commencer par attraper les changements de directions (pour un utilisateur), les appliquer au bolide qui se déplace tous les .after, tester les collisions avec les bords, ajouter un deuxième utilisateur...

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

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

Discussions similaires

  1. Projet Mastermind Terminale S ISN
    Par jojodu30 dans le forum Général Python
    Réponses: 9
    Dernier message: 27/05/2015, 12h28
  2. [Python 3.X] IMPORTANT - Aide Scrabble Projet ISN Terminale S
    Par Batmai dans le forum Général Python
    Réponses: 5
    Dernier message: 25/05/2015, 14h24
  3. [Python 3.X] Aide Scrabble - Projet ISN Terminale S
    Par Batmai dans le forum Général Python
    Réponses: 10
    Dernier message: 18/05/2015, 10h51
  4. Réponses: 3
    Dernier message: 27/02/2011, 14h08

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