noftaly

ISN Final

May 28th, 2020
151
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 22.96 KB | None | 0 0
  1. # "Petits Chevaux revisités" par Marin Cardo, Elliot Maisl et Hugo Quivrin (TS3) - 2020. Projet d'ISN.
  2. import random
  3. import time
  4. import math
  5.  
  6.  
  7. # ---------- Variables & configuration ----------
  8.  
  9. # Mode "développeur" (tester + rapidement: désactive les temps entre les messages et attribue des noms automatiques aux
  10. # joueurs (1, 2, 3, 4))
  11. MODE_DEV = True
  12.  
  13. # Textes des cases mystères
  14. TEXTES_CASES_MYSTERES = ["vous revenez de 2 cases en arrière.", "vous avancez de 2 cases.", "vous pouvez rejouer."]
  15.  
  16. # Liste des mini-jeux
  17. MINIJEUX = ["Quizz", "Dé"]
  18.  
  19. # Les tableaux sont formés de la façon suivante :
  20. # QUESTIONS_QUIZZ_CATÉGORIE = [("question", "réponse"), ("question", "réponse"), ...]
  21. QUESTIONS_QUIZZ_HISTOIRE = [
  22.     ("Quel est le nom de la célèbre prison assiégée lors de la Révolution le 14 juillet 1789 ? (pas de majuscules)", "bastille"),
  23.     ("Quelle est la date de signature de l'armistice suivantla Seconde Guerre Mondiale ? (jour en chiffre et mois en lettres)", "8 mai")]
  24.  
  25. QUESTIONS_QUIZZ_GEOGRAPHIE = [
  26.     ("Quelle est la capitale du Canada ?", "ottawa"),
  27.     ("Combien d'États comptent les États-Unis ?", "50"),
  28.     ("Quel pays d'Asie possède sur son drapeau national un dragon blanc ?", "bhoutan")]
  29.  
  30. QUESTIONS_QUIZZ_SPORT = [
  31.     ("Combien de Coupe du Monde de Football le Brésil a-t-il gagné ?", "5"),
  32.     ("Quelle langue est, avec l'anglais, la langue officielle des Jeux Olympiques ?", "français"),
  33.     ("Comment s'appelle le Grand Chelem se déroulant en Angleterre ?", "wimbledon"),
  34.     ("Combien de joueurs  composent un roster (équipe complète) de football américain ?", "53")]
  35.  
  36. QUESTIONS_QUIZZ_SCIENCES = [
  37.     ("Qui est  à l'origine de la théorie de la relativité générale ?", "einstein"),
  38.     ("Sur la vibration de quel atome se basent les horloges atomiques ? (juste le nom)", "cesium"),
  39.     ("A quel catégorie appartient une roche magmatique ayant refroidit lentement en profondeur ?", "plutonique"),
  40.     ("Dans un cercle trigonométrique, le sens horaire correspond-t-il au sens positif ou négatif ?", "négatif")]
  41.  
  42. # Nombre total de cases
  43. NOMBRE_CASES = 56
  44. # Nombre de cases dans la colonne finale
  45. NOMBRE_CASES_COLONNES = 6
  46. # Liste des cases qui ont un minijeux dans la colonne finale
  47. CASES_COLONNES_AVEC_JEU = [1, 4]
  48. # Nombre total de joueurs
  49. NOMBRE_JOUEURS = 4
  50. # Nombre de cheval par joueur
  51. NOMBRE_PIONS_PAR_JOUEUR = 2
  52. # Liste de toutes les cases
  53. cases = []
  54. # Liste de tous les pions
  55. joueurs = []
  56.  
  57. gagnant = None
  58.  
  59.  
  60. # ---------- Fonctions ----------
  61.  
  62. # Fonction pour lancer le dé (renvoie un nombre entre 1 et 6 inclus)
  63. def lancer_de():
  64.     return random.randint(1, 6)
  65.  
  66.  
  67. # Fonction pour vérifier que le texte donné est un nombre. (renvoie True ou False)
  68. def est_nombre(valeur):
  69.     # On test de vérifier si la valeur n'est pas un nombre (si c'est un texte)
  70.     try:
  71.         return not math.isnan(float(valeur))
  72.     # Sauf que si c'est autre chose qu'un texte, il met une erreur, donc on récupère l'erreur et plutôt que de planter
  73.     # on renvoit "faux" (la valeur n'est pas un nombre)
  74.     except ValueError:
  75.         return False
  76.  
  77.  
  78. # Fonction pour demander un utilisateur un nombre.
  79. def demande_nombre(question):
  80.     nombre = input(question)
  81.     while not est_nombre(nombre):  # Tant que le nombre n'est pas valide, on redemande
  82.         nombre = input("Entrez un nombre valide (1, 2...) :")
  83.     return int(nombre)
  84.  
  85.  
  86. # Codage des mini-jeux sous forme de fonctions
  87. def quizz(pion):
  88.     print("Un quizz est lancé ! Répondez aux questions posées sans majuscules ou ponctuation.")
  89.     if not MODE_DEV: time.sleep(2)
  90.  
  91.     categorie = input("Choisissez un thème parmis ceux-la : 'Histoire' , 'Géographie', 'Sciences', 'Sport'. (pas de majuscules)")
  92.     while categorie not in ['histoire', 'géographie', 'sport', 'sciences']:
  93.         categorie = input("'Histoire' , 'Géographie', 'Sciences' ou 'Sport' ? (pas de majuscules)")
  94.  
  95.     # Liste des joueurs ayant répondu correctement à la question (on doit les stocker pour leur avertir à la fin du
  96.     # quizz s'ils avaient bon. On ne peut pas leur dire directement sinon les joueurs suivant sauront la réponse)
  97.     correct = []
  98.  
  99.     if categorie == "histoire":
  100.         print("Vous avez choisi Histoire.")
  101.         num_question = random.randint(0, len(QUESTIONS_QUIZZ_HISTOIRE) - 1)
  102.         question = QUESTIONS_QUIZZ_HISTOIRE[num_question][0]  # Question au hazard
  103.         print(question)
  104.         if not MODE_DEV: time.sleep(5)
  105.  
  106.         # Pour chaque joueur
  107.         for i in range(NOMBRE_JOUEURS):
  108.             # On le stock dans la variable adversaire
  109.             adversaire = joueurs[i]
  110.             reponse = input("Joueur " + adversaire.nom + ", quelle est votre réponse ?")
  111.             print("D'accord !")
  112.  
  113.             if reponse == QUESTIONS_QUIZZ_HISTOIRE[num_question][1]:
  114.                 # S'il a bon, on l'ajoute à la liste "correct"
  115.                 correct.append(adversaire)
  116.  
  117.     elif categorie == "géographie":
  118.         print("Vous avez choisi Géographie.")
  119.         num_question = random.randint(0, len(QUESTIONS_QUIZZ_GEOGRAPHIE) - 1)
  120.         question = QUESTIONS_QUIZZ_GEOGRAPHIE[num_question][0]
  121.         print(question)
  122.         if not MODE_DEV: time.sleep(5)
  123.  
  124.         for i in range(NOMBRE_JOUEURS):
  125.             adversaire = joueurs[i]
  126.             reponse = input("Joueur " + adversaire.nom + ", quelle est votre réponse ?")
  127.             print("D'accord !")
  128.  
  129.             if reponse == QUESTIONS_QUIZZ_GEOGRAPHIE[num_question][1]:
  130.                 correct.append(adversaire)
  131.  
  132.     elif categorie == "sport":
  133.         print("Vous avez choisi Sport.")
  134.         num_question = random.randint(0, len(QUESTIONS_QUIZZ_SPORT) - 1)
  135.         question = QUESTIONS_QUIZZ_SPORT[num_question][0]
  136.         print(question)
  137.         if not MODE_DEV: time.sleep(5)
  138.  
  139.         for i in range(NOMBRE_JOUEURS):
  140.             adversaire = joueurs[i]
  141.             reponse = input("Joueur " + adversaire.nom + ", quelle est votre réponse ?")
  142.             print("D'accord !")
  143.  
  144.             if reponse == QUESTIONS_QUIZZ_SPORT[num_question][1]:
  145.                 correct.append(adversaire)
  146.  
  147.     elif categorie == "sciences":
  148.         print("Vous avez choisi Sciences. ")
  149.         num_question = random.randint(0, len(QUESTIONS_QUIZZ_SCIENCES) - 1)
  150.         question = QUESTIONS_QUIZZ_SCIENCES[num_question][0]
  151.         print(question)
  152.         if not MODE_DEV: time.sleep(5)
  153.  
  154.         for i in range(NOMBRE_JOUEURS):
  155.             adversaire = joueurs[i]
  156.             reponse = input("Joueur " + adversaire.nom + ", quelle est votre réponse ?")
  157.             print("D'accord !")
  158.  
  159.             if reponse == QUESTIONS_QUIZZ_SCIENCES[num_question][1]:
  160.                 correct.append(adversaire)
  161.  
  162.     # Pour tous les joueurs qui ont bon
  163.     for adversaire in correct:
  164.         print("")
  165.         print("Bien joué,", adversaire.nom + ", vous avez répondu correctement !")
  166.         # S'il a bien répondu
  167.         # Est le joueur dont c'est le tour de jouer, on bouge le pion qu'il utilise
  168.         # Sinon on lui demande de choisir le pion qu'il veut bouger
  169.         pion_adversaire = pion if adversaire.nom == joueur.nom else adversaire.choisir_pion()
  170.         pion_adversaire.move(1)
  171.  
  172.  
  173. def jeu_de(pion):
  174.     # On choisit un adversaire, qui n'est pas le joueur
  175.     adversaire = joueurs[random.randint(0, NOMBRE_JOUEURS - 1)]
  176.     while adversaire.nom == joueur.nom:
  177.         adversaire = joueurs[random.randint(0, NOMBRE_JOUEURS - 1)]
  178.  
  179.     print("Un Jeu du Dé est lancé !", joueur.nom, "affronte", adversaire.nom)
  180.     if not MODE_DEV: time.sleep(2)
  181.     print("Le Jeu du Dé commence, devinez le chiffre sur lequel le dé va tomber ! Le gagnant avancera d'une case.")
  182.     if not MODE_DEV: time.sleep(2)
  183.  
  184.     chiffre_mystere = lancer_de()
  185.  
  186.     # Les joueurs proposent leurs chiffres
  187.     chiffre_propose1 = demande_nombre(joueur.nom + ", proposez votre prédiction")
  188.     chiffre_propose2 = demande_nombre(adversaire.nom + ", proposez votre prédiction")
  189.  
  190.     if not MODE_DEV: time.sleep(1)
  191.     print("Et le chiffre est...")
  192.     if not MODE_DEV: time.sleep(2)
  193.     print(chiffre_mystere, "!!!")
  194.     if not MODE_DEV: time.sleep(1)
  195.  
  196.     # Si le chiffre est différent chez les deux joueurs
  197.     if chiffre_propose1 != chiffre_mystere and chiffre_propose2 != chiffre_mystere:
  198.         print("Vous avez tous les deux perdus, vous n'avez pas prédis le bon chiffre, c'était une chance sur six aussi !")
  199.     # Si le chiffre a été prédis par le joueur 1 mais pas par le joueur 2
  200.     elif chiffre_propose1 == chiffre_mystere and chiffre_propose2 != chiffre_mystere:
  201.         print(joueur.nom, "a réussi à deviner le chiffre du dé !", adversaire.nom, "tu as perdu !")
  202.         pion.move(1)
  203.     elif chiffre_propose2 == chiffre_mystere and chiffre_propose1 != chiffre_mystere:
  204.         print(adversaire.nom, "a réussi à deviner le chiffre du dé !", joueur.nom, "tu as perdu !")
  205.         if not MODE_DEV: time.sleep(1)
  206.         pion_adversaire = adversaire.choisir_pion()
  207.         pion_adversaire.move(1)
  208.  
  209.     # Si le chiffre est identique chez les deux joueurs
  210.     else:
  211.         print("Vous avez gagné tous les deux ! Vous avez prédis le bon chiffre, quels chanceux vous êtes !")
  212.         pion.move(1)
  213.         pion_adversaire = adversaire.choisir_pion()
  214.         pion_adversaire.move(1)
  215.  
  216.  
  217. # Fonction pour gérer un tour. Elle renvoit True ou False selon si l'on doit rejouer ou pas.
  218. def gerer_tour(joueur):
  219.     doit_rejouer = False
  220.  
  221.     print("Vous avez", joueur.nombre_pions_en_jeu, "pions en jeu.")
  222.     # On définit la variable "pion" au pion que le joueur utilise pour ce tour.
  223.     pion = joueur.choisir_pion()
  224.  
  225.     # On affiche des informations relatives au pion choisit
  226.     if pion.dans_colonne:
  227.         print("Vous utilisez le pion", pion.numero, "(case", pion.id_case, "|",
  228.               NOMBRE_CASES_COLONNES - pion.cases_colonne, "cases restantes avant le milieu)")
  229.     else:
  230.         print("Vous utilisez le pion", pion.numero, "(case", pion.id_case, "|",
  231.               pion.cases_restantes, "cases restantes avant la colonne)")
  232.  
  233.     if not MODE_DEV: time.sleep(1)
  234.     print("Lancez le dé puis déplacez-vous d'autant de cases que le chiffre indiqué")
  235.     if not MODE_DEV: time.sleep(2)
  236.     mouvement = lancer_de()
  237.     print("Vous faites un", mouvement, "!")
  238.  
  239.     # Le joueur est dans la colonne
  240.     if pion.dans_colonne:
  241.         # Il faut faire avec le dé le même nombre que le numéro de notre case. Si on est devant la colonne (pas
  242.         # encore dedans) il faut faire 1.
  243.         expecte = pion.cases_colonne
  244.  
  245.         if mouvement == expecte:
  246.             pion.move(1)
  247.         else:
  248.             print("Vous n'avez pas avancé car il fallait faire un", expecte, "et vous avez fait un", mouvement, ".")
  249.             if not MODE_DEV: time.sleep(1)
  250.             print("Vous êtes toujours sur la", pion.cases_colonne, "e case de la colonne finale.")
  251.  
  252.         # Si le joueur se situe dans une case de la colonne finale comportant un jeu, le programme se déclenche
  253.         if pion.cases_colonne in CASES_COLONNES_AVEC_JEU:
  254.             if not MODE_DEV: time.sleep(1)
  255.             print("Vous allez participer à un mini-jeu !")
  256.             mini_jeu = MINIJEUX[random.randint(0, len(MINIJEUX) - 1)]
  257.             if mini_jeu == "Quizz":
  258.                 quizz(pion)
  259.             elif mini_jeu == "Dé":
  260.                 jeu_de(pion)
  261.  
  262.     # Le joueur n'est pas dans la colonne
  263.     else:
  264.         # On bouge le pion (les messages et le check de si on dépasse la case finale sont aussi dans cette méthode)
  265.         pion.move(mouvement)
  266.  
  267.         # Si la case sur laquelle on est tombée est mystère (on vérifie d'abord qu'on ne soit pas dans la colonne.
  268.         # On peut y être car on a bougé avant, donc on a pu y rentré. Si on ne vérifie pas cela, l'id de la case ou on
  269.         # est (pion.id_case) va être plus grand que le nombre de cases et on va avoir une erreur "index out of range").
  270.         if not pion.dans_colonne and cases[pion.id_case].mystere:
  271.             if not MODE_DEV: time.sleep(1)
  272.             text = cases[pion.id_case].text
  273.             print("Vous êtes atteris sur une case mystère,", text)
  274.             if not MODE_DEV: time.sleep(2)
  275.  
  276.             if text == "vous revenez de 2 cases en arrière.":
  277.                 pion.move(-2)
  278.  
  279.             elif text == "vous avancez de 2 cases.":
  280.                 pion.move(2)
  281.  
  282.             elif text == "vous pouvez rejouer.":
  283.                 print("Vous rejouerez juste après avoir terminé ce tour.")
  284.                 doit_rejouer = True
  285.  
  286.         # Si le joueur n'a pas encore utilisé son bonus de relance
  287.         if not joueur.a_relance:
  288.             if not MODE_DEV: time.sleep(1)
  289.             reponse = input(
  290.                 "Voulez-vous tenter de relancer les dés (possible qu'une fois dans la partie) ? (oui/non) :")
  291.  
  292.             if reponse == "oui":
  293.                 joueur.a_relance = True
  294.                 devine = demande_nombre("Prévoyez la valeur du dé entre 1 et 6 :")
  295.  
  296.                 relance = lancer_de()
  297.                 if devine == relance:
  298.                     pion.move(relance)
  299.                 else:
  300.                     print(relance, "! Dommage vous avez raté votre seul chance de relancer les dés...")
  301.  
  302.     if doit_rejouer:
  303.         print("")
  304.         print("Joueur", joueur.nom, "vous rejouez !")
  305.         gerer_tour(joueur)
  306.  
  307.  
  308. # ---------- Classes ----------
  309.  
  310. # Classe d'une case
  311. class Case:
  312.     def __init__(self, id_case, mystere):
  313.         self.mystere = mystere  # Est ce que la case est une case mystère
  314.         self.id_case = id_case  # ID de la case
  315.         if mystere:
  316.             self.text = TEXTES_CASES_MYSTERES[random.randint(0, len(TEXTES_CASES_MYSTERES) - 1)]
  317.  
  318.  
  319. # Class d'un joueur
  320. class Joueur:
  321.     def __init__(self, nom):
  322.         self.nom = nom  # Nom du joueur
  323.         self.a_relance = False  # Si le joueur a déjà utilisé son bonus pour relancer le dé
  324.         self.a_gagne = False  # Si le joueur a gagné
  325.         self.pions = []  # Liste des pions du joueur (tous les pions sont des instances de la classe Pion)
  326.         self.score = 0  # Score du joueur (calculé seulement à la fin de la partie, par la méthode calcul_score())
  327.         for i in range(NOMBRE_PIONS_PAR_JOUEUR):
  328.             self.pions.append(Pion(i + 1, self))  # On remplit la liste des pions par des pions
  329.         # Nombre de pions qui peuvent encore jouer (qui n'ont pas gagnés). Utilisé pour savoir si on doit lui demander
  330.         # de choisir un pion a bouger en début de tour ou pas. (pas besoin de demander s'il ne lui reste qu'un pion)
  331.         self.nombre_pions_en_jeu = NOMBRE_PIONS_PAR_JOUEUR
  332.  
  333.     def choisir_pion(self):
  334.         # S'il a plusieurs pions en jeu, on lui demande avec le quel il veut jouer
  335.         if self.nombre_pions_en_jeu > 1:
  336.             for pion_joueur in self.pions:
  337.                 if not pion_joueur.a_fini:
  338.                     if pion_joueur.dans_colonne:
  339.                         print("  - Pion", pion_joueur.numero, ": case", pion_joueur.id_case, "|",
  340.                               NOMBRE_CASES_COLONNES - pion_joueur.cases_colonne, "cases restantes avant le milieu.")
  341.                     else:
  342.                         print("  - Pion", pion_joueur.numero, ": case", pion_joueur.id_case, "|",
  343.                               pion_joueur.cases_restantes, "cases restantes avant la colonne.")
  344.  
  345.             index_pion = demande_nombre("Choisissez avec quel pion jouer (1, 2, ...) :")
  346.             index_pion -= 1
  347.             # Tant que le numéro du pion n'est pas valide
  348.             while index_pion > self.nombre_pions_en_jeu - 1 or index_pion < 0:
  349.                 index_pion = demande_nombre("Choisissez avec quel pion jouer (1, 2, ...) :")
  350.                 index_pion -= 1
  351.  
  352.             pion = joueur.pions[index_pion]
  353.  
  354.         # Sinon il joue avec le seul pion qui n'a pas fini
  355.         else:
  356.             for pion_joueur in joueur.pions:
  357.                 if not pion_joueur.a_fini:
  358.                     pion = pion_joueur
  359.  
  360.         # On renvoit le pion déterminé
  361.         return pion
  362.  
  363.     def calcul_score(self):
  364.         # On calcul le score d'un joueur (la facon de calculer le score est totalement arbitraire)
  365.         pion_fini = NOMBRE_PIONS_PAR_JOUEUR - self.nombre_pions_en_jeu  # Nb de pions qui ont finis
  366.         self.score += pion_fini * 100  # 100 points par pions ayant finis
  367.  
  368.         for pion_joueur in self.pions:
  369.             if not pion_joueur.a_fini:
  370.                 # On ajoute a cela le numéro de la case de tous les pions n'ayant pas finit
  371.                 self.score += pion_joueur.id_case
  372.                 if pion_joueur.dans_colonne:
  373.                     # Si le pion est dans la colonne finale, on multiplie la case de la col. par 2 et on ajoute au score
  374.                     self.score += pion_joueur.cases_colonne * 2
  375.  
  376.  
  377. # Classe d'un pion
  378. class Pion:
  379.     def __init__(self, numero, joueur):
  380.         self.numero = numero  # Numéro du pion
  381.         self.id_case = 0  # ID de la case ou est le pion
  382.         self.joueur = joueur  # Joueur a qui ce pion appartient
  383.  
  384.         self.cases_restantes = NOMBRE_CASES  # Nombre de cases avant la colonne
  385.         self.cases_colonne = 0  # Numéro de la case de la colonne
  386.         self.dans_colonne = False  # Si le pion est dans la colonne
  387.  
  388.         self.a_fini = False  # Si le pion a finit
  389.  
  390.     def move(self, de):
  391.         global gagnant  # On permet à cette méthode d'accéder et de modifier la variable "gagnant"
  392.  
  393.         self.id_case += de
  394.  
  395.         # Si on est déjà dans la colonne finale
  396.         if self.dans_colonne:
  397.             self.cases_colonne += de
  398.             if self.cases_colonne == NOMBRE_CASES_COLONNES:  # Si on a finit
  399.                 print("Bravo, vous êtes arrivé au milieu ! Le pion", self.numero, "a terminé !")
  400.                 joueur.nombre_pions_en_jeu -= 1
  401.                 self.a_fini = True
  402.                 if joueur.nombre_pions_en_jeu == 0:
  403.                     joueur.a_gagne = True
  404.                     gagnant = self.joueur
  405.  
  406.         # Si on est pas encore à la colonne
  407.         else:
  408.             self.cases_restantes -= de
  409.  
  410.             # Si on a dépassé la colonne (on doit reculer du nombre de cases en trop)
  411.             if self.cases_restantes < 0:
  412.                 recul = int(math.fabs(self.id_case - NOMBRE_CASES))
  413.                 self.id_case -= recul * 2
  414.                 self.cases_restantes += recul * 2
  415.                 print("Eh pas si vite ! Vous avez fait un", de,
  416.                       "et avez dépassé le début de la colonne. Vous avez donc avancé de", de - recul, "et reculé de",
  417.                       recul, ". Vous êtes maintenant sur la case", self.id_case, ".")
  418.                 if not MODE_DEV: time.sleep(2)
  419.  
  420.             # Sinon on avance normalement
  421.             else:
  422.                 print("Vous vous êtes déplacé de", de, "case(s). Vous êtes maintenant sur la case", self.id_case, ".")
  423.                 if self.cases_restantes == 0:
  424.                     self.id_case += 1
  425.                     self.cases_colonne = 1
  426.                     self.dans_colonne = True
  427.                     print("Vous venez d'entrer dans votre colonne finale ! Bravo.")
  428.                 if not MODE_DEV: time.sleep(2)
  429.  
  430.  
  431. # Création de toutes les cases
  432. for i in range(NOMBRE_CASES):
  433.     # 1 case sur 14 en partant de la 7ème est une case mystère
  434.     if (i + 7) % 14 == 0:
  435.         cases.append(Case(i, True))
  436.     else:
  437.         cases.append(Case(i, False))
  438.  
  439. noms_pris = []  # Liste contenant les noms pris (pour éviter que 2 joueurs choisissent le même nom)
  440. # Création de tous les pions
  441. for i in range(NOMBRE_JOUEURS):
  442.     if MODE_DEV:
  443.         nom = str(i + 1)
  444.     else:
  445.         nom = input("Nom du joueur " + str(i + 1) + " : ")
  446.         while nom in noms_pris:
  447.             nom = input("Ce nom est déjà pris. Choisis un nouveau nom : ")
  448.         noms_pris.append(nom)
  449.     joueurs.append(Joueur(nom))
  450.  
  451.  
  452. # ---------- Code principal (tours) ----------
  453.  
  454. # On commence par afficher les règles
  455. afficher_regles = input("Voulez-vous voir les règles ? (oui/non)")
  456. while afficher_regles not in ['oui', 'non']:
  457.     afficher_regles = input("Voulez-vous voir les règles ? (oui/non)")
  458.  
  459. if afficher_regles == 'oui':
  460.     print("Le but est d'ammener tous ses pions au milieu.")
  461.     if not MODE_DEV: time.sleep(2)
  462.     print("Chaque joueur a", NOMBRE_PIONS_PAR_JOUEUR, "pions.")
  463.     if not MODE_DEV: time.sleep(2)
  464.     print("Le plateau est constitué de", NOMBRE_CASES, "cases, menant à une colonne finale.")
  465.     if not MODE_DEV: time.sleep(3)
  466.     print("Cette colonne finale est constituée de", NOMBRE_CASES_COLONNES, "cases.")
  467.     if not MODE_DEV: time.sleep(3)
  468.     print("Pour avancer, vous devez tirer le dé. Vous pouvez tomber sur des cases mystères avec des bonus ou des malus.")
  469.     if not MODE_DEV: time.sleep(5)
  470.     print("Si vous dépassez l'entrée de la colonne, vous reculerez du nombre de cases en trop.")
  471.     if not MODE_DEV: time.sleep(3)
  472.     print("Une fois entré dans la colonne finale, il faudra faire avec le dé le nombre de la case sur laquelle vous êtes.")
  473.     if not MODE_DEV: time.sleep(5)
  474.     print("Par exemple, si vous êtes sur la 4ème case de la colonne, vous devez faire '4' avec le dé pour aller à la case suivante.")
  475.     if not MODE_DEV: time.sleep(5)
  476.     print("Certaines cases de la colonne vous mènerons à un petit jeu : un quizz ou tout le monde participe ou un jeu" +
  477.           "de dé ou un adversaire est tiré au sort.")
  478.     if not MODE_DEV: time.sleep(6)
  479.     print("Bonne chance !")
  480.     if not MODE_DEV: time.sleep(2)
  481.  
  482. print("C'est parti !")
  483. if not MODE_DEV: time.sleep(2)
  484.  
  485. # Numéro du tour
  486. tour = 1
  487.  
  488. # On boucle tant que personne n'a gagné. Une boucle = un tour complet des joueurs
  489. while not gagnant:
  490.     print("")
  491.     print("")
  492.     print("")
  493.     print("")
  494.     print("Le tour", tour, "commence !")
  495.  
  496.     # Pour chaque tour, on fait les 4 joueurs
  497.     for i in range(NOMBRE_JOUEURS):
  498.         # On définit la variable "joueur" au joueur a qui c'est le tour
  499.         joueur = joueurs[i]
  500.  
  501.         print("")
  502.         print("")
  503.         print("")
  504.         print("Joueur", joueur.nom, "c'est votre tour !")
  505.  
  506.         gerer_tour(joueur)
  507.  
  508.         # S'il y a un gagnant, on quitte le "for" qui boucle les 4 joueurs
  509.         if gagnant:
  510.             break
  511.  
  512.     # Quand les 4 joueurs ont joués, on passe au tour suivant
  513.     tour += 1
  514.  
  515. print("")
  516. print("")
  517. print("")
  518. print("")
  519. print("La partie est terminée ! Tous les pions du joueur", gagnant.nom, "sont arrivés ! Il remporte la partie !")
  520. if not MODE_DEV: time.sleep(1)
  521. print("")
  522. print("Voici le classement :")
  523.  
  524.  
  525. # On calcul le score de tous les joueurs
  526. for i in range(NOMBRE_JOUEURS):
  527.     joueurs[i].calcul_score()
  528.  
  529. # On créé un classement (on trie la liste "joueurs" selon la clé "score", dans l'ordre décroissant)
  530. classement = sorted(joueurs, key=lambda j: j.score, reverse=True)
  531.  
  532. for i in range(len(classement)):
  533.     print(i + 1, ":", classement[i].nom, "(" + str(classement[i].nombre_pions_en_jeu), "pion(s) en jeu) [" + str(classement[i].score) + "]")
  534.  
  535. exit(0)  # On quitte le programme proprement, sans générer d'erreur
Add Comment
Please, Sign In to add comment