Projet : Un jeu de cartes "8 Américain"
Numérique et sciences informatiques

Projet : Réaliser un jeu de bataille avec un jeu de 52 cartes
Les règles du jeu sont expliqués sur wikipedia : https://fr.wikipedia.org/wiki/8_am%C3%A9ricain
Le jeu de cartes à l’origine du Uno. Pour y jouer, celui qui commence peut recouvrir le talon soit par une carte de la même couleur, de la même valeur ou jouer une carte spéciale (valet, roi, joker, reine). Lorsqu’il ne peut pas jouer, il doit prendre une carte de la pioche. Si celle-ci est jouable, il peut la poser, sinon il passe son tour en gardant la carte piochée. Le but est très simple : se débarrasser de toutes ses cartes. Celui qui n’a plus qu’une seule carte doit dire “Carte” à voix haute. S’il ne le fait pas, l’autre lui fait remarquer, ce qui l’oblige à piocher deux cartes supplémentaires. Le joueur qui totalise le moins de points à la fin de la partie a gagné. Sachez qu’il existe de nombreuses variantes et règles différentes.
On utilisera un jeu de 52 cartes (pas de joker).
Cahier des charges :
- Pour simuler le jeu, les structures de données utilisées sont des files et des piles.
- Le jeu de chaque joueur peut être représenté par une file.
- Le talon est une pile car on y ajoute des cartes.
- La pioche est une pile, car on pioche toujours sur le sommet du paquet.
Le code du programme :
Entraînement 1 :
Créer une méthode pour la distribution aléatoire des cartes dans les files jeu1 et jeu2 à l'aide des classes suivantes.VALEURS = ['','', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'Valet', 'Dame', 'Roi', 'As']
COULEURS = ['', 'pique', 'coeur', 'carreau', 'trefle']
class Carte:
"""Initialise couleur (de 1 à 4), et valeur (de 2 à 14)"""
def __init__(self, couleur, valeur):
self.couleur = couleur
self.valeur = valeur
def get_nom(self):
"""Renvoie le nom de la Carte As, 2, ... 10, Valet, Dame, Roi"""
return VALEURS[self.valeur]
def get_couleur(self):
"""Renvoie la couleur de la Carte (parmi pique, coeur, carreau, trefle)"""
return COULEURS[self.couleur]
class PaquetDeCarte:
"""Initialise un paquet de cartes, avec un attribut contenu, de type list, vide"""
def __init__(self):
self.contenu = []
def remplir(self):
"""Remplit le paquet de cartes : en parcourant les couleurs puis les valeurs"""
self.contenu = [Carte(couleur, valeur) for couleur in range(1, 5) for valeur in range(2, 15)]
def get_carte_at(self, pos):
"""Renvoie la Carte qui se trouve à la position donnée"""
if 0 <= pos < 52:
return self.contenu[pos]
Entraînement 2 :
Implémenter le code pour la batailleAlgorithme de la bataille
tant que le jeu 1 n’est pas vide ou le jeu 2 n’est pas vide faire
Tirer une carte du paquet de J1 sur le tapis
Tirer une carte du paquet de J2 sur le tapis
Comparer les valeurs
tant que les 2 cartes du dessus des piles du tapis sont égales faire
Tirer 2 fois une carte du paquet de J1 sur le tapis
Tirer 2 fois une carte du paquet de J2 sur le tapis
fin tant que
Si tapis j1 > tapis j2
tant que la pile du tapis j1 n’est pas vide faire
Prendre la carte sur le dessus de la pile du tapis 1
La glisser face cachée sous le paquet d e j1
fin tant que
tant que la pile du tapis j2 n’est pas vide faire
Prendre la carte sur le dessus de la pile du tapis 2
La glisser sous le paquet de J1
fin tant que
Sinon :
tant que la pile du tapis j1 n’est pas vide faire
Prendre la carte sur le dessus de la pile du tapis 1
La glisser face cachée sous le paquet de j2
fin tant que
tant que la pile du tapis j2 n’est pas vide faire
Prendre la carte sur le dessus de la pile du tapis 2
La glisser sous le paquet de J2
fin tant que
fin tant que
Le gagnant est celui qui a toutes les cartes dans son jeu