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 :

Besoin d'aide pour finaliser un jeu puissance 4 ecrit en python [Python 3.X]


Sujet :

Programmation multimédia/Jeux Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Mai 2017
    Messages : 7
    Par défaut Besoin d'aide pour finaliser un jeu puissance 4 ecrit en python
    Bonjour,

    J'ai ecrit le programme python ci-joint pour faire un jeu puissance 4.

    Il est simple mais je n'optient pas ce que je veux comme le jeu réel. En fait j'ai l'impression que les couleurs sont definies à l'avance a l'initialisation des cases dans la grille. Et des fois on peux avoir la meme deux fois de suite selon la case ou on clique, ce qui est une erreur.

    Si vous pouviez m'aider a faire que la couleur change dynamiquement quand on clique sur une case vide.





    Merci pour votre aide



    Cdt

    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
    import tkinter as tk
     
    def color(button):
        def col():
            button['bg']='red'
        return col
     
    def color2(button):
        def col2():
            button['bg']='yellow'
        return col2
     
    class Application:
        def __init__(self,p):
            self.init_modele(p)
            self.init_widgets(p)
     
        def init_modele(self,p):
            self.p=p
     
        def init_widgets(self,p):
            self.presentation=tk.Label(fenetre,text="Puissance 4")
            self.jouer=tk.Button(fenetre,text="Lancer une partie",command=self.puissance)
            self.presentation.pack()
            self.jouer.pack()
            self.t=tk.IntVar()
            self.t=1
     
        def puissance(button):
            app=tk.Tk()
            t=1
            for i in range(0,6):
                for j in range(0,7):
                    button = tk.Button(app,height=5,width=10 , bg='white')
                    button.grid(row=i, column=j)
     
                    for k in range(0,43):
                        if t%2==1:
                            button['command']=color(button)
                            t+=1
                        else:
                            button['command']=color2(button)
                            t+=1
            app.mainloop
     
     
    fenetre=tk.Tk()
    App=Application(1)
    fenetre.mainloop()
    Fichiers attachés Fichiers attachés
    • Type de fichier : py tm4.py (1,2 Ko, 209 affichages)

  2. #2
    Membre très actif

    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
    Billets dans le blog
    1
    Par défaut
    Saut,

    Tu t'étonnes que ce soit défini à l'avance, pourtant c'est ce que ton code fait, bon y'a vraiment trop d'incohérences dans ton code, à quoi sert la variable p, l'attribut p de ta classe ? Mystère et boule de gomme.

    Que fait ta fonction puissance dans ta classe Application ?

    A quoi sert ta variable tkinter ? vu que tu l'écrases aussi sec, par un = 1 ? Qu sert à rien de plus.

    Un jeu de puissance 4 est simple à faire.

    - En premier, génération des cases.
    - En second utiliser 2 couleurs (pour les joueurs)
    soit dans 2 variables distinctes qu'il suffira d'inverser à chaque clic effectué couleurA, couleurB = couleurB, couleurA et donc seule couleurA sera utilisée
    ou dans une simple liste sur laquelle on fera un reverse à chaque clic en utilisant toujours l'index 0
    - maintenant c'est simple, à chaque clic, tu remplis le bouton de cette couleur.
    - Et voilà, la base est faite, le plus dur reste à venir pour mettre un terme au jeu si 4 cases de même couleurs sont alignées.

    Ah, tu devrais te passer d'utiliser de l'objet et de t'en tenir à de simples fonctions, car la classe que tu as fait est beurk, commence d'abord à bien maîtriser les fonctions et bases de python avant de t'attaquer à modéliser une application en objet.

    Bonne chance

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Mai 2017
    Messages : 7
    Par défaut
    Merci à toi bistouille.

    J'aurais bien aimer trouver un exemple simple de programme puissance 4 écrit en python afin de comprendre.
    J'ai trouver des exemples sur le net par contre ils sont trop complexe (gestion des position, des lignes gagnantes ...) mais complexe à comprendre. Je trouve que l'Api tkinter est complexe.


    Merci
    Cdt

  4. #4
    Membre très actif

    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
    Billets dans le blog
    1
    Par défaut
    Le problème n'est pas l'api de tkinter, mais d'utiliser les bons widgets, une liste de boutons pour faire ce jeu n'est pas du tout l'idéal, un canevas est plus approprié pour le faire, de plus tu pourras créer des formes diverses pour les pions.

    Partant de ça, la première chose à faire est de générer un simple dictionnaire (dict) de tes cases, avec pour clés les numéros de cases, et valeurs les coordonnées x, y, x2, y2 qui représentent donc :

    Code text : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     y
    x ----
     |    |
     |    |
      ---- x2
          y2

    De façon à obtenir pour une grille de 10 cases de côté, et 40 unités de côté :

    {1: (0, 0, 40, 40),
    2: (40, 0, 80, 40),
    3: (80, 0, 120, 40),
    4: (120, 0, 160, 40),
    5: (160, 0, 200, 40),
    ....
    96: (200, 360, 240, 400),
    97: (240, 360, 280, 400),
    98: (280, 360, 320, 400),
    99: (320, 360, 360, 400),
    100: (360, 360, 400, 400)}

    C'est seulement ceci fait, que tu pourras commencer à utiliser tkinter.

    Et si tu as du mal, fais une recherche sur la génération d'un simple damier avec tkinter.
    Ce sera du code tout cuit, mais si ça te permet de comprendre.

    Quand tu auras réussi à générer un simple plateau de cases dans un canevas, il ne te restera plus qu'à faire la partie événementielle, ce sera simple, d’autant que Canvas possèdent des méthodes bien pratiques pour faire le travail.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Mai 2017
    Messages : 7
    Par défaut
    Merci Bistouille.

    J'ai pu faire ce que tu m'as demandé pour le graphisme. Je n'ai pas utilisé d'objets mais que les classe statiques de tkinter sans créer ma propre classe.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #Création d'une fenetre
    Fenetre= Tk()
    # Creation widget Canvas à ajouter dans la fenetre
    Canevas = Canvas(Fenetre, width = 600, height =400, bg ='white')
    # Création des Cases
    for x in range(1,6):
        for y in range(0,5):
           Canevas .create_oval(self, *args, **kw) #j'ai changé les parametres dans le programme
     
    # ajout de l'evenement click
    Canevas.bind('<Button-1>', clicJouer)
    Par contre je bloque pour changer la couleur car je ne peux pas déclarer de variable couleur comme je n'ai pas définit ma propre classe. La variable doit etre globale et non locale à la methode "clicJouer". Je ne sais pas si je doit redessiner un oval ou colorier sur l'existant (pour les deux je ne sais pas comment faire)
    Je suis preneur pour de l'aide sur ces points.


    Merci

  6. #6
    Membre très actif

    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
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par hocinemal Voir le message
    Par contre je bloque pour changer la couleur car je ne peux pas déclarer de variable couleur comme je n'ai pas définit ma propre classe.
    Je t'ai pourtant précisé comment faire, plus haut.

    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
    import tkinter as tk
     
    couleurs = ['green', 'lightBlue']
     
    fenetre = tk.Tk()
     
    plateau = tk.Canvas(fenetre, width = 600, height =400, bg ='white')
     
    def clicJouer(evt) :
        print(couleurs[0])
        couleurs.reverse()
     
    fenetre.bind('<Button-1>', clicJouer)
     
    fenetre.mainloop()
    C'est simple non ?


    Citation Envoyé par hocinemal Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    for x in range(1,6):
        for y in range(0,5):
           Canevas .create_oval(self, *args, **kw) #j'ai changé les parametres dans le programme
    i
    Ce n'est pas comme ça qu'il faut faire, c'est le y d'abord, et le x ensuite, on part en haut à gauche pour finir en bas à droite en générant des lignes, et le plus simple est d'utiliser une unique boucle et un modulo.

    Citation Envoyé par hocinemal Voir le message
    Merci Bistouille
    Je t'en prie

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

Discussions similaires

  1. 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
  2. Réponses: 17
    Dernier message: 17/06/2012, 13h17
  3. [XL-2002] Besoin d'aide pour finaliser Macro mise en forme + bordure
    Par warrio67 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 12/03/2010, 05h23
  4. [Débutant] Besoin d'aide pour modifier un jeu
    Par stoff66 dans le forum Assembleur
    Réponses: 9
    Dernier message: 31/08/2006, 18h24
  5. Besoin d'aide pour l'I.A. d'un puissance 4
    Par Anonymous dans le forum C
    Réponses: 2
    Dernier message: 25/04/2002, 17h05

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