Exemplo n.º 1
0
    def test_trouver_joueurs_au_plus_haut_total(self):
        partie = Partie(5, 4)
        joueurs = [Joueur(1), Joueur(2), Joueur(3), Joueur(4), Joueur(5)]
        # Initialisation de leurs dés
        joueurs[0].dés = [Dé(5), Dé(2)]
        joueurs[1].dés = [Dé(1), Dé(2)]
        joueurs[2].dés = [Dé(3), Dé(5)]
        joueurs[3].dés = [Dé(6), Dé(6)]
        joueurs[4].dés = [Dé(2), Dé(4)]

        # Cas 1: Un seul joueur a le plus haut total
        self.assertEqual([joueurs[3]],
                         partie.trouver_joueurs_au_plus_haut_total(joueurs))

        # Cas 2: Deux joueurs sont à égalité avec le plus haut total
        joueurs[1].dés = [Dé(6), Dé(5)]
        joueurs[3].dés = [Dé(6), Dé(5)]
        liste_joueurs_plus_haut_total = partie.trouver_joueurs_au_plus_haut_total(
            joueurs)
        self.assertIn(joueurs[1], liste_joueurs_plus_haut_total)
        self.assertIn(joueurs[3], liste_joueurs_plus_haut_total)

        # Cas 3: Trois joueurs sont à égalité avec le plus haut total
        joueurs[1].dés = [Dé(4), Dé(6)]
        joueurs[3].dés = [Dé(6), Dé(4)]
        joueurs[4].dés = [Dé(6), Dé(4)]
        liste_joueurs_plus_haut_total = partie.trouver_joueurs_au_plus_haut_total(
            joueurs)
        self.assertIn(joueurs[1], liste_joueurs_plus_haut_total)
        self.assertIn(joueurs[3], liste_joueurs_plus_haut_total)
        self.assertIn(joueurs[4], liste_joueurs_plus_haut_total)
Exemplo n.º 2
0
    def test_verifier_si_fin_de_ronde(self):

        partie = Partie(6, 3)
        partie.joueur_courant = partie.joueurs[4]
        self.assertFalse(partie.verifier_si_fin_de_ronde())

        partie.joueurs[4].dés = []
        self.assertTrue(partie.verifier_si_fin_de_ronde())
Exemplo n.º 3
0
class FenetrePymafia(Tk):
    """
    Classe principale du module pour l'interface du jeu pymafia
    Attributes:
        partie (Partie): Données d'une partie du jeu Pymafia
        frames_joueurs (list): Liste contenant les frames des 4 joueurs de la partie. Les index sont:
        0, joueur à gauche; 1, joueur en haut; 2, joueur à droite; 3, joueur en bas
    """

    def __init__(self):
        super().__init__()
        self.title("Jeu de pymafia")
        self.resizable(0, 0)       
        self.partie = Partie(4, 4)

        self.partie.preparer_une_partie()
        


        self.frames_joueurs = []

        frame_joueur_gauche = FrameJoueurGauche(self.partie.joueurs[0], self)
        self.frames_joueurs.append(frame_joueur_gauche)
        frame_joueur_haut = FrameJoueurHaut(self.partie.joueurs[1], self)
        self.frames_joueurs.append(frame_joueur_haut)
        frame_joueur_droite = FrameJoueurDroite(self.partie.joueurs[2], self)
        self.frames_joueurs.append(frame_joueur_droite)
        frame_joueur_bas = FrameJoueurBas(self.partie.joueurs[3], self)
        self.frames_joueurs.append(frame_joueur_bas)

        frame_joueur_gauche.grid(row=1, column=0)
        frame_joueur_haut.grid(row=0, column=1)
        frame_joueur_droite.grid(row=1, column=2)
        frame_joueur_bas.grid(row=2, column=1)

        for frame in self.frames_joueurs:
            frame.inactiver_bouton()
        
        menubar = Menu(self)
        filemenu = Menu(menubar, tearoff=0)
        filemenu.add_command(label="Démarrer", command=demander_nombre_joueur)
        filemenu.add_command(label="Recommencer", command=recommencer)
        filemenu.add_command(label="Instructions", command=shows_instructions)
        
        filemenu.add_separator()

        filemenu.add_command(label="Exit", command=quitter)
        menubar.add_cascade(label="Fichier", menu=filemenu)

        self.config(menu=menubar)
        messagebox.showinfo(f"Ronde #{self.partie.ronde}", f"Joueur {self.partie.premier_joueur.identifiant} commence la ronde")
        if messagebox.askquestion("Début de la partie", f"Joueur #{self.partie.premier_joueur.identifiant} est le premier joueur\n"
        "Voulez-vous commencer dans le sens horaire ?") == "yes":
            self.partie.sens= 1
        else:
            self.partie.sens = -1 
        self.frames_joueurs[self.partie.premier_joueur.identifiant-1].activer_bouton()
