Projet : Un jeu de bataille

Numérique et sciences informatiques

donnees

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 bataille
Algorithme 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

Amélioration

Amélioration 1 :

Utiliser tkinter (par exemple) pour créer une interface graphique.

    def image(self) :
        """
        méthode permettant l'affichage d'une carte"
        """
        fichier = "cartes/"+ str(self.valeur) + self.couleur+".GIF"
        fenetre = tk.Tk( )
        #fenetre.geometry ("935 x 692 ")
        image_carte = tk.PhotoImage( file = fichier )
        label = tk.Label ( fenetre , image = image_carte )
        label.pack ( )
        fenetre.mainloop ( )