Projet : Un jeu de bataille
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/Bataille_(jeu)
On utilisera un jeu de 52 cartes (pas de joker) faces cachées et en cas d’égalité chaque joueur place une première carte face cachée puis une seconde carte face visible pour décider qui fera la levée.
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.
- Au début du tour de jeu, le joueur prendra carte du dessus (defiler) et s’il gagne, il prend les cartes jouées sur la pile de bataille et les ajoute par dessous (enfiler).
- Les paquets de bataille sont des piles, car on ajoute toujours sur le sommet du paquet et on regarde et compare la carte du sommet.
- Lorsqu’un joueur gagne, il prend les cartes des piles en commençant par celle du dessus.
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