Exemplo n.º 4
0
    def test_ajuster_points_du_gagnant(self):

        partie = Partie(3, 2)

        partie.joueur_courant = partie.joueurs[2]
        partie.joueur_courant.score = 40

        partie.ajuster_points_du_gagnant(15)

        self.assertEqual(55, partie.joueur_courant.score)
Exemplo n.º 5
0
    def __init__(self):
        super().__init__()
        self.title("Jeu de pymafia")
        self.resizable(0, 0)       
        self.partie = Partie(4, 4)

        self.partie.preparer_une_partie()
        


        self.frames_joueurs = []

        frame_joueur_gauche = FrameJoueurGauche(self.partie.joueurs[0], self)
        self.frames_joueurs.append(frame_joueur_gauche)
        frame_joueur_haut = FrameJoueurHaut(self.partie.joueurs[1], self)
        self.frames_joueurs.append(frame_joueur_haut)
        frame_joueur_droite = FrameJoueurDroite(self.partie.joueurs[2], self)
        self.frames_joueurs.append(frame_joueur_droite)
        frame_joueur_bas = FrameJoueurBas(self.partie.joueurs[3], self)
        self.frames_joueurs.append(frame_joueur_bas)

        frame_joueur_gauche.grid(row=1, column=0)
        frame_joueur_haut.grid(row=0, column=1)
        frame_joueur_droite.grid(row=1, column=2)
        frame_joueur_bas.grid(row=2, column=1)

        for frame in self.frames_joueurs:
            frame.inactiver_bouton()
        
        menubar = Menu(self)
        filemenu = Menu(menubar, tearoff=0)
        filemenu.add_command(label="Démarrer", command=demander_nombre_joueur)
        filemenu.add_command(label="Recommencer", command=recommencer)
        filemenu.add_command(label="Instructions", command=shows_instructions)
        
        filemenu.add_separator()

        filemenu.add_command(label="Exit", command=quitter)
        menubar.add_cascade(label="Fichier", menu=filemenu)

        self.config(menu=menubar)
        messagebox.showinfo(f"Ronde #{self.partie.ronde}", f"Joueur {self.partie.premier_joueur.identifiant} commence la ronde")
        if messagebox.askquestion("Début de la partie", f"Joueur #{self.partie.premier_joueur.identifiant} est le premier joueur\n"
        "Voulez-vous commencer dans le sens horaire ?") == "yes":
            self.partie.sens= 1
        else:
            self.partie.sens = -1 
        self.frames_joueurs[self.partie.premier_joueur.identifiant-1].activer_bouton()
Exemplo n.º 6
0
    def test_retirer_joueurs_sans_points(self):

        partie = Partie(8, 2)

        # Deux joueurs n'ont plus de points
        partie.joueurs[3].score = partie.joueurs[6].score = 0

        liste_joueurs_retires = partie.retirer_joueurs_sans_points()
        liste_joueurs_toujours_actifs = partie.joueurs[:3] + partie.joueurs[
            4:6] + [partie.joueurs[7]]

        # Les deux joueurs retirés sont listés dans la valeur de retour de partie.retirer_joueurs_sans_points()
        self.assertEqual([partie.joueurs[3], partie.joueurs[6]],
                         liste_joueurs_retires)
        # La liste de joueurs actifs ne contient plus joueurs[3] et joueurs[6]
        self.assertEqual(liste_joueurs_toujours_actifs, partie.joueurs_actifs)
Exemplo n.º 7
0
    def test_determiner_liste_gagnants(self):

        partie = Partie(7, 2)

        partie.joueurs[0].score = 10
        partie.joueurs[1].score = 20
        partie.joueurs[2].score = 30
        partie.joueurs[3].score = 40
        partie.joueurs[4].score = 35
        partie.joueurs[5].score = 20
        partie.joueurs[6].score = 5

        self.assertEqual([3], partie.determiner_liste_gagnants())

        partie.joueurs[6].score = partie.joueurs[0].score = 40
        self.assertEqual([0, 3, 6], partie.determiner_liste_gagnants())
