diff --git a/bataille.py b/bataille.py new file mode 100644 index 0000000..715234d --- /dev/null +++ b/bataille.py @@ -0,0 +1,110 @@ +from File import File_chaine as File +from random import shuffle + +class Carte: + def __init__(self, valeur, couleur): + self.valeur = valeur + self.couleur = couleur + + def compare(self, autre): + if self.valeur > autre.valeur: + return 1 + elif self.valeur < autre.valeur: + return -1 + else: + return 0 + + def __str__(self): + return str(self.valeur) + " " + self.couleur + + +class Jeu: + def __init__(self, nom1="joueur1", nom2="joueur 2"): + self.paquet = [] + self.f1 = None + self.f2 = None + self.nom1 = nom1 + self.nom2 = nom2 + + def distribue(self, nb_total_cartes): + self.paquet = [] + self.f1 = File() + self.f2 = File() + + couleurs = ["pique", "carreau", "coeur", "trèfle"] + + nombre = nb_total_cartes // 4 + + for valeur in range(nombre): + for couleur in couleurs: + self.paquet.append(Carte(valeur, couleur)) + + shuffle(self.paquet) + + for i in range(nombre * 2): + self.f1.enfiler(self.paquet[i]) + + for i in range(nombre * 2, nombre * 4): + self.f2.enfiler(self.paquet[i]) + + return self.f1, self.f2 + + def partie(self): + while not self.f1.est_vide() and not self.f2.est_vide(): + c1 = self.f1.defiler() + c2 = self.f2.defiler() + print(c1, c2, "\n") + + if c1.compare(c2) == 1: + self.f1.enfiler(c1) + self.f1.enfiler(c2) + + elif c1.compare(c2) == -1: + self.f2.enfiler(c1) + self.f2.enfiler(c2) + + else: + while True: + pot = [c1, c2] + + if self.f1.taille() < 2: + return "{} gagne ({} n'a pas assez de carte)".format(self.nom2, self.nom1) + if self.f2.taille() < 2: + return "{} gagne ({} n'a pas assez de carte)".format(self.nom1, self.nom2) + + pot.append(self.f1.defiler()) + pot.append(self.f2.defiler()) + + c1 = self.f1.defiler() + c2 = self.f2.defiler() + print(c1, c2) + + pot.extend([c1, c2]) + + if c1.compare(c2) == 1: + for c in pot: + self.f1.enfiler(c) + break + + elif c1.compare(c2) == -1: + for c in pot: + self.f2.enfiler(c) + break + + print(self.f1, "\n\n", self.f2, "\n") + + if self.f1.est_vide(): + return "{} gagne".format(self.nom2) + else: + return "{} gagne".format(self.nom1) + + +nom1 = input("Nom du joueur 1 : ") +nom2 = input("Nom du joueur 2 : ") +nb_total_cartes = int(input("Nombre total de cartes dans le paquet : ")) + +jeu = Jeu(nom1, nom2) +f1, f2 = jeu.distribue(nb_total_cartes) +print(f"{nom1} :", f1) +print(f"{nom2} :", f2) +print(jeu.partie()) \ No newline at end of file diff --git a/projet_bataille.py b/projet_bataille.py index aa4faff..c7df78c 100644 --- a/projet_bataille.py +++ b/projet_bataille.py @@ -1,12 +1,15 @@ -from File import File_chaine as File -from random import shuffle +from File import File_chaine as File # importation de la classe File_chaine pour représenter les paquets +from random import shuffle # importation de shuffle pour mélanger le paquet class Carte: def __init__(self, valeur, couleur): + # initialise une carte avec une valeur et une couleur self.valeur = valeur self.couleur = couleur def compare(self, autre): + # compare la carte actuelle avec une autre carte + # retourne 1 si self > autre, -1 si self < autre et 0 si elles sont égal if self.valeur > autre.valeur: return 1 elif self.valeur < autre.valeur: @@ -15,57 +18,112 @@ class Carte: return 0 def __str__(self): + # retourne la carte return str(self.valeur) + " " + self.couleur + class Jeu: - def __init__(self): - self.paquet = [] + def __init__(self, nom1="joueur1", nom2="joueur 2"): + # initialise un jeu + self.paquet = [] # liste contenant toutes les cartes + self.f1 = None # file du joueur 1 + self.f2 = None # file du joueur 2 + self.nom1 = nom1 # nom du joueur 1 + self.nom2 = nom2 # nom du joueur 2 + + def distribue(self, nb_total_cartes): + # distribue les cartes entre les deux joueurs + self.paquet = [] # réinitialisation du paquet + self.f1 = File() # initialisation de la file du joueur 1 + self.f2 = File() # initialisation de la file du joueur 2 - def distribue(self, nombre): - f1 = File() - f2 = File() + couleurs = ["pique", "carreau", "coeur", "trèfle"] # Couleurs des cartes - couleurs = ["pique", "carreau", "coeur", "trèfle"] + nombre = nb_total_cartes // 4 # Nombre de cartes par couleur + # création du paquet complet for valeur in range(nombre): for couleur in couleurs: self.paquet.append(Carte(valeur, couleur)) - shuffle(self.paquet) - for i in range(nombre*2): - f1.enfiler(self.paquet[i]) + shuffle(self.paquet) # mélange du paquet + + # distribue la moitié def cartes pour f1 + for i in range(nombre * 2): + self.f1.enfiler(self.paquet[i]) - for i in range(nombre*2, nombre*4): - f2.enfiler(self.paquet[i]) + # et l'autre moitié pour f2 + for i in range(nombre * 2, nombre * 4): + self.f2.enfiler(self.paquet[i]) - return f1, f2 + return self.f1, self.f2 # Retourne les deux files def partie(self): - while not f1.est_vide() and not f2.est_vide(): - c1 = f1.defiler() - c2 = f2.defiler() - print(c1, c2,"\n") + # lance la partie de bataille jusqu'à ce qu'un joueur gagne + while not self.f1.est_vide() and not self.f2.est_vide(): + c1 = self.f1.defiler() # carte du joueur 1 + c2 = self.f2.defiler() # carte du joueur 2 + print(c1, c2, "\n") + if c1.compare(c2) == 1: - f1.enfiler(c1) - f1.enfiler(c2) + # joueur 1 gagne le tour et remet les cartes dans sa file + self.f1.enfiler(c1) + self.f1.enfiler(c2) + elif c1.compare(c2) == -1: - f2.enfiler(c1) - f2.enfiler(c2) + # joueur 2 gagne le tour et remet les cartes dans sa file + self.f2.enfiler(c1) + self.f2.enfiler(c2) + else: - f1.enfiler(c1) - f2.enfiler(c2) - print(f1, "\n\n", f2, "\n") - return ("udyjqogqvuiz jrnigeyfhzz'epjfioef je te baise ta mère utgfydres fdvkuhbeyufss idhge") - -"""c1 = Carte(5, "bleu") -c2 = Carte(4, "vert") -c3 = Carte(6, "cyan") -c4 = Carte(5, "bissap") - -print(c1.compare(c4))""" - -jeu = Jeu() -f1, f2 = jeu.distribue(13) -print ("f1 :", f1) -print ("f2 :", f2) -jeu.partie() \ No newline at end of file + # en cas d'égalité + while True: + pot = [c1, c2] # pot temporaire contenant les cartes en jeu + + # vérifie si un joueur a assez de cartes pour continuer la bataille + if self.f1.taille() < 2: + return "{} gagne ({} n'a pas assez de carte)".format(self.nom2, self.nom1) + if self.f2.taille() < 2: + return "{} gagne ({} n'a pas assez de carte)".format(self.nom1, self.nom2) + + # chaque joueur place une carte face cachée dans le pot + pot.append(self.f1.defiler()) + pot.append(self.f2.defiler()) + + # chaque joueur place ensuite une carte face visible + c1 = self.f1.defiler() + c2 = self.f2.defiler() + print(c1, c2) + + pot.extend([c1, c2]) # Ajoute ces cartes au pot + + # vérifie qui gagne cette bataille + if c1.compare(c2) == 1: + for c in pot: + self.f1.enfiler(c) + break + + elif c1.compare(c2) == -1: + for c in pot: + self.f2.enfiler(c) + break + + # affiche l'état actuel des deux files + print(self.f1, "\n\n", self.f2, "\n") + + # détermine le gagnant final + if self.f1.est_vide(): + return "{} gagne".format(self.nom2) + else: + return "{} gagne".format(self.nom1) + + +nom1 = input("Nom du joueur 1 : ") # demande le nom du joueur 1 +nom2 = input("Nom du joueur 2 : ") # demande le nom du joueur 2 +nb_total_cartes = int(input("Nombre total de cartes dans le paquet : ")) # Nombre total de cartes + +jeu = Jeu(nom1, nom2) # création du jeu avec les noms des joueurs +f1, f2 = jeu.distribue(nb_total_cartes) # distribution des cartes +print(f"{nom1} :", f1) # affiche la file du joueur 1 +print(f"{nom2} :", f2) # affiche la file du joueur 2 +print(jeu.partie()) # lance la partie et affiche le résultat final