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 :

jeux d'échecs


Sujet :

Tkinter Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2015
    Messages : 5
    Par défaut jeux d'échecs
    Bonjour, je me lance dans la vaste aventure de vouloir programmer un jeu d'échecs sans IA, juste deux humains qui s'affrontent. J'ai déjà commencé à écrire le code j'ai pas mal exploré les possibilités graphiques, et je me suis lancé sur du Tkinter. Mon idée initiale est de faire 64 cases en grille qui sont des boutons(ce qui sera donc le plateau), en suite je positionne sur ces boutons d'autres boutons qui seront donc les pièces, de façon à ce que le bouton pièce recouvre intégralement le bouton du plateau. La suite serait donc de cliquer sur une pièce, puis sur une case du plateau, ce qui ferait bouger la pièce si le déplacement est autorisé, mais je n'ai aucune idée de comment m'y prendre et si mon idée est initialement possible. Voici ce que j'ai écris :
    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
    from tkinter import *
    root = Tk()
    can = Canvas(root, width=2000, height=2000, background='ivory')
    can.pack()
    echecs = Frame(can, borderwidth=10, padx=100, pady=50)
    echecs.pack(side=LEFT)
    Colonnes = [-1,1,2,3,4,5,6,7,8,-1]
    Lignes = [-1,1,2,3,4,5,6,7,8,-1]
    tour_blanc = PhotoImage(file='tour.blanc.png')
    tour_noir = PhotoImage(file='tour.noir.png')
    cavalier_blanc = PhotoImage(file='cavalier.blanc.png')
    cavalier_noir = PhotoImage(file='cavalier.noir.png')
    fou_blanc = PhotoImage(file='fou.blanc.png')
    fou_noir = PhotoImage(file='fou.noir.png')
    roi_blanc = PhotoImage(file='roi.blanc.png')
    roi_noir = PhotoImage(file='roi.noir.png')
    reine_blanc = PhotoImage(file='reine.blanc.png')
    reine_noir = PhotoImage(file='reine.noir.png')
    pion_blanc = PhotoImage(file='pion.blanc.png')
    pion_noir = PhotoImage(file='pion.noir.png')
    color_red = ['red', 'blue']
    color2=['black','white']
    color1=['white','black']
    j=1
    i=1
    c=1
    cases=[]
    def tbs(tb) :
    	tb.grid(column=1, row=5, sticky='nesw')
    while j < 9 :
    	while i < 9 : 
    		if (j == 1 or j == 8) and (i == 1 or i == 8):
    			if i == 1 :
    				tb = Button(echecs, image=tour_blanc, text= str(i)+str(j), bg='black', fg='white', relief=FLAT)
    				a1=Button(echecs, text= str(i)+str(j), borderwidth=1, height=7, width=14, bg=color1[c], fg=color2[c], relief=SUNKEN, command=tbs(tb))
    				a1.grid(column=Colonnes[j], row=Lignes[i])
     
    			else :
    				Button(echecs, text= str(i)+str(j), borderwidth=1, height=7, width=14, bg=color1[c], fg=color2[c], relief=SUNKEN).grid(column=Colonnes[j], row=Lignes[i])
    				Button(echecs, image=tour_noir, bg=color1[c], fg=color2[c], relief=FLAT).grid(column=Colonnes[j], row=Lignes[i])
    			c=1-c
    			i+=1
    		elif (j == 2 or j == 7) and (i == 1 or i == 8):
    			if i == 1 :
    				Button(echecs, text= str(i)+str(j), borderwidth=1, height=7, width=14, bg=color1[c], fg=color2[c], relief=SUNKEN).grid(column=Colonnes[j], row=Lignes[i])
    				Button(echecs, image=cavalier_blanc, bg=color1[c], fg=color2[c], relief=FLAT).grid(column=Colonnes[j], row=Lignes[i])
    			else :
    				Button(echecs, text= str(i)+str(j), borderwidth=1, height=7, width=14, bg=color1[c], fg=color2[c], relief=SUNKEN).grid(column=Colonnes[j], row=Lignes[i])
    				Button(echecs, image=cavalier_noir, bg=color1[c], fg=color2[c], relief=FLAT).grid(column=Colonnes[j], row=Lignes[i])
    			c=1-c
    			i+=1
    		elif (j == 3 or j == 6) and (i == 1 or i == 8):
    			if i == 1 :
    				Button(echecs, text= str(i)+str(j), borderwidth=1, height=7, width=14, bg=color1[c], fg=color2[c], relief=SUNKEN).grid(column=Colonnes[j], row=Lignes[i])
    				Button(echecs, image=fou_blanc, bg=color1[c], fg=color2[c], relief=FLAT).grid(column=Colonnes[j], row=Lignes[i])
    			else :
    				Button(echecs, text= str(i)+str(j), borderwidth=1, height=7, width=14, bg=color1[c], fg=color2[c], relief=SUNKEN).grid(column=Colonnes[j], row=Lignes[i])
    				Button(echecs, image=fou_noir, bg=color1[c], fg=color2[c], relief=FLAT).grid(column=Colonnes[j], row=Lignes[i])
    			c=1-c
    			i+=1
    		elif j == 4 and (i == 1 or i == 8):
    			if i == 1 :
    				Button(echecs, text= str(i)+str(j), borderwidth=1, height=7, width=14, bg=color1[c], fg=color2[c], relief=SUNKEN).grid(column=Colonnes[j], row=Lignes[i])
    				Button(echecs, image=roi_blanc, bg=color1[c], fg=color2[c], relief=FLAT).grid(column=Colonnes[j], row=Lignes[i])
    			else :
    				Button(echecs, text= str(i)+str(j), borderwidth=1, height=7, width=14, bg=color1[c], fg=color2[c], relief=SUNKEN).grid(column=Colonnes[j], row=Lignes[i])
    				Button(echecs, image=roi_noir, bg=color1[c], fg=color2[c], relief=FLAT).grid(column=Colonnes[j], row=Lignes[i])
    			c=1-c
    			i+=1
    		elif j == 5 and (i == 1 or i == 8):
    			if i == 1 :
    				Button(echecs, text= str(i)+str(j), borderwidth=1, height=7, width=14, bg=color1[c], fg=color2[c], relief=SUNKEN).grid(column=Colonnes[j], row=Lignes[i])
    				Button(echecs, image=reine_blanc, bg=color1[c], fg=color2[c], relief=FLAT).grid(column=Colonnes[j], row=Lignes[i])
    			else :
    				Button(echecs, text= str(i)+str(j), borderwidth=1, height=7, width=14, bg=color1[c], fg=color2[c], relief=SUNKEN).grid(column=Colonnes[j], row=Lignes[i])
    				Button(echecs, image=reine_noir, bg=color1[c], fg=color2[c], relief=FLAT).grid(column=Colonnes[j], row=Lignes[i])
    			c=1-c
    			i+=1
    		elif i == 2 or i == 7 :
    			if i == 2 :
    				Button(echecs, text= str(i)+str(j), borderwidth=1, height=7, width=14, bg=color1[c], fg=color2[c], relief=SUNKEN).grid(column=Colonnes[j], row=Lignes[i])
    				Button(echecs, image=pion_blanc, bg=color1[c], fg=color2[c], relief=FLAT).grid(column=Colonnes[j], row=Lignes[i])
    			else :
    				Button(echecs, text= str(i)+str(j), borderwidth=1, height=7, width=14, bg=color1[c], fg=color2[c], relief=SUNKEN).grid(column=Colonnes[j], row=Lignes[i])
    				Button(echecs, image=pion_noir, bg=color1[c], fg=color2[c], relief=FLAT).grid(column=Colonnes[j], row=Lignes[i])
    			c=1-c
    			i+=1
    		else :
    			Button(echecs, text= str(i)+str(j), borderwidth=1, height=7, width=14, bg=color1[c], fg=color2[c], relief=SUNKEN).grid(column=Colonnes[j], row=Lignes[i])
    			c=1-c
    			i+=1
    	i=1
    	j+=1
    	c=1-c
    print(echecs.grid_slaves(column=1, row= 5))
    #tb.grid_remove()
    #tb.grid()
    root.mainloop()
    Dans le code je me sers du bouton 'tb' - > tour blanche pour testé deux trois trucs, peu probant.

    D'autres problèmes se sont ajoutés comme le fait que je voulais que mon bouton 'tb' ne place la tour que quand je clique dessus (simple test) mais à la place il me l'affiche dès le lancement du programme. Je ne sais pas pourquoi. (c'est probablement évident mais pas pour moi). Puis le second problème est comment gérer les collisions et les déplacements hors de la grille ? No sé. Ainsi que comment réussir à faire mes boutons pièces et gérer leurs déplacement de sorte à ce qu'ils conservent la couleur de la case sur laquelle ils sont. Je ne vous demande bien évidemment pas de me faire mon programme, puisque ça n'aurait aucun intérêt, mais si vous avez des méthodes, des idées, une façon structuré de m'orienter pour y parvenir, je suis preneur. Merci d'avance.

  2. #2
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 062
    Par défaut
    Là c'est juste pas jouable, il faut être plus méthodique, travailler avec des fonctions etc...

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

    Citation Envoyé par Rakseir Voir le message
    D'autres problèmes se sont ajoutés comme le fait que je voulais que mon bouton 'tb' ne place la tour que quand je clique dessus (simple test) mais à la place il me l'affiche dès le lancement du programme. Je ne sais pas pourquoi. (c'est probablement évident mais pas pour moi).
    Lorsque vous écrivez:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    a1=Button(echecs, text= str(i)+str(j), borderwidth=1, height=7, width=14, bg=color1[c], fg=color2[c], relief=SUNKEN, command=tbs(tb))
    Le "command=tbs(tb)" ou plutôt le tbs(tb) provoque l'exécution de la fonction avec le paramètre tb
    Il faudrait écrire "command=lambda tb=tb: tbs(tb)" pour fabriquer une fonction qui appellera tbs avec tb en paramètre lorsqu'on clique sur le Button....

    Citation Envoyé par Rakseir Voir le message
    Puis le second problème est comment gérer les collisions et les déplacements hors de la grille ? No sé. Ainsi que comment réussir à faire mes boutons pièces et gérer leurs déplacement de sorte à ce qu'ils conservent la couleur de la case sur laquelle ils sont.
    Le soucis précédent montre que vous débutez avec tkinter. Il n'est pas interdit de "voir grand" mais comment définir les marches qui vous permettront d'atteindre votre objectif? Difficile de le faire à votre place !

    Peut être que programmer les déplacements d'un pion sur un damier 3x3 serait un bon début pour voir tout ce que vous devez maîtriser avant de faire plus compliqué.

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

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2015
    Messages : 5
    Par défaut
    Je ne vous demande bien évidemment pas de me faire mon programme, puisque ça n'aurait aucun intérêt, mais si vous avez des méthodes, des idées, une façon structuré de m'orienter pour y parvenir, je suis preneur.
    Là c'est juste pas jouable, il faut être plus méthodique, travailler avec des fonctions etc...
    Merci de ta réponse, mais ne m'aide pas du tout. En revanche si tu as une suggestion, je suis tout ouïe.

  5. #5
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    Par défaut
    wiztricks t'indique qu'il faut par exemple découper le programme en fonctions, la base de la programmation.
    Il te dit également de commencer par un problème plus simple car tu t'attaques sans doute à un gros morceau.
    Afin de faire des marathons, on commence par faire des footings.

  6. #6
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 062
    Par défaut
    En revanche si tu as une suggestion, je suis tout ouïe.
    Je l'ai fais,

    1. être plus méthodique
    2. utiliser des fonctions (pour rendre propre le code et éviter les répétitions inutiles)


    Je pourrais rajouter,
    1. éviter les nombres magiques
    2. ajouter des commentaires (dans ton cas ça semble pas pensable de ne pas en mettre)


    Donc je viens de te guider, pour que tu puisses faire tes recherches...

    Tu peux aussi regarder du côté de la PEP 8 qui donnera une réflexion sur la bonne manière de coder dans ce langage.
    On pourrait ajouter que le zen de python est de bon conseil.

    Un livre intéressant est Apprendre à programmer avec Python 3 par Gérard Swinnen, que l'on peut télécharger gratuitement.

    Bonne continuation...

Discussions similaires

  1. Jeux échecs cavalier.
    Par kbprince dans le forum C
    Réponses: 27
    Dernier message: 14/05/2013, 10h39
  2. Réponses: 2
    Dernier message: 20/03/2010, 10h27
  3. Jeux d'échecs : interaction avec un moteur
    Par GLSpirit dans le forum Développement 2D, 3D et Jeux
    Réponses: 13
    Dernier message: 30/07/2009, 17h48
  4. [script.aculo.us] DragNDrop - Jeux d'échec
    Par Valentin33 dans le forum Bibliothèques & Frameworks
    Réponses: 0
    Dernier message: 29/07/2008, 21h52
  5. Jeux d'échecs persistants ?
    Par khayyam90 dans le forum Web
    Réponses: 3
    Dernier message: 10/07/2008, 14h11

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