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 :

déplacement d'un jeu de pion ! [Python 3.X]


Sujet :

Programmation multimédia/Jeux Python

  1. #1
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2018
    Messages : 9
    Points : 3
    Points
    3
    Par défaut déplacement d'un jeu de pion !
    Bonjour !
    J'ai un petit jeu de pion que je suis entrain de faire et je bloque sur le déplacement des pions !

    Si vous voulez vous procurer tout les fichiers( je vous le conseil si vous voulez m'aider...), suivez le lien: https://mega.nz/#F!B5hg0SBa!lSxKmOjdRMKow9m8PNujsA

    Comme mon jeu ce joue à deux en partie locale, j'ai déjà un problème que je n'arrive pas résoudre. Je voudrais qu'une fois le pion du premier joueur posé (en Bleu) cela passe directement au second joueur et qu'une fois le second joueur ai posé son pion (rouge), cela s'enchaine jusqu'a ce qu'il y ait un gagnant (le pion adverse doit arriver sur la base de son adversaire). J'ai déjà essayé de faire une fonction mais rien n'y fait, impossible de faire changer la couleur des pions tour par tour, a part de double cliquer sur le pion existant où là, il change de couleur.

    Mon second problème est le suivant: j'ai déjà limité le placement des pions à un rayon d'une case autour du pion précédent (essayez par vous même avec le programme) mais j'aimerai que le premier pion soit posable seulement autour des bases de chacun, aux coordonnées 6,7/6,6/ et 7,6 ainsi que 0,1/1,1 et 1,0 mais je ne sais pas comment m'y prendre.

    Je tiens à ajouter que certaines définitions de fonctionnent pas et sont en essaient.
    De plus je reste un débutant dans le milieu

    Merci pour votre aide !

    Cordialement,

    Marcozorio

  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
    Salut !

    Il y a beaucoup de problèmes dans ton script.

    La 1ère est que tu recrées à chaque tour tout ton tableau de boutons, rien que ça, ça ne va pas du tout.

    Il ne faut pas faire comme ça mais :
    - Tu crées une variable définissant l'image du pion de départ (rouge ou bleu)
    - Tu crées ton tableau de boutons avec tes images de bases, et tous reliés à la même fonction.
    - Dans cette fonction tu changes l'image du bouton concerné, tu désactives le bouton, et tu changes l'image du pion pour le prochain coup.

    Et vraiment utilise des noms représentatifs pour tes fonctions, variables, là on arrive à s'y retrouver, car ton code est très court, mais un code comme ça de 500 lignes sera totalement illisible.

    Sinon, le forum propose un service d'hébergement de fichiers divers

  3. #3
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2018
    Messages : 9
    Points : 3
    Points
    3
    Par défaut
    Bonjour !

    Je suis au courant du problème concernant le tableau et nos professeurs encadrant nous ont dit de ne pas s'attarder sur ce problème et de ne pas perdre de temps sur notre projet.
    D'après eux, cela n'aura pas d'incidence sur le jeu en lui même.

    J'aimerai déjà terminer ce damier pour être sûr d'avoir au moins quelque-chose de concret, mais je vous remercie de me faire part de vos idées précieuses pour résoudre ce problème !

    Je vais essayer de mettre des noms représentatifs pour mes fonctions, je me rend compte que cela deviendrait illisible si j'avais un gros code !

    Sinon, je ne savais pas que le site proposait un service d'hébergement, et c'est très bon à savoir !

    A part cela, avait vous un exemple concret à me faire partager pour m'aider avec mes autres problèmes ?

    Merci encore pour votre aide !

  4. #4
    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
    Salut.

    Désolé, mais ton prof raconte n'importe quoi

    Bien sûr que ça a une incidence, 64 boutons que tu recrées chaque fois par dessus les autres, soit 64 × 64 boutons + autant de fonctions anonymes associées à la fin, si on prend au final que chaque case sera cliquée.
    Déjà ce n'est pas te rendre service en t'inculquant ce genre de pratique, mais en plus cela ne rend pas service à ceux qui joueront à ton jeu, jeu qui bouffera des ressources inutilement.

    Et ça se ressent et voit direct dans ton jeu.

    Maintenant, je t'ai indiqué les principales étapes à faire, et tu n'as vraiment pas beaucoup de choses à faire pour que ça soit un peu plus « propre ».

  5. #5
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2018
    Messages : 9
    Points : 3
    Points
    3
    Par défaut
    Salut !

    Je n'ai pas fais comme vous me l'aviez indiqué mais j'ai réussi à empêcher le tableau de se recréer. N'ayant pas trouvé la rubrique pour héberger mes fichiers, suivez le lien (la clée est fournie):https://mega.nz/#F!Y4QEmLoD!uhUYwGwRUWU7Dyx2n5nfEg

    Avez-vous des idées pour le déplacement des pions ? Je voudrais limiter le nombre de pion total à 3 et ensuite les déplacer un à un, en cliquant dessus puis en cliquant sur la case souhaité... Je suppose que c'est très compliqué mais si vous avez quelques exemples concret à me donner, je suis preneur...

    Cordialement.

  6. #6
    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
    Salut.

    Pour le moment, tu enregistres tes boutons dans une simple liste de 64 éléments, il faudrait déjà modifier cela pour obtenir une liste contenant 8 listes de 8 boutons, on pourraiit rester avec cette liste de 64 éléments, mais ce serait se compliquer la tâche.

    Pour le déplacement, il faudrait que lorsque le joueur clique sur une case, vérifier si cette case contient un de ses propres pions, tu peux faire cela simplement en utilisant la méthode cget http://tkinter.fdex.eu/doc/uwm.html#cget pour obtenir l'image et la comparer à celle du pion du joueur.

    Mais on a besoin de savoir si justement une case contenant un pion n'a pas déjà été cliquée, donc il est nécessaire de stocker ça quelque part, et de montrer cela visuellement sur le plateau, tu pourrais faire ça simplement en changeant la couleur de la bordure du bouton à l'aide de la méthode configure.

    L'idéal serait d'enregistrer la coordonnée du bouton cliqué, ainsi lorsque le joueur aura cliqué une première fois sur un de ses pions, on pourra regarder grâce au tableau des boutons quelles cases le joueur est autorisé à cliquer.

    Voilà une base de code illustrant ce que j'ai un peu difficilement expliqué.

    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
    from tkinter import *
     
    def jouer(ligne, colonne) :
        print('\n################\n')
        couleurPion = tours[0]
        print('Le joueur des pions', couleurPion, 'joue.')
        imagePion = images['pion_' + couleurPion].name
        print('L image des pions', couleurPion, 'est', imagePion)
        bouton = boutons[ligne][colonne]
        imageBouton = bouton.cget('image')
        print('L image du bouton cliqué est', imageBouton)
     
        # On définit une variable définissant si l'action joueur est terminée
        actionJoueurTerminee = False
     
        # Si l'image est celle d'un de ses pions
        if imagePion == imageBouton :
            print('Sélection d un pion', couleurPion)
            # Si pionsCliques de sa couleur vaut None
            if pionsCliques[couleurPion] is None :
                # On enregistre la coordonnée
                pionsCliques[couleurPion] = (ligne, colonne)
                # On change la couleur de la bordure du bouton
                bouton.config(highlightbackground='yellow')
            # Le joueur a cliqué une seconde fois sur le même pion
            # On annule la sélection.
            else :
                pionsCliques[couleurPion] = None
                bouton.config(highlightbackground='grey')
        # Si l'image est celle de sa base et que le nombre de ses boutons n'est pas
        # encore égal à 3, on ajoute un pion.
        elif imageBouton == 'base_' + couleurPion and pionsJoues[couleurPion] < 3 :
            print('Ajout d un pion', couleurPion)
            # Changement de l'image
            bouton.config(image=images['pion_' + couleurPion])
            # Incrémentation du nombre de pions
            pionsJoues[couleurPion] += 1
            # On stipule que le joueur a terminé son action
            actionJoueurTerminee = True
        else :
            # S'il y a une coordonnée enregistrée
            if pionsCliques[couleurPion] :
                print('Faut faire le code du déplacement du pion')
                print('La coordonnée du pion en sélection est', pionsCliques[couleurPion])
                print('La coordonée du bouton cliqué est', ligne, colonne)
                # C'est ici que tu dois vérifier en fonction de la coordonnée
                # qui a été stockée si la ligne et la colonne du clic bouton est bien
                # à une case de différence par rapport à cette coordonnée.
     
                # Cela se résume en gros à vérifier que le déplacement est possible (le plus gros du boulot).
                # Si oui, changer l'image du bouton cliqué.
                # Changer l'image du bouton (vide ou base) situé à la coordonnée
                # pionsCliques[couleurPion]
                # initialiser pionsCliques[couleurPion] à None
                # définir actionJoueurTerminee à True
     
        # Si le joueur à terminé son action, on inverse le tour pour donner la main
        # au joueur suivant.
        if actionJoueurTerminee :
            tours.reverse()
     
     
    fenetre = Tk()
     
    # On stipule l'argument name des images, ce qui nous facilitera la tâche pour
    # les futures comparaisons.
    images = {
        'vide': PhotoImage(file="rien2.png", name='vide'),
        'pion_bleu': PhotoImage(file="rienB.png", name='pion_bleu'),
        'pion_rouge': PhotoImage(file="rienR.png", name='pion_rouge'),
        'base_bleu': PhotoImage(file="base1.png", name='base_bleu'),
        'base_rouge': PhotoImage(file="base2.png", name='base_rouge'),
    }
     
    boutons = []
    tours = ['rouge', 'bleu']
    pionsJoues = {'rouge': 0, 'bleu': 0}
    pionsCliques = {'rouge': None, 'bleu': None}
     
    for i in range(8):
        rangee = []
        for j in range(8):
            bout = Button(fenetre, image=images['vide'], command=lambda i=i, j=j: jouer(i, j))
            bout.grid(row=i, column=j)
            rangee.append(bout)
        boutons.append(rangee)
     
    # Changement des images des bases
    boutons[0][0].configure(image=images['base_rouge'])
    boutons[7][7].configure(image=images['base_bleu'])
     
    fenetre.minsize(images['vide'].width() * 8, images['vide'].height() * 8)
    fenetre.mainloop()
    Je t'ai un peu donné toutes les pistes, n'hésite pas à demander si quelque chose te semble obscure.
    Tu peux déjà, si tu es un peu perdu avec un tableau à 2 dimensions, essayer d'afficher les coordonées adjacentes à pionsCliques[couleurPion] dans le else.

  7. #7
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2018
    Messages : 9
    Points : 3
    Points
    3
    Par défaut
    Salut !

    L'explication était très claire mais elle est encore plus avec l'exemple que vous m'avez donné . Je vais me pencher sur ça et essayer de bien comprendre l’ensemble de ces lignes de codes. Et merci pour les commentaires, car sinon je serai un peu perdu !
    Je vous recontacterai si j'ai une question !

    P.S: Merci x) (je ne le dirai jamais assez)

  8. #8
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2018
    Messages : 9
    Points : 3
    Points
    3
    Par défaut
    Bonjour !
    Je viens de tester votre code, il est plutôt bien fait !
    Du coup, dans l'exemple que vous m'avez donné, je ne peux poser qu'un seul pion, celui qui va sur les bases ?
    Pour poser le reste des pions, je dois donc faire la partie où vous avez mis les commentaires ?

  9. #9
    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
    Salut.

    En fait non, je suis parti du principe que les pions ne peuvent être créés que sur leur propre base, ce qui me semblait logique.

    Donc le 1er joueur crée un pion, au tour suivant le 1er pion doit être sorti de sa base, donc déplacement obligatoire, une fois la base libre, le joueur peut à nouveau créer un autre pion.

    Et pour que la base puisse être libre, il faut oui faire le code s'occupant du déplacement des pions.

  10. #10
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2018
    Messages : 9
    Points : 3
    Points
    3
    Par défaut
    Ok j'ai compris !

  11. #11
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2018
    Messages : 9
    Points : 3
    Points
    3
    Par défaut
    En faite au troisième tour (pion rouge posé sur la base, pion bleu posé aussi sur sa base), on ne peux pas déplacer le pion. Dans la console il remarque bien que le pion rouge est bien sélectionné mais il ne le bouge pas...

  12. #12
    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
    En montrant ce que tu as fait, quelqu'un pourrait t'indiquer ce qui ne va pas

    Mais dans mon code, il y a aussi un piège.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    if pionsCliques[couleurPion] is None :
        # ...
        # Le joueur a cliqué une seconde fois sur le même pion
        # On annule la sélection.
    else :
        pionsCliques[couleurPion] = None
        bouton.config(highlightbackground='grey')
    Il y a un problème avec le else, si tu lis le commentaire de ce que c'est censé faire, rien ne garantit que le joueur à déselectionné le bouton sélectionné puisqu'on ne regarde pas si les coordonnées sont les mêmes.
    Il faut donc transformer le else en elif et comparer les coordonnées du bouton cliqué, et du bouton en sélection et l'annuler si elles sont les mêmes.
    Sinon, tu peux t'affranchir de la déselection, c-a-d écraser la précédente sélection tant que le bouton appartient au joueur, c'est à toi de voir comment tu veux gérer cela.

  13. #13
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2018
    Messages : 9
    Points : 3
    Points
    3
    Par défaut
    Salut !
    Un petit coup de pouce pour démarrer ?

  14. #14
    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
    Salut.

    Où en es-tu ?
    C'est pas bien difficile de regarder en fonction de la coordonnée du bouton en sélection si la coordonnée du bouton cliqué se situe à 1 de distance et en même temps regarder si l"image du bouton cliqué ne contient pas déjà un pion de même couleur, histoire que le joueur ne mange pas ses propres pions.

  15. #15
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2018
    Messages : 9
    Points : 3
    Points
    3
    Par défaut
    Yo !
    J'ai réussi, ça fonctionne niquel !
    Merci pour le gros coup de pouce, ça ma vraiment aidé
    Bonne continuation à toi

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

Discussions similaires

  1. jeu de pions en javascript
    Par projetpion dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 30/03/2011, 14h13
  2. déplacements dans un jeu en réseau 2D
    Par mytrill dans le forum Réseau et multijoueurs
    Réponses: 8
    Dernier message: 05/10/2010, 02h08
  3. Gestion des déplacements dans un jeu
    Par penvernyo dans le forum Programmation multimédia/Jeux
    Réponses: 1
    Dernier message: 19/07/2009, 09h58
  4. Jeu de pion en java
    Par Syklops dans le forum Débuter avec Java
    Réponses: 6
    Dernier message: 17/06/2008, 12h27

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