Exemplo n.º 8
0
    def test_jouer_dés_en_fin_de_ronde(self):

        partie = Partie(3, 2)

        partie.joueurs[0].dés = [Dé(4), Dé(5), Dé(6)]
        partie.joueurs[1].dés = [Dé(1), Dé(2)]
        partie.joueurs[2].dés = []
        partie.joueur_courant = partie.joueurs[2]

        dés_joueur0 = [Dé(4), Dé(5), Dé(6)]
        dés_joueur1 = [Dé(1), Dé(2)]

        partie.jouer_dés_en_fin_de_ronde()

        # Les dés des deux joueurs à qui il reste des dés doivent changer (petite possibilité de dés identiques)
        self.assertNotEqual(str(dés_joueur0), str(partie.joueurs[0].dés))
        self.assertNotEqual(str(dés_joueur1), str(partie.joueurs[1].dés))
        self.assertEqual([], partie.joueurs[2].dés)
Exemplo n.º 9
0
    def test_verifier_des_joueur_courant_pour_1_et_6(self):

        partie = Partie(2, 2)
        partie.joueurs[0].dés = [Dé(1), Dé(2), Dé(3), Dé(4), Dé(5), Dé(6)]
        partie.joueur_courant = partie.joueurs[0]
        self.assertEqual((1, 1),
                         partie.verifier_dés_joueur_courant_pour_1_et_6())

        partie.joueurs[0].dés = [Dé(2), Dé(2), Dé(3), Dé(4), Dé(5), Dé(5)]
        self.assertEqual((0, 0),
                         partie.verifier_dés_joueur_courant_pour_1_et_6())

        partie.joueurs[0].dés = [Dé(2), Dé(2), Dé(3), Dé(4), Dé(5), Dé(6)]
        self.assertEqual((0, 1),
                         partie.verifier_dés_joueur_courant_pour_1_et_6())

        partie.joueurs[0].dés = [Dé(1), Dé(1), Dé(1), Dé(1), Dé(1), Dé(1)]
        self.assertEqual((6, 0),
                         partie.verifier_dés_joueur_courant_pour_1_et_6())
Exemplo n.º 10
0
    def test_ajuster_points_des_perdants_en_fin_de_ronde(self):

        partie = Partie(4, 2)
        partie.joueur_courant = partie.joueurs[0]
        partie.joueurs[0].dés = []
        partie.joueurs[1].dés = [Dé(5), Dé(3)]
        partie.joueurs[2].dés = [Dé(2)]
        partie.joueurs[3].dés = [Dé(4), Dé(1), Dé(6)]

        partie.joueurs[1].score = 10
        partie.joueurs[2].score = 35
        partie.joueurs[3].score = 8

        points_au_gagnant = partie.ajuster_points_des_perdants_en_fin_de_ronde(
        )

        self.assertEqual(18, points_au_gagnant)
        self.assertEqual(2, partie.joueurs[1].score)
        self.assertEqual(33, partie.joueurs[2].score)
        self.assertEqual(0, partie.joueurs[3].score)
Exemplo n.º 11
0
    def test_passer_a_la_ronde_suivante(self):

        partie = Partie(4, 4)

        partie.passer_a_la_ronde_suivante()
        self.assertEqual(2, partie.ronde)

        partie.ronde = 8
        partie.passer_a_la_ronde_suivante()
        self.assertEqual(9, partie.ronde)
Exemplo n.º 12
0
    def test_deplacer_les_dés_1_et_6(self):
        partie = Partie(2, 2)
        partie.sens = 1
        partie.joueur_courant = partie.joueurs[0]
        partie.determiner_joueur_suivant()

        # Cas 1: 1 dé de valeur 1 et 1 dé de valeur 6
        partie.joueurs[0].dés = [Dé(1), Dé(2), Dé(3), Dé(4), Dé(5), Dé(6)]
        partie.joueurs[1].dés = [Dé(2), Dé(2), Dé(4)]
        partie.deplacer_les_dés_1_et_6(1, 1)

        self.assertEqual(str([Dé(2), Dé(3), Dé(4), Dé(5)]),
                         str(partie.joueurs[0].dés))
        self.assertEqual(4, len(partie.joueurs[1]))

        # Cas 2: 5 dé de valeur 1 et 0 dé de valeur 6
        partie.joueurs[0].dés = [Dé(1), Dé(1), Dé(1), Dé(1), Dé(1)]
        partie.joueurs[1].dés = [Dé(2), Dé(2), Dé(4)]
        partie.deplacer_les_dés_1_et_6(5, 0)

        self.assertEqual(str([]), str(partie.joueurs[0].dés))
        self.assertEqual(3, len(partie.joueurs[1]))

        # Cas 3: 0 dé de valeur 1 et 5 dé de valeur 6
        partie.joueurs[0].dés = [Dé(6), Dé(6), Dé(6), Dé(6), Dé(6)]
        partie.joueurs[1].dés = [Dé(2), Dé(2), Dé(4)]
        partie.deplacer_les_dés_1_et_6(0, 5)

        self.assertEqual(str([]), str(partie.joueurs[0].dés))
        self.assertEqual(8, len(partie.joueurs[1]))
