You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
137 lines
5.6 KiB
137 lines
5.6 KiB
1 month ago
|
#Jeu de bataille par Brahimi Massinissa - Yacob Sadik - Ayoub El Hajam
|
||
|
#Pour une meilleure expérience du jeu, on vous conseille de ne pas mettre l'interface tkinter en plein écran
|
||
|
|
||
|
from tkinter import *
|
||
|
import random
|
||
|
from File import File_chaine as File
|
||
|
|
||
|
|
||
|
#------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||
|
#La classe Carte qui, comme son nom l'indique, crée les cartes nécessaires au jeu
|
||
|
|
||
|
|
||
|
class Carte:
|
||
|
def __init__(self, valeur, couleur):
|
||
|
self.valeur = valeur
|
||
|
self.couleur = couleur
|
||
|
|
||
|
def compare(self, other):
|
||
|
#On compare self.valeur à other.valeur, si self est plus grand que other on renvoie 1, sinon -1 et si y'a égalité on renvoie 0
|
||
|
if self.valeur > other.valeur:
|
||
|
return 1
|
||
|
elif self.valeur < other.valeur:
|
||
|
return -1
|
||
|
else:
|
||
|
return 0
|
||
|
|
||
|
def __str__(self):
|
||
|
return f"{self.valeur} de {self.couleur}"
|
||
|
|
||
|
#------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||
|
#La classe Jeux qui sera, comme son nom l'indique, au coeur du jeu
|
||
|
|
||
|
|
||
|
class Jeux:
|
||
|
def __init__(self, nb_cartes=52):
|
||
|
valeurs = range(1, 15)
|
||
|
couleurs = ['Coeur', 'Carreau', 'Trèfle', 'Pique']
|
||
|
self.paquet = [Carte(val, couleur) for val in valeurs for couleur in couleurs][:nb_cartes] #Pour créer le paquet de carte on associe chaque valeur de 1 à 15 à chaque couleurs pour avoir toutes les combinaisons possibles
|
||
|
random.shuffle(self.paquet) #La "méthode" shuffle sert à mélanger par exemple on peut mélanger l'lordre d'une liste grâce à ça
|
||
|
self.tours = 0
|
||
|
|
||
|
|
||
|
def distribue(self):
|
||
|
#la méthode distribue permet, et bien, de distribuer les cartes, oui
|
||
|
f1 = File()
|
||
|
f2 = File()
|
||
|
milieu = len(self.paquet) // 2
|
||
|
for carte in self.paquet[:milieu]:
|
||
|
f1.enfiler(carte)
|
||
|
for carte in self.paquet[milieu:]:
|
||
|
f2.enfiler(carte)
|
||
|
self.f1 = f1
|
||
|
self.f2 = f2
|
||
|
return f1, f2
|
||
|
|
||
|
def jeu(self, texte_j1, texte_j2, label_resultat, nbcartes_j1, nbcartes_j2, label_tours):
|
||
|
self.tours = self.tours + 1
|
||
|
if f1.est_vide() or f2.est_vide():
|
||
|
gagnant = "Joueur 2" if f1.est_vide() else "Joueur 1"
|
||
|
label_resultat.config(text=f"Fin du jeu ! {gagnant} a gagné !") #le tkinter.config sert à "Modifier la valeur des attributs spécifiés d'un controle." d'après le site "Mon Python pas à pas"
|
||
|
label_tours.config(text=f"Tour final : {self.tours}")
|
||
|
nbcartes_j1.config(text=f"Nombre de cartes : {f1.taille()}")
|
||
|
nbcartes_j2.config(text=f"Nombre de cartes : {f2.taille()}")
|
||
|
|
||
|
|
||
|
carte1, carte2 = f1.defiler(), f2.defiler()
|
||
|
#On fait défilier les cartes une à une de chaque joueurs
|
||
|
texte_j1.config(text=f"Le joueur 1 a obtenu : {carte1}")
|
||
|
texte_j2.config(text=f"Le joueur 2 a obtenu : {carte2}")
|
||
|
|
||
|
if carte1.compare(carte2) == 0:
|
||
|
#C'est là ou se fait le test pour savoir qui remporte la manche
|
||
|
label_resultat.config(text="Egalité !") #Malheureusement on n'a pas réussi à faire le cas d'égalité ou les joueurs doivent mettre leurs cartes à l'envers etc..
|
||
|
f1.enfiler(carte1)
|
||
|
f2.enfiler(carte2)
|
||
|
elif carte1.compare(carte2) == 1:
|
||
|
f1.enfiler(carte1)
|
||
|
f1.enfiler(carte2)
|
||
|
label_resultat.config(text="Le joueur 1 remporte cette manche !")
|
||
|
elif carte1.compare(carte2) == -1:
|
||
|
f2.enfiler(carte1)
|
||
|
f2.enfiler(carte2)
|
||
|
label_resultat.config(text="Le joueur 2 remporte cette manche !")
|
||
|
|
||
|
label_tours.config(text=f"Tour numéro : {self.tours}")
|
||
|
nbcartes_j1.config(text=f"Nombre de cartes : {f1.taille()}")
|
||
|
nbcartes_j2.config(text=f"Nombre de cartes : {f2.taille()}")
|
||
|
|
||
|
|
||
|
#------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||
|
#On instancie le jeu avec les 2 files
|
||
|
|
||
|
|
||
|
jeu = Jeux(nb_cartes=52)
|
||
|
f1, f2 = jeu.distribue()
|
||
|
|
||
|
|
||
|
#------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||
|
#Partie Interface Graphique
|
||
|
|
||
|
|
||
|
fenetre = Tk()
|
||
|
fenetre.title("Le Jeu de Bataille")
|
||
|
|
||
|
j1 = LabelFrame(fenetre, text="Joueur 1", padx=40, pady=80, bg="#16c6e5")
|
||
|
j1.pack(fill="both", expand="yes")
|
||
|
|
||
|
|
||
|
texte_j1 = Label(j1, text="Le joueur 1 a obtenu :") #texte_j1 correspond au texte qui s'affiche dans le tkinter qui annonce quelle carte a obtenu le joueur 1
|
||
|
texte_j1.pack()
|
||
|
nbcartes_j1 = Label(j1, text="Nombre de cartes :") #nbcartes_j1 correspond au texte qui s'affiche dans le tkinter qui montre le nombre de cartes restantes du joueur 1
|
||
|
nbcartes_j1.pack()
|
||
|
|
||
|
bouton = Button(fenetre, text="Jouez !", command=lambda: jeu.jeu(texte_j1, texte_j2, label_resultat, nbcartes_j1, nbcartes_j2, label_tours)) #Le bouton qui permet de déclencher un nouveau tour
|
||
|
bouton.pack()
|
||
|
|
||
|
label_resultat = Label(fenetre, text="Cliquez sur 'Jouez!' pour commencer")
|
||
|
label_resultat.pack()
|
||
|
label_tours = Label(fenetre, text="Tour numéro :")
|
||
|
label_tours.pack()
|
||
|
|
||
|
|
||
|
j2 = LabelFrame(fenetre, text="Joueur 2", padx=40, pady=81, bg="#e1451f")
|
||
|
j2.pack(fill="both", expand="yes")
|
||
|
|
||
|
|
||
|
texte_j2 = Label(j2, text="Le joueur 2 a obtenu :") #pareil pour le joueur 2
|
||
|
texte_j2.pack()
|
||
|
nbcartes_j2 = Label(j2, text="Nombre de cartes :") #pareil pour le joueur 2
|
||
|
nbcartes_j2.pack()
|
||
|
|
||
|
fenetre.mainloop()
|
||
|
|
||
|
|
||
|
|
||
|
|