Prérequis :

  • installation de Python 3.X
  • dézipage de l’archive disponible en téléchargement dans le bas de l’article
  • cliquez droit sur le script “jeu_graphique.py”, <Edit with IDLE> puis enfoncez la touche <F5>

carte_a_jouer.py

import random
class Carte (object):

    def __init__(self):
        """définition des attributs de classe"""
        self.paquet_52=[] # containeur liste vide
        self.valeurs=["2","3","4","5","6","7","8","9","10","Valet","Dame","Roi","As"] # valeurs des cartes
        self.couleurs=["Coeur","Carreau","Pique","Trefle"] # couleurs des cartes

    def paquet (self):
        """méthode créant le paquet de cartes en mode texte dans la liste self.paquet_52"""
        for val in self.valeurs :
            for coul in self.couleurs :
                self.paquet_52.append (str(val) + " de " + str(coul)) # emploi de la méthode de la classe list .append ()

    def melanger (self):
        """ méthode mélangeant le paquet de 52 cartes """
        random.shuffle(self.paquet_52)

    def diviser (self):
        """méthode permettant de séparer le paquet en deux paquets distincts de 26 cartes mélangées"""
        self.paquet_j1 = [] # containeur liste vide
        self.paquet_j2 = [] # containeur liste vide
        self.paquet_j1 = self.paquet_52[0:len(self.paquet_52)//2]
        # self.paquet_52[0:len(self.paquet_52)//2] ou self.paquet_52[0:26] ou self.paquet_52[:26]
        self.paquet_j2 = self.paquet_52[len(self.paquet_52)//2:]
        # idem commentaire du dessus

jeu_graphique.py

from carte_a_jouer import Carte
from tkinter import *
import tkinter.messagebox

class graph_jeu (object):

    def __init__(self):
        # import jeu cartes à jouer en mode texte
        self.a = Carte ()
        self.a.paquet ()
        self.a.melanger ()
        self.a.diviser ()
        # jeu graphique
        self.fenetre = Tk()
        self.fenetre.title("Bataille Cardinal Mercier")
        self.fenetre.config(bg ='red', padx = 5, pady = 5)
        self.dos_carte_joueur = PhotoImage(file = "./cartes/1_dos_carte.gif")
        self.dos_carte_ordinateur = PhotoImage(file = "./cartes/1_dos_carte.gif")
        self.depart_carte_joueur = PhotoImage(file = "./cartes/1_depart_carte.gif")
        self.depart_carte_ordinateur = PhotoImage(file = "./cartes/1_depart_carte.gif")
        # jeu jouer
        self.a.paquet_j1
        self.a.paquet_j2
        self.paquet_milieu = []
        self.paquet_egalite = []
        self.paquet_win_j1 = []
        self.paquet_win_j2 = []
        self.tour = 1

    def jeu_depart (self):
        # fenetre dessus
        self.fenetre_dessus = Frame(self.fenetre,borderwidth=2,relief=FLAT, bg="white")
        self.fenetre_dessus.pack(side=TOP,padx=5,pady=5)

        self.paquet_joueur = Label (self.fenetre_dessus,image=self.dos_carte_joueur)
        self.paquet_joueur.pack (side=LEFT, padx = 5, pady = 5)
        self.carte_joueur = Label (self.fenetre_dessus,image=self.depart_carte_joueur)
        self.carte_joueur.pack (side=LEFT, padx = 10, pady = 5)
        self.carte_ordinateur = Label (self.fenetre_dessus,image=self.depart_carte_ordinateur)
        self.carte_ordinateur.pack (side=LEFT, padx = 10, pady = 5)
        self.paquet_ordinateur = Label (self.fenetre_dessus,image=self.dos_carte_ordinateur)
        self.paquet_ordinateur.pack (side=LEFT, padx = 5, pady = 5)

        # fenetre milieu
        self.fenetre_milieu = Frame(self.fenetre,borderwidth=2,relief=GROOVE,bg="black")
        self.fenetre_milieu.pack(side=TOP,padx=30,pady=5)
        
        self.fenetre_milieu_gauche = Frame(self.fenetre_milieu,borderwidth=2,relief=GROOVE,bg="white")
        self.fenetre_milieu_gauche.pack(side=LEFT,padx=5,pady=5)
        self.texte1b = Label(self.fenetre_milieu_gauche, text=str(len (self.a.paquet_j1))+ " cartes à jouer" + "\n" + str(len(self.paquet_win_j1))+ " cartes gagnées",fg = 'red',bg = 'white', font=('times', 15, 'bold'))
        self.texte1b.pack (side=LEFT, padx=85, pady=10)
        
        self.fenetre_milieu_milieu = Frame(self.fenetre_milieu,borderwidth=2,relief=GROOVE,bg="white")
        self.fenetre_milieu_milieu.pack(side=LEFT,padx=5,pady=5)
        self.texte1a = Label(self.fenetre_milieu_milieu, text="POINTS : 000\nTOTAL : 000",fg = 'red',bg = 'white', font=('times', 15, 'bold'))
        self.texte1a.pack (side=LEFT, padx=40, pady=10)
        self.texte2a = Label(self.fenetre_milieu_milieu, text="POINTS : 000\nTOTAL : 000",fg = 'red',bg = 'white', font=('times', 15, 'bold'))
        self.texte2a.pack (side=LEFT, padx=60, pady=10)
        
        self.fenetre_milieu_droite = Frame(self.fenetre_milieu,borderwidth=2,relief=GROOVE,bg="white")
        self.fenetre_milieu_droite.pack(side=LEFT,padx=5,pady=5)
        self.texte2b = Label(self.fenetre_milieu_droite, text=str(len (self.a.paquet_j2))+ " cartes à jouer" + "\n" + str(len(self.paquet_win_j2))+ " cartes gagnées",fg = 'red',bg = 'white', font=('times', 15, 'bold'))
        self.texte2b.pack (side=LEFT, padx=60, pady=10)
        
        # fenetre dessous
        self.fenetre_dessous = Frame(self.fenetre,borderwidth=2,relief=GROOVE,bg="white")
        self.fenetre_dessous.pack(side=BOTTOM,padx=5,pady=5)
        self.texte1 = Label(self.fenetre_dessous, text="JOUEUR          ",fg = 'black',bg = 'white', font=('times', 20, 'bold'))
        self.texte1.pack (side=LEFT, padx=100, pady=10)
        self.bouton_jouer = Button(self.fenetre_dessous,text='jouer',command=self.jeu_jouer)
        self.bouton_jouer.pack(side=LEFT,padx=20,pady=10)
        self.bouton_rejouer = Button(self.fenetre_dessous,text='rejouer',command=self.rejouer)
        self.bouton_rejouer.pack(side=LEFT,padx=20,pady=10)
        self.bouton_destroy = Button(self.fenetre_dessous,text='quitter',command=self.fenetre.destroy)
        self.bouton_destroy.pack(side=LEFT,padx=20,pady=10)
        self.texte2 = Label(self.fenetre_dessous, text="          ORDINATEUR",fg = 'black',bg = 'white', font=('times', 20, 'bold'))
        self.texte2.pack (side=RIGHT, padx=60, pady=10)

    

    def jeu_jouer (self):
        
        while len(self.a.paquet_j1)+len(self.a.paquet_j2) != 0 :
            self.paquet_milieu.append(self.a.paquet_j1.pop(0))
            self.paquet_milieu.append(self.a.paquet_j2.pop(0))
            
            print ("°°°°°°°° ","Tour ", self.tour," °°°°°°°°")
            print ("°°°°°°°°°°°°°°°°°°°°°°°°°°°")
            print ("j1 :",self.paquet_milieu[0],"et j2 :",self.paquet_milieu[1])
            self.points2 ()
            print ("Carte joueur : ",self.score_carte_1, " points")
            print ("Carte ordinateur : ",self.score_carte_2, " points")
            print ("Jeu Carte joueur : ",len (self.a.paquet_j1), " cartes")
            print ("Jeu Carte ordinateur : ",len (self.a.paquet_j2), " cartes")
            
            
            if self.a.valeurs.index(self.paquet_milieu[0].split(" ")[0])>self.a.valeurs.index(self.paquet_milieu[1].split(" ")[0]):
                print("---> Le joueur 1 gagne")
                self.carte_joueur_jeu = PhotoImage(file ="./Cartes/" + self.paquet_milieu[0].split (" ")[0].lower () + "_" + self.paquet_milieu[0].split (" ")[2].lower () + ".gif")
                self.carte_joueur.config (image=self.carte_joueur_jeu)
                self.carte_ordinateur_jeu = PhotoImage(file ="./Cartes/" + self.paquet_milieu[1].split (" ")[0].lower () + "_" + self.paquet_milieu[1].split (" ")[2].lower () + ".gif")
                self.carte_ordinateur.config (image=self.carte_ordinateur_jeu)
                self.paquet_win_j1.extend(self.paquet_milieu)
                self.paquet_milieu = []
                self.paquet_win_j1.extend(self.paquet_egalite)
                self.paquet_egalite = []
                self.points ()
                print ("Le joueur 1 a ",self.score_joueur_1, "points")
                print ("Le joueur 2 a ",self.score_joueur_2, "points")   
                self.texte1a.config (text="POINTS : " + str(self.score_carte_1) + "\nTOTAL : " + str(self.score_joueur_1))
                self.texte2a.config (text="POINTS : " + str(self.score_carte_2) + "\nTOTAL : " + str(self.score_joueur_2))
                self.texte1b.config (text=str(len (self.a.paquet_j1))+ " cartes à jouer" + "\n" + str(len(self.paquet_win_j1))+ " cartes gagnées")
                self.texte2b.config (text=str(len (self.a.paquet_j2))+ " cartes à jouer" + "\n" + str(len(self.paquet_win_j2))+ " cartes gagnées")
                if len(self.a.paquet_j1)+len(self.a.paquet_j2) == 0:
                    tkinter.messagebox.showinfo("La bataille est terminée","Rejouez ou quittez")
                break
            
            elif self.a.valeurs.index(self.paquet_milieu[0].split(" ")[0])<self.a.valeurs.index(self.paquet_milieu[1].split(" ")[0]): print("---> Le joueur 2 gagne")
                self.carte_joueur_jeu = PhotoImage(file ="./Cartes/" + self.paquet_milieu[0].split (" ")[0].lower () + "_" + self.paquet_milieu[0].split (" ")[2].lower () + ".gif")
                self.carte_joueur.config (image=self.carte_joueur_jeu)
                self.carte_ordinateur_jeu = PhotoImage(file ="./Cartes/" + self.paquet_milieu[1].split (" ")[0].lower () + "_" + self.paquet_milieu[1].split (" ")[2].lower () + ".gif")
                self.carte_ordinateur.config (image=self.carte_ordinateur_jeu)
                self.paquet_win_j2.extend(self.paquet_milieu)
                self.paquet_milieu = []
                self.paquet_win_j2.extend(self.paquet_egalite)
                self.paquet_egalite = []
                self.points ()
                print ("Le joueur 1 a ",self.score_joueur_1, "points")
                print ("Le joueur 2 a ",self.score_joueur_2, "points")
                self.texte1a.config (text="POINTS : " + str(self.score_carte_1) + "\nTOTAL : " + str(self.score_joueur_1))
                self.texte2a.config (text="POINTS : " + str(self.score_carte_2) + "\nTOTAL : " + str(self.score_joueur_2))
                self.texte1b.config (text=str(len (self.a.paquet_j1))+ " cartes à jouer" + "\n" + str(len(self.paquet_win_j1))+ " cartes gagnées")
                self.texte2b.config (text=str(len (self.a.paquet_j2))+ " cartes à jouer" + "\n" + str(len(self.paquet_win_j2))+ " cartes gagnées")
                if len(self.a.paquet_j1)+len(self.a.paquet_j2) == 0:
                    tkinter.messagebox.showinfo("La bataille est terminée","Rejouez ou quittez")
                break
            
            else:
                print("---> Egalité")
                self.carte_joueur_jeu = PhotoImage(file ="./Cartes/" + self.paquet_milieu[0].split (" ")[0].lower () + "_" + self.paquet_milieu[0].split (" ")[2].lower () + ".gif")
                self.carte_joueur.config (image=self.carte_joueur_jeu)
                self.carte_ordinateur_jeu = PhotoImage(file ="./Cartes/" + self.paquet_milieu[1].split (" ")[0].lower () + "_" + self.paquet_milieu[1].split (" ")[2].lower () + ".gif")
                self.carte_ordinateur.config (image=self.carte_ordinateur_jeu)
                self.paquet_egalite.extend(self.paquet_milieu)
                self.paquet_milieu = []
                if len(self.a.paquet_j1)+len(self.a.paquet_j2) == 0:
                    tkinter.messagebox.showinfo("La bataille est terminée","Rejouez ou quittez")
                break
        self.tour += 1
        
                         
    def points (self):

        self.score_joueur_1 = 0
        self.score_joueur_2 = 0
        
        
        for carte in self.paquet_win_j1 :
            carte.split(" ")[0]
            if carte.split(" ")[0]in self.a.valeurs:
                carte.split(" ")[0]= self.a.valeurs.index(carte.split(" ")[0])
                self.score_joueur_1 += self.a.valeurs.index(carte.split(" ")[0])+2
        for carte in self.paquet_win_j2 :
            carte.split(" ")[0]
            if carte.split(" ")[0]in self.a.valeurs:
                carte.split(" ")[0]= self.a.valeurs.index(carte.split(" ")[0])
                self.score_joueur_2 += self.a.valeurs.index(carte.split(" ")[0])+2
        

    def points2 (self):

        self.score_carte_1 = 0
        self.score_carte_2 = 0

        for valeur in self.a.valeurs :
            if valeur == self.paquet_milieu[0].split (" ")[0]:
                self.score_carte_1 = self.a.valeurs.index(valeur)+2        
            if valeur == self.paquet_milieu[1].split (" ")[0]:
                self.score_carte_2 = self.a.valeurs.index(valeur)+2

    def rejouer (self):

        self.fenetre.destroy( ) 
        g_j = graph_jeu()
        g_j.jeu_depart ()

if __name__ =='__main__':
    g_j = graph_jeu()
    g_j.jeu_depart ()

Dossier comprenant les cartes à jouer et les scripts :