parent
commit
58722263b3
  1. 2
      lib/Pile.py
  2. 111
      lib/listeChaine.py
  3. 14
      main.py

2
lib/Pile.py

@ -1,7 +1,7 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from listeChaine import ListeChaine from lib.listeChaine import ListeChaine
class Pile_lst: class Pile_lst:
"""Implémentation d'une pile par une liste.""" """Implémentation d'une pile par une liste."""

111
lib/listeChaine.py

@ -0,0 +1,111 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Tue Sep 22 20:44:35 2020
@author: manu
"""
class Maillon:
"""Un maillon d'une liste chaînée."""
def __init__(self, valeur, suivant):
self.valeur = valeur
self.suivant = suivant
def __str__(self):
"""Renvoie une chane de caractères représentant le maillon."""
return str(self.valeur)
class ListeChaine:
"""Une liste chaînée."""
def __init__(self, tete=None):
"""Crée une liste vide, ou une liste dont la tete (un maillon)
est donnée."""
self.__tete = tete
def est_vide(self):
"""Indique si la liste est vide."""
return self.__tete is None
def tete(self):
"""Renvoie la valeur du premier élément de la liste."""
if self.est_vide():
raise IndexError("La liste vide n'a pas de tête")
return self.__tete.valeur
def queue(self):
"""Renvoie la queue de la liste."""
if self.est_vide():
raise IndexError("La liste vide n'a pas de queue")
return ListeChaine(self.__tete.suivant)
def ajoute(self, valeur):
"""ajoute `valeur` en tête de la liste."""
self.__tete = Maillon(valeur, self.__tete)
def __str__(self):
"""Renvoie une chaîne de caractères représentant la liste."""
maillon = self.__tete
s = ''
while maillon is not None:
s = s + str(maillon.valeur)
maillon = maillon.suivant
if maillon is not None:
s += '->'
return s
def __len__(self):
"""Renvoie la longueur de la liste."""
maillon = self.__tete
long = 0
while maillon is not None:
long = long + 1
maillon = maillon.suivant
return long
def __getitem__(self, n):
"""Renvoie l'élément d'indice n de la liste."""
maillon = self.__tete
i = 0
while i < n and maillon is not None:
i = i + 1
maillon = maillon.suivant
if maillon is None or n < 0:
raise IndexError("Indice non valide")
return maillon.valeur
def __add__(self, other):
"""Renvoie la liste correspondant à la concaténation des 2 listes."""
if self.est_vide():
return other
v = self.tete()
q = self.queue()
return ListeChaine(Maillon(v, (q + other).__tete))
def reverse(self):
"""Renvoie une liste correspondant à la liste renversée."""
res = ListeChaine()
maillon = self.__tete
while maillon is not None:
res.ajoute(maillon.valeur)
maillon = maillon.suivant
return res
if __name__ == "__main__":
lst = ListeChaine()
print(lst.est_vide())
lst.ajoute(306)
lst.ajoute(42)
lst.ajoute(205)
print(lst)
print(lst.est_vide())
print(lst[0])
print(lst[1])
print(len(lst))
lst2 = ListeChaine()
lst2.ajoute(18)
lst2.ajoute(45)
print(lst + lst2)

14
main.py

@ -1,7 +1,8 @@
from bataille import * from util.bataille import *
from lib.Pile import Pile_lst from lib.Pile import Pile_lst
def bataille(): def bataille():
'''Fonction permettant de lancer le jeu'''
jeux = Jeux() jeux = Jeux()
carte_j1, carte_j2 = jeux.depiler() carte_j1, carte_j2 = jeux.depiler()
nom = str(input("Entrez votre nom")) nom = str(input("Entrez votre nom"))
@ -9,23 +10,28 @@ def bataille():
j2 = Joueur(carte_j2, "Bot") j2 = Joueur(carte_j2, "Bot")
p_j1 = Pile_lst() p_j1 = Pile_lst()
p_j2 = Pile_lst() p_j2 = Pile_lst()
while not j1.paquet_j.est_vide() and not j2.paquet_j.est_vide(): while not j1.paquet_j.est_vide() and not j2.paquet_j.est_vide():#tant que les joueurs ont des cartes on continue.
p_j1.empile(j1.tire_carte()) p_j1.empile(j1.tire_carte())
p_j2.empile(j2.tire_carte()) p_j2.empile(j2.tire_carte())
gagne = p_j1.sommet().compare(p_j2.sommet()) gagne = p_j1.sommet().compare(p_j2.sommet())
#comparaison du gagnant du duels de cartes:
if gagne == 1: if gagne == 1:
#si la valeur de self est supérieure à la valeur de other.
j1.paquet_j.append(p_j2.depiler()) j1.paquet_j.append(p_j2.depiler())
elif gagne == 2: elif gagne == 2:
#si la valeur de other est supérieure à la valeur de self.
j2.paquet_j.append(p_j1.depiler()) j2.paquet_j.append(p_j1.depiler())
else: else:
#si les deux valeurs sont les mêmes, bataille !
for loop in range(2): for loop in range(2):
p_j1.empile(j1.tire_carte()) p_j1.empile(j1.tire_carte())
p_j2.empile(j2.tire_carte()) p_j2.empile(j2.tire_carte())
if j1.paquet_j.est_vide(): if j1.paquet_j.est_vide() and j2.paquet_j.est_vide():
print("parti nul")
elif j1.paquet_j.est_vide():
print("Le perdant est le joueur 1") print("Le perdant est le joueur 1")
else: else:
print("Le perdant est le joueur 2") print("Le perdant est le joueur 2")

Loading…
Cancel
Save