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 :

Aide Projet ISN - jeu du pendu avec communication réseau


Sujet :

Tkinter Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2019
    Messages : 4
    Par défaut Aide Projet ISN - jeu du pendu avec communication réseau
    Bonjour, étant en terminale S spé ISN je viens aujourd'hui pour vous envoyer un sos. Mon projet est "le jeu du pendu avec communication réseau" cela consiste a jouer au jeu du pendu sur Tkinter avec le serveur qui donne les différents mots à deviner au client en temps réel.

    Nous sommes un groupe de 2 un s'occupant de la partie algorithmie du jeu et l'autre de la communication, et je suis celui qui est tombé sur la partie communication. Du coup, cela fait 1 mois que je travaille sur mon projet, mais le problème est que je suis complètement bloqué. J'ai beau avoir tout fait pour comprendre, je reste bloqué à la troisième étape de mon projet qui est "mise en oeuvre de la communication socket avec une interface de base".

    Les différentes étapes étant :
    -Recherche sur la communication réseau TCP/IP
    -Prise en main d'un code client serveur
    -Mise en oeuvre de la communication socket avec une interface de base
    -Intégration des 2 parties du projet

    Pour ma deuxième étapes voila à quoi corespond mon client:
    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
    import socket
     
    hote = "localhost"
    port = 11800
     
    connexion_avec_serveur = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    connexion_avec_serveur.connect((hote, port))
    print("Connexion établie avec le serveur sur le port {}".format(port))
     
    msg_a_envoyer = b""
    while msg_a_envoyer != b"fin":
        msg_a_envoyer = input("> ")
        msg_a_envoyer = msg_a_envoyer.encode()
    # On envoie le message
        connexion_avec_serveur.send(msg_a_envoyer)
        msg_recu = connexion_avec_serveur.recv(1024)
        print(msg_recu.decode()) 
    print("Fermeture de la connexion")
    connexion_avec_serveur.close()
    Pour mon serveur:
    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
    import socket
     
    hote = ''
    port = 11800
     
    connexion_principale = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    connexion_principale.bind((hote, port))
    connexion_principale.listen(5)
    print("Le serveur écoute à présent sur le port {}".format(port))
     
    connexion_avec_client, infos_connexion = connexion_principale.accept()
     
    msg_recu = b""
    while msg_recu != b"fin":
        msg_recu = connexion_avec_client.recv(1024)
        print(msg_recu.decode())
        connexion_avec_client.send(b"5 / 5")
     
    print("Fermeture de la connexion")
    connexion_avec_client.close()
    connexion_principale.close()
    Mon prof d'Isn ne m'ayant pas vraiment aidé, je me retourne vers des forums tout en sachant que je passe mon bac oral ce lundi-là. Je sais que beaucoup de gens peuvent interpréter que je ne suis pas un élève sérieux qui cherche seulement la faciliter en demandant aux autres, mais je vous prie de me croire que j'ai fait mon maximum.
    J'aimerai donc un peu d’empathie et de l'aide pour mon projet...

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 778
    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 778
    Par défaut
    Salut,

    Citation Envoyé par Invincy Voir le message
    je reste bloqué à la troisième étape de mon projet qui est "mise en oeuvre de la communication socket avec une interface de base".
    Heu... à quoi ressemble l'interface de base?

    Citation Envoyé par Invincy Voir le message
    cela consiste a jouer au jeu du pendu sur Tkinter avec le serveur qui donne les différents mots à deviner au client en temps réel.
    Quelque part, le programme Tkinter doit déjà savoir fonctionner tout seul... et dispose déjà d'une fonction qui lui retourne un mot à deviner. Peut être que le but est de déporter l'exécution de cette fonction là sur le réseau...
    Mais tout ce qu'on peut dire, c'est que c'est pas très clair...

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

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2019
    Messages : 4
    Par défaut Projet ISN
    Vous m'avez fait prendre conscience du fait que la directive que mon prof m'avait donné était flou. Du coup, mon projet consisterait en un jeu du pendu où le serveur sera une sorte de dictionnaire en temps réel, il donnera le mot à deviner au client. Et si le client perd le serveur aura donc 1 point, mais s'il gagne le client aura gagné 1 point.

    J'aimerais donc que vous m’apporteriez de l'aide pour ce projet en les faisant communiquer, car pour l'instant nous en sommes simplement au stade d'un jeu du pendu qui se joue tout seul.
    Nous avons simplement besoin que le serveur fasse deviner un mot.

    Le code simple du jeu a été envoyé en pièce jointe avec toute les images constituant ce jeu, mais du coup, je n'ai pas envoyé le dictionnaire, car il n'est pas utile pour la fin du projet.

    L'étape 3, je pense pouvoir la considérer comme une étape subsidiaire.
    Si vous pouviez juste m'expliquer certaines de vos démarches ca me serai d'une grande utilité.
    En espérant pouvoir obtenir de l'aide, je vous remercie d'avance.
    Images attachées Images attachées            
    Fichiers attachés Fichiers attachés

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 778
    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 778
    Par défaut
    Salut,

    Citation Envoyé par Invincy Voir le message
    J'aimerais donc que vous m’apporteriez de l'aide pour ce projet en les faisant communiquer, car pour l'instant nous en sommes simplement au stade d'un jeu du pendu qui se joue tout seul.
    Ce que vous voulez faire n'est pas clair et il n'y a rien dans le code qui permette d'accrocher le serveur. D'autant que distant ou pas, le serveur, c'est j'envoie une commande et j'attends la réponse... Que vous pouvez simplifier dans un premier temps par une/des fonctions du genre server_ask(XXX) qui retournent une réponse immédiate, puis vous pouvez compliquer la chose avec une réponse différée (si nécessaire).
    Si vous ne savez pas trop ce que vous voulez, je comprends que cela paraisse compliqué mais on ne peut pas coder le côté serveur sans que l'interface (les server_ask...) ait été un peu définie.

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

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2019
    Messages : 4
    Par défaut Projet ISN
    J'ai réussi à faire interagir mon serveur et mon client le problème étant que j'ai un léger petit problème. J'aimerais que la phrase "quel mot veut faire deviner" se lance juste après avoir appuyer sur le bouton rejouer.
    Le serveur:
    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
    import socket
     
    hote = ''
    port = 11800
     
    connexion_principale = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    connexion_principale.bind((hote, port))
    connexion_principale.listen(5)
    print("En attente d'un nouveau challenger...".format(port))
     
    connexion_avec_client, infos_connexion = connexion_principale.accept()
     
    msg_a_envoyer = b""
    while msg_a_envoyer != b"fin":
        msg_a_envoyer = input("Quel mot veut tu faire deviner :")#le message ne peux etre envoyer seulement si le client a demander de rejouer
        msg_a_envoyer = msg_a_envoyer.encode()
        # On envoie le message
        connexion_avec_client.send(msg_a_envoyer)
        msg_recu = connexion_avec_client.recv(1024)
        print(msg_recu.decode())
    print("Fermeture de la connexion")
    connexion_avec_client.close()
    connexion_principale.close()
    Le client:
    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
    from tkinter import *
    from random import choice
    import socket
     
    #----------------------------------------------------------------------------------
    hote = "localhost"
    port = 11800
     
    connexion_avec_serveur = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    connexion_avec_serveur.connect((hote, port))
    print("Aceptation du défi..".format(port))
     
    #--------------------------------------------------------------------------------
    fen = Tk()
    fen.title("JEU DU PENDU")
     
     
     
    scores=0
    #FONCTION POUR PENDU 
    def lettre_dans_mot(lettre_dite) :
        global partie_en_cours, mot_a_afficher1, mot_a_trouver, essais, Score, scores
        if partie_en_cours :
     
            mot_a_afficher2 = ""
            lettre_dans_mot = 0
            nb_lettres=len(mot_a_trouver)
     
            for i in range(nb_lettres):
                if mot_a_trouver[i]==lettre_dite:
                    mot_a_afficher2 += lettre_dite
                    lettre_dans_mot = 1 
                else:
                    mot_a_afficher2 += mot_a_afficher1[i]
     
            mot_a_afficher1 = mot_a_afficher2  
            afficher_mot(mot_a_afficher1)
     
            if not lettre_dans_mot: #si la lettre choisi est fausse
                essais= essais+ 1   #le nombre d'essais va augmenter et s'accumuler
                pendusuite = "pendu_"+str(essais)+".png" #pendu commence à se former
                img=PhotoImage(file=pendusuite)
                pendu.config(image=img)
                pendu.image=img
     
                if essais == 10:  #si on atteint le nombre max d'essais
                    partie_en_cours = 0#partie en cours terminée
                    afficher_mot(mot_a_trouver) #le mot va s'afficher
                    if scores !=0:
                        scores=scores-1
                        can.delete(Score)
                        Score=can.create_text(110, 70, text=scores, fill="#06128B", font='courier 15')
     
            elif mot_a_afficher1 == mot_a_trouver:# le mot a été trouvé
     
                partie_en_cours = 0
                penduGG = "smiley.png"
                img=PhotoImage(file=penduGG)
                pendu.config(image=img)
                pendu.image=img            
                scores+=1
                can.delete(Score)
                Score=can.create_text(110, 70, text=scores, fill="#06128B", font='courier 15')
     
    def afficher_mot(mot):
        global Labelmot_fen
        mot_espace = ""
     
        for i in range(len(mot)):  # ajoute un espace entre les lettres
            mot_espace = mot_espace + mot[i] + " "
     
        can.delete(Labelmot_fen)
        Labelmot= Label(fen,text=mot_espace, height=1,bg="#B1B5E2",font='Courrier 20' )
        Labelmot_fen=can.create_window(250, 300, window=Labelmot)
     
     
    def choisir_mot():
        global mot_a_trouver, mot_a_afficher1,essais, partie_en_cours, msg_recu
        essais=0
        partie_en_cours=1
     
        msg_recu = b""
        msg_recu = connexion_avec_serveur.recv(1024).upper()
     
        connexion_avec_serveur.send(b"5 / 5")    
     
        mot_a_trouver=msg_recu.decode()
        mot_a_afficher1="_"*len(mot_a_trouver)    
     
        afficher_mot(mot_a_afficher1)
        img=PhotoImage(file="pendu_0.png")
        pendu.config(image=img)
        pendu.image=img
     
    def quitter():
        print("Fermeture de la connexion")
        connexion_avec_serveur.close()
        fen.destroy()
     
     
    # PRINCIPAL
    can = Canvas(fen, bg="#B1B5E2", height=500, width=500)
    can.pack()
     
    #au début
    Labelmot= Label(fen,text="", height=1,bg="#B1B5E2",font='Courrier 17' )
    Labelmot_fen=can.create_window(250, 300, window=Labelmot)
     
    can.create_text(50,70, text="Score:",fill="#06128B", font='courier 15')
    Score=can.create_text(110, 70, text="0",fill="#06128B", font='courier 15')
     
     
     
     
    img=PhotoImage(file="pendu_0.png")
    pendu=Label(can, image=img)
    pendu.place(x=100, y=100)
     
    #Boutons A à Z
    k=80
    boutonA = [0]*9
    for i in range(9):
        boutonA[i] = Button(fen,text=chr(i+65),command=lambda x=i+65:lettre_dans_mot(chr(x)))
        can.create_window(k,370,window=boutonA[i])
        k=k+40
    k=80
    boutonJ = [0]*9
    for i in range(9):
        boutonJ[i] = Button(fen,text=chr(i+74),command=lambda x=i+74:lettre_dans_mot(chr(x)))
        can.create_window(k,410,window=boutonJ[i])
        k=k+40
    k=80
    boutonS=[0]*8
    for i in range(8):
        boutonS[i] = Button(fen,text=chr(i+83),command=lambda x=i+83:lettre_dans_mot(chr(x)))
        can.create_window(k,450,window=boutonS[i])
        k=k+40
     
    bouton_rejouer = Button(fen,text='REJOUER',command=choisir_mot)
    bouton_rejouer_fen=can.create_window(450,40, window=bouton_rejouer)
    bouton_quitter=Button(fen,text='QUITTER',command=quitter)
    bouton_quitter_fen=can.create_window(50,40, window=bouton_quitter)
    choisir_mot()

    Il faut savoir que les images nécessaire sont envoyé en pièce jointe.
    Si vous pourriez m'indiquez les différents points pour améliorer ce projet et comment les résoudre.
    Merci
    Images attachées Images attachées             

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 778
    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 778
    Par défaut
    Salut,

    Citation Envoyé par Invincy Voir le message
    J'aimerais que la phrase "quel mot veut faire deviner" se lance juste après avoir appuyer sur le bouton rejouer.
    Le serveur expédie le mot à deviner et attend la réponse du client.
    Dans le code vous avez:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while msg_a_envoyer != b"fin":
        msg_a_envoyer = input("Quel mot veut tu faire deviner :")#le message ne peux etre envoyer seulement si le client a demander de rejouer
        msg_a_envoyer = msg_a_envoyer.encode()
        ...
    pourquoi attendre que quelqu'un tape quelque chose sur le clavier plutôt que d'envoyer directement le mot à deviner?

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

Discussions similaires

  1. PROJET ISN: jeu de dames avec tkinter
    Par malolo dans le forum Général Python
    Réponses: 7
    Dernier message: 18/10/2016, 10h07
  2. Aide projet ISN
    Par DiiKenZ dans le forum Général Python
    Réponses: 0
    Dernier message: 29/05/2014, 09h15
  3. Projet ISN - Jeu memory
    Par progmateur dans le forum Général Python
    Réponses: 16
    Dernier message: 29/05/2014, 08h22
  4. Besoin d'aide pour projet ISN: jeu de plateau
    Par Stilishh dans le forum Programmation multimédia/Jeux
    Réponses: 4
    Dernier message: 17/05/2014, 07h39
  5. jeu du pendu avec python
    Par TermS dans le forum Général Python
    Réponses: 3
    Dernier message: 08/05/2013, 18h14

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