Mattheo
2 years ago
commit
fb682fcd7c
2 changed files with 138 additions and 0 deletions
@ -0,0 +1,114 @@ |
|||||
|
#!/usr/bin/env python3 |
||||
|
# -*- coding: utf-8 -*- |
||||
|
|
||||
|
class File_lst: |
||||
|
"""Implémentation d'une file par une liste.""" |
||||
|
def __init__(self): |
||||
|
"""Crée une file vide.""" |
||||
|
self.__file = [] |
||||
|
|
||||
|
def est_vide(self): |
||||
|
"""Indique si la file est vide.""" |
||||
|
return self.__file == [] |
||||
|
|
||||
|
def enfiler(self, valeur): |
||||
|
"""Enfile l'élément valeur.""" |
||||
|
self.__file.append(valeur) |
||||
|
|
||||
|
def defiler(self): |
||||
|
"""Défile la tête de la file et la renvoie.""" |
||||
|
return self.__file.pop(0) |
||||
|
|
||||
|
def taille(self): |
||||
|
"""Renvoie la taille de la file.""" |
||||
|
return len(self.__file) |
||||
|
|
||||
|
def tete(self): |
||||
|
"""Renvoie la tête de la file (sans la défiler).""" |
||||
|
return self.__file[0] |
||||
|
|
||||
|
def __str__(self): |
||||
|
s = "tete->" |
||||
|
for val in self.__file: |
||||
|
s += str(val) + "->" |
||||
|
return s + "queue" |
||||
|
|
||||
|
|
||||
|
class Maillon: |
||||
|
"""Un maillon d'une liste doublement chaînée.""" |
||||
|
def __init__(self, precedent, valeur, suivant): |
||||
|
self.valeur = valeur |
||||
|
self.precedent = precedent |
||||
|
self.suivant = suivant |
||||
|
|
||||
|
def __str__(self): |
||||
|
return str(self.valeur) |
||||
|
|
||||
|
|
||||
|
class File_chaine: |
||||
|
"""Implémentation d'une file par une liste doublement chaînée.""" |
||||
|
def __init__(self): |
||||
|
"""Crée une file vide.""" |
||||
|
self.__debut = self.__fin = None |
||||
|
self.__taille = 0 |
||||
|
|
||||
|
def est_vide(self): |
||||
|
"""Indique si la file est vide.""" |
||||
|
return self.__taille == 0 |
||||
|
|
||||
|
def enfiler(self, valeur): |
||||
|
"""Enfile l'élément valeur.""" |
||||
|
maillon = Maillon(self.__fin, valeur, None) |
||||
|
if self.est_vide(): |
||||
|
self.__debut = self.__fin = maillon |
||||
|
else: |
||||
|
self.__fin.suivant = maillon |
||||
|
self.__fin = maillon |
||||
|
self.__taille += 1 |
||||
|
|
||||
|
def defiler(self): |
||||
|
"""Défile la tête de la file et la renvoie.""" |
||||
|
if self.est_vide(): |
||||
|
raise IndexError("Impossible de défiler une file vide.") |
||||
|
valeur = self.__debut.valeur |
||||
|
self.__taille -= 1 |
||||
|
if self.est_vide(): |
||||
|
self.__debut = self.__fin = None |
||||
|
else: |
||||
|
self.__debut = self.__debut.suivant |
||||
|
self.__debut.precedent = None |
||||
|
return valeur |
||||
|
|
||||
|
def taille(self): |
||||
|
"""Renvoie la taille de la file.""" |
||||
|
return self.__taille |
||||
|
|
||||
|
def tete(self): |
||||
|
"""Renvoie la tête de la file (sans la défiler).""" |
||||
|
if self.est_vide(): |
||||
|
raise IndexError("Une file vide n'a pas de tête.") |
||||
|
return self.__debut.valeur |
||||
|
|
||||
|
def __str__(self): |
||||
|
s = "tete->" |
||||
|
maillon = self.__debut |
||||
|
while maillon is not None: |
||||
|
s += str(maillon) + "->" |
||||
|
maillon = maillon.suivant |
||||
|
return s + "queue" |
||||
|
|
||||
|
|
||||
|
if __name__ == "__main__": |
||||
|
f = File_lst() |
||||
|
print(f.est_vide()) |
||||
|
f.enfiler('A') |
||||
|
f.enfiler('B') |
||||
|
f.enfiler('C') |
||||
|
print(f.est_vide()) |
||||
|
print(f.tete()) |
||||
|
print(f) |
||||
|
print(f.taille()) |
||||
|
print(f.defiler()) |
||||
|
print(f.defiler()) |
||||
|
print(f.defiler()) |
||||
|
print(f.est_vide()) |
@ -0,0 +1,24 @@ |
|||||
|
Votre mission, si vous l’acceptez (et même si vous ne l’acceptez pas), est de réaliser un jeu de bataille en |
||||
|
utilisant une structure de donnée adaptée, et avec une interface graphique. Vous aurez pour cela 6 heures |
||||
|
(les trois séances jusqu’aux vacances de Noël). |
||||
|
Plus précisément, on attend au minimum : |
||||
|
• Une classe Carte ayant |
||||
|
– deux attributs valeur et couleur |
||||
|
– une méthode compare qui prend en paramètre une autre carte other, et qui renvoie |
||||
|
1 si la valeur de self est supérieure à la valeur de other ; |
||||
|
−1 si la valeur de other est supérieure à la valeur de self ; |
||||
|
0 si les deux valeurs sont les mêmes. |
||||
|
• Une classe Jeux ayant |
||||
|
– Un attribut paquet contenant toutes les cartes du jeux. Le nombre de cartes (32 ou 54) sera un paramètre |
||||
|
du constructeur. Ce paquet sera créé puis mélangé dans le constructeur. |
||||
|
– Une méthode distribue qui renvoie deux Files contenant la moitié des cartes du paquet chacune. On |
||||
|
utilisera la classe File du cours (disponible sur Moodle). |
||||
|
À chaque tour de jeu, chaque joueur joue la carte supérieure de son paquet. Le joueur ayant la carte de plus |
||||
|
grande valeur récupère les deux cartes et les remets sous son paquet. |
||||
|
En cas d’égalité, chaque joueur ajoute une carte à l’envers, puis une autre carte à l’endroit, et on compare à |
||||
|
nouveau les valeurs. En cas de nouvelle égalité, on réitère le processus. Le gagnant remporte l’ensemble des |
||||
|
cartes jouées. |
||||
|
Si un joueur ne peut plus jouer car il n’a plus de carte, il a perdu la partie. |
||||
|
Concernant l’interface graphique, elle sera réalisée en Tkinter, et permettra de faire une partie contre l’or- |
||||
|
dinateur. Il n’est pas nécessaire d’afficher les cartes à un format graphique (même si ce n’est bien sûr pas |
||||
|
interdit) : on pourra se contenter de textes de la forme « 3 de carreau » ou « roi de pique ». |
Loading…
Reference in new issue