Exemplo n.º 13
0
    def test_creer_joueurs(self):

        partie = Partie(5, 2)
        self.assertEqual(len(partie.joueurs), 5)

        nombre_joueurs_humains = 0
        nombre_joueurs_ordinateurs = 0

        for i in range(5):
            if isinstance(partie.joueurs[i], JoueurHumain):
                nombre_joueurs_humains += 1
            else:
                nombre_joueurs_ordinateurs += 1

        self.assertEqual(2, nombre_joueurs_humains)
        self.assertEqual(3, nombre_joueurs_ordinateurs)
Exemplo n.º 14
0
 def créer_partie(self, nombre_de_joueurs):
     """
     Crée les sous-frames contenant les joueurs
     :param nombre_de_joueurs:
     :return: référence vers la partie créée
     """
     partie = Partie(nombre_de_joueurs, nombre_de_joueurs)
     self.framesJoueurs.append(
         FrameJoueurGaucheHaut(self, partie.joueurs[0]))
     self.framesJoueurs.append(FrameJoueurDroitHaut(self,
                                                    partie.joueurs[1]))
     self.framesJoueurs[0].grid(row=0, column=0, padx=15, pady=5)
     self.framesJoueurs[1].grid(row=0, column=2, padx=15, pady=5)
     if nombre_de_joueurs >= 3:
         self.framesJoueurs.append(
             FrameJoueurDroitBas(self, partie.joueurs[2]))
         self.framesJoueurs[2].grid(row=2, column=2, padx=15, pady=5)
     if nombre_de_joueurs == 4:
         self.framesJoueurs.append(
             FrameJoueurGaucheBas(self, partie.joueurs[3]))
         self.framesJoueurs[3].grid(row=2, column=0, padx=15, pady=5)
     return partie
Exemplo n.º 15
0
    def __init__(self):

        super().__init__()
        self.title("Jeu de pymafia")
        self.resizable(0, 0)
        self.partie = Partie(4, 4)

        self.partie.reinitialiser_dés_joueurs()

        self.frames_joueurs = []

        frame_joueur_gauche = FrameJoueurGauche(self.partie.joueurs[0], self)
        self.frames_joueurs.append(frame_joueur_gauche)
        frame_joueur_haut = FrameJoueurHaut(self.partie.joueurs[1], self)
        self.frames_joueurs.append(frame_joueur_haut)
        frame_joueur_droite = FrameJoueurDroite(self.partie.joueurs[2], self)
        self.frames_joueurs.append(frame_joueur_droite)
        frame_joueur_bas = FrameJoueurBas(self.partie.joueurs[3], self)
        self.frames_joueurs.append(frame_joueur_bas)

        frame_joueur_gauche.grid(row=1, column=0)
        frame_joueur_haut.grid(row=0, column=1)
        frame_joueur_droite.grid(row=1, column=2)
        frame_joueur_bas.grid(row=2, column=1)
Exemplo n.º 16
0
    def test_determiner_joueur_suivant(self):

        partie = Partie(7, 6)
        partie.joueur_courant = partie.joueurs[5]

        # Cas 1: Sens horaire, on passe au prochain avec un retour au premier joueur
        partie.sens = 1
        partie.determiner_joueur_suivant()
        self.assertEqual(partie.joueurs[6], partie.joueur_suivant)

        partie.joueur_courant = partie.joueurs[6]
        partie.determiner_joueur_suivant()
        self.assertEqual(partie.joueurs[0], partie.joueur_suivant)

        # Cas 2: Sens anti-horaire, on passe au joueur précédent
        partie.sens = -1
        partie.joueur_courant = partie.joueurs[1]
        partie.determiner_joueur_suivant()
        self.assertEqual(partie.joueurs[0], partie.joueur_suivant)

        partie.joueur_courant = partie.joueurs[0]
        partie.determiner_joueur_suivant()
        self.assertEqual(partie.joueurs[6], partie.joueur_suivant)

        # Cas 3: Sens horaire, avec seulement quelques joueurs actifs.
        partie.sens = 1
        partie.joueurs_actifs = [
            partie.joueurs[1], partie.joueurs[4], partie.joueurs[6]
        ]
        partie.joueur_courant = partie.joueurs[4]

        partie.determiner_joueur_suivant()
        self.assertEqual(partie.joueurs[6], partie.joueur_suivant)

        partie.joueur_courant = partie.joueurs[6]
        partie.determiner_joueur_suivant()
        self.assertEqual(partie.joueurs[1], partie.joueur_suivant)

        # Cas 4: Sens anti-horaire, avec seulement quelques joueurs actifs
        partie.sens = -1

        partie.determiner_joueur_suivant()
        self.assertEqual(partie.joueurs[4], partie.joueur_suivant)

        partie.joueur_courant = partie.joueurs[1]
        partie.determiner_joueur_suivant()
        self.assertEqual(partie.joueurs[6], partie.joueur_suivant)
Exemplo n.º 17
0
    def test_trouver_indices_max(self):

        self.assertEqual([1], Partie.trouver_indices_max([5, 11, 9, 10, 6]))
        self.assertEqual([2], Partie.trouver_indices_max([1, 2, 3]))
        self.assertEqual([2, 3, 4], Partie.trouver_indices_max([1, 2, 3, 3,
                                                                3]))
Exemplo n.º 18
0
        if nombre_joueurs_humains.isnumeric():
            nombre_joueurs_humains = int(nombre_joueurs_humains)
            if 1 <= nombre_joueurs_humains <= nombre_joueurs:
                return nombre_joueurs_humains
        print("Choix invalide. Veuillez choisir un chiffre entre 1 et {}.\n".
              format(nombre_joueurs))


def afficher_instructions():
    """
    Fonction qui affiche les instructions du jeu.
    """
    print("Instruction du jeu pyMafia.\n")


if __name__ == '__main__':

    print("Jouons une partie de pyMafia!\n")
    afficher_instructions()
    nombre_joueurs = demander_nombre_joueurs()
    nombre_joueurs_humains = demander_nombre_joueurs_humains(nombre_joueurs)
    print("\n")

    # Création de l'objet partie
    partie = Partie(nombre_joueurs, nombre_joueurs_humains)

    # Démarrage de cette partie.
    partie.jouer()

    input('Appuyer sur ENTER pour quitter.')
Exemplo n.º 19
0
    def test_reinitialiser_des_joueurs(self):

        partie = Partie(5, 4)
        partie.reinitialiser_dés_joueurs()
        for joueur in partie.joueurs:
            self.assertEqual(5, len(joueur))
Exemplo n.º 20
0
    def test_passer_au_prochain_joueur(self):

        partie = Partie(5, 1)
        partie.joueur_courant = partie.joueurs[0]
        partie.sens = 1

        partie.passer_au_prochain_joueur()
        self.assertEqual(partie.joueur_courant.identifiant, 2)
        self.assertEqual(partie.joueur_suivant.identifiant, 3)

        partie.passer_au_prochain_joueur()
        self.assertEqual(partie.joueur_courant.identifiant, 3)
        self.assertEqual(partie.joueur_suivant.identifiant, 4)

        partie.passer_au_prochain_joueur()
        partie.passer_au_prochain_joueur()
        self.assertEqual(partie.joueur_courant.identifiant, 5)
        self.assertEqual(partie.joueur_suivant.identifiant, 1)

        partie.joueurs_actifs = [
            partie.joueurs[0], partie.joueurs[2], partie.joueurs[4]
        ]
        partie.joueur_suivant = partie.joueurs[0]

        partie.passer_au_prochain_joueur()
        self.assertEqual(partie.joueur_courant.identifiant, 1)
        self.assertEqual(partie.joueur_suivant.identifiant, 3)

        partie.passer_au_prochain_joueur()
        self.assertEqual(partie.joueur_courant.identifiant, 3)
        self.assertEqual(partie.joueur_suivant.identifiant, 5)

        partie.passer_au_prochain_joueur()
        self.assertEqual(partie.joueur_courant.identifiant, 5)
        self.assertEqual(partie.joueur_suivant.identifiant, 1)

        partie.sens = -1

        partie.joueur_suivant = partie.joueurs[2]

        self.assertEqual(partie.joueur_courant.identifiant, 5)
        self.assertEqual(partie.joueur_suivant.identifiant, 3)

        partie.passer_au_prochain_joueur()
        self.assertEqual(partie.joueur_courant.identifiant, 3)
        self.assertEqual(partie.joueur_suivant.identifiant, 1)

        partie.passer_au_prochain_joueur()
        self.assertEqual(partie.joueur_courant.identifiant, 1)
        self.assertEqual(partie.joueur_suivant.identifiant, 5)