diff --git a/JeuBataille.py b/JeuBataille.py new file mode 100644 index 0000000..e3eb2bc --- /dev/null +++ b/JeuBataille.py @@ -0,0 +1,136 @@ +#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() + + + +