noftaly

ISN 8

May 20th, 2020
175
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 14.51 KB | None | 0 0
  1. import random
  2. import time
  3. import math
  4.  
  5. # Mode "développeur" (tester + rapidement: désactive les temps entre les messages et attribue des noms automatiques aux
  6. # joueurs (1, 2, 3, 4))
  7. MODE_DEV = True
  8.  
  9. # Textes des cases mystères
  10. TEXTES_CASES_MYSTERES = ["vous revenez de 2 cases en arrière.",
  11.                          "vous avancez de 2 cases.", "vous pouvez rejouer."]
  12.  
  13. MINIJEUX = ["Quizz", "Dé"]
  14. QUESTIONS_QUIZZ_HISTOIRE = ["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)",
  15.                             "Quelle est la date de signature de l'armistice suivantla Seconde Guerre Mondiale ? (jour en chiffre et mois en lettres)"]
  16. REPONSES_HISTOIRE = ["bastille", "8 mai"]
  17. QUESTIONS_QUIZZ_GEOGRAPHIE = ["Quelle est la capitale du Canada ?", "Combien d'États comptent les États-Unis ?",
  18.                                 "Quel pays d'Asie possède sur son drapeau national un dragon blanc ?"]
  19. REPONSES_GEOGRAPHIE = ["ottawa", "50", "bhoutan"]
  20.  
  21. NOMBRE_CASES = 7
  22. NOMBRE_CASES_COLONNES = 6
  23. # Nombre de cheval par joueur
  24. NOMBRE_PIONS_PAR_JOUEUR = 2
  25. # Liste de toutes les cases
  26. cases = []
  27. # Liste de tous les pions
  28. joueurs = []
  29. # Classement final
  30. classement = []
  31.  
  32.  
  33. # Fonction pour lancer le dé (renvoie un nombre entre 1 et 6 inclus)
  34. def lancer_de():
  35.     return random.randint(1, 6)
  36.  
  37.  
  38. def choisir_pion(joueur):
  39.     # S'il a plusieurs pions en jeu, on lui demande avec le quel il veut jouer
  40.     if joueur.nombre_pions_en_jeu > 1:
  41.         for pion_joueur in joueur.pions:
  42.             if not pion_joueur.a_fini:
  43.                 if pion_joueur.dans_colonne:
  44.                     print("  - Pion", pion_joueur.numero, ": case", pion_joueur.id_case, "|",
  45.                           NOMBRE_CASES_COLONNES - pion_joueur.cases_colonne, "cases restantes avant la fin.")
  46.                 else:
  47.                     print("  - Pion", pion_joueur.numero, ": case", pion_joueur.id_case, "|",
  48.                           pion_joueur.cases_restantes, "cases restantes avant la colonne.")
  49.  
  50.         index_pion = int(input("Choisissez avec quel pion jouer (1, 2, ...) :"))
  51.         index_pion -= 1
  52.         pion = joueur.pions[index_pion]
  53.     # Sinon il joue avec le seul pion qui n'a pas fini
  54.     else:
  55.         for pion_joueur in joueur.pions:
  56.             if not pion_joueur.a_fini:
  57.                 pion = pion_joueur
  58.     return pion
  59.  
  60.  
  61. # Classe d'une case
  62. class Case:
  63.     def __init__(self, id_case, mystere):
  64.         self.mystere = False
  65.         self.id_case = id_case
  66.         if mystere:
  67.             self.text = TEXTES_CASES_MYSTERES[random.randint(0, len(TEXTES_CASES_MYSTERES) - 1)]
  68.  
  69.  
  70. # Class d'un joueur
  71. class Joueur:
  72.     def __init__(self, nom):
  73.         self.nom = nom
  74.         self.a_relance = False
  75.         self.a_gagne = False
  76.         self.pions = []
  77.         for i in range(NOMBRE_PIONS_PAR_JOUEUR):
  78.             self.pions.append(Pion(i + 1, self))
  79.         # Nombre de pions qui peuvent encore jouer (qui n'ont pas gagnés). Utilisé pour savoir si on doit lui demander
  80.         # 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)
  81.         self.nombre_pions_en_jeu = NOMBRE_PIONS_PAR_JOUEUR
  82.  
  83.  
  84. # Classe d'un pion
  85. class Pion:
  86.     def __init__(self, numero, joueur):
  87.         self.numero = numero
  88.         self.id_case = 0
  89.         self.joueur = joueur
  90.  
  91.         self.cases_restantes = NOMBRE_CASES
  92.         self.cases_colonne = 0
  93.         self.dans_colonne = False
  94.  
  95.         self.a_fini = False
  96.  
  97.     def move(self, de):
  98.         self.id_case += de
  99.  
  100.         # Si on est déjà dans la colonne finale, plus besoin de rien faire.
  101.         if self.dans_colonne:
  102.             self.cases_colonne += de
  103.             if self.cases_colonne == NOMBRE_CASES_COLONNES:
  104.                 print("Bravo, vous êtes arrivé au milieu ! Le pion", pion.numero, "a terminé !")
  105.                 joueur.nombre_pions_en_jeu -= 1
  106.                 self.a_fini = True
  107.                 if joueur.nombre_pions_en_jeu == 0:
  108.                     joueur.a_gagne = True
  109.  
  110.         else:
  111.             self.cases_restantes -= de
  112.  
  113.             if self.cases_restantes < 0:
  114.                 recul = math.fabs(self.id_case - NOMBRE_CASES)
  115.                 self.id_case -= recul * 2
  116.                 self.cases_restantes += recul * 2
  117.                 print("Eh pas si vite ! Vous avez fait un", de,
  118.                       "et avez dépassé le début de la colonne. Vous avez donc avancé de", int(de - recul), "et reculé de",
  119.                       int(recul), ". Vous êtes maintenant sur la case", int(self.id_case), ".")
  120.                 if not MODE_DEV: time.sleep(2)
  121.             else:
  122.                 print("Vous vous êtes déplacé de", mvt, "case(s). Vous êtes maintenant sur la case", self.id_case, ".")
  123.                 if self.cases_restantes == 0:
  124.                     self.id_case += 1
  125.                     self.cases_colonne = 1
  126.                     self.dans_colonne = True
  127.                     print("Vous venez d'entrer dans votre colonne finale ! Bravo.")
  128.                 if not MODE_DEV: time.sleep(2)
  129.  
  130.  
  131. # Création de toutes les cases
  132. for i in range(NOMBRE_CASES):
  133.     # 1 case sur 14 en partant de la 7ème est une case mystère
  134.     if (i + 7) % 14 == 0:
  135.         cases.append(Case(i, True))
  136.     else:
  137.         cases.append(Case(i, False))
  138.  
  139. noms_pris = []
  140. # Création de tous les pions
  141. for i in range(4):
  142.     if MODE_DEV:
  143.         nom = str(i + 1)
  144.     else:
  145.         nom = input("Nom du joueur " + str(i + 1) + " : ")
  146.         while nom in noms_pris:
  147.             nom = input("Ce nom est déjà pris. Choisis un nouveau nom : ")
  148.         noms_pris.append(nom)
  149.     joueurs.append(Joueur(nom))
  150.  
  151. # ----- Code pour les tours --------------
  152.  
  153. # Numéro du tour
  154. tour = 1
  155.  
  156. # Boucle infinie (à changer plus tard pour la remplacer par "tant que personne n'a gagné")
  157. while True:
  158.     print("")
  159.     print("")
  160.     print("Le tour", tour, "commence !")
  161.  
  162.     # Pour chaque tour, on fait les 4 joueurs
  163.     for i in range(4):
  164.         joueur = joueurs[i]
  165.  
  166.         print("")
  167.         print("")
  168.         print("Joueur", joueur.nom, "c'est votre tour !")
  169.         print("Vous avez", joueur.nombre_pions_en_jeu, "pions en jeu.")
  170.         pion = choisir_pion(joueur)
  171.  
  172.         print("Vous utilisez le pion", pion.numero, "(case", pion.id_case, "|", pion.cases_restantes, "cases restantes).")
  173.         if not MODE_DEV: time.sleep(1)
  174.         print("Lancez le dé puis déplacez-vous d'autant de cases que le chiffre indiqué")
  175.         if not MODE_DEV: time.sleep(2)
  176.         mvt = lancer_de()
  177.         print("Vous faites un", mvt, "!")
  178.  
  179.         # Le joueur est dans la colonne
  180.         if pion.dans_colonne:
  181.             # Il faut faire avec le dé le même nombre que le numéro de notre case. Si on est devant la colonne (pas
  182.             # encore dedans) il faut faire 1.
  183.             expecte = pion.cases_colonne
  184.  
  185.             if mvt == expecte:
  186.                 pion.move(1)
  187.             else:
  188.                 print("Vous n'avez pas avancé car il fallait faire un", expecte, "et vous avez fait un", mvt, ".")
  189.                 if not MODE_DEV: time.sleep(1)
  190.                 print("Vous êtes toujours sur la", pion.cases_colonne, "e case de la colonne finale.")
  191.  
  192.             if pion.cases_colonne == 1 or pion.cases_colonne == 2:
  193.                 if not MODE_DEV: time.sleep(1)
  194.                 print("Vous allez participer à un mini-jeu !")
  195.                 mini_jeu = "Quizz"#MINIJEUX[random.randint(0, len(MINIJEUX) - 1)]
  196.                 if mini_jeu == "Quizz":
  197.                     print("Un quizz est lancé ! Répondez aux questions posées sans majuscules ou ponctuation.")
  198.                     if not MODE_DEV: time.sleep(2)
  199.                     categorie = input("Histoire ou Géographie ? (pas de majuscules)")
  200.  
  201.                     if categorie == "histoire":
  202.                         print("Vous avez choisi Histoire. ")
  203.                         num_question_histoire = random.randint(0, len(QUESTIONS_QUIZZ_HISTOIRE)-1)
  204.                         question_histoire = QUESTIONS_QUIZZ_HISTOIRE[num_question_histoire]
  205.                         print(question_histoire)
  206.                         if not MODE_DEV: time.sleep(5)
  207.  
  208.                         for i in range(0, len(joueurs)):
  209.                             adversaire = joueurs[i]
  210.                             reponse_histoire = input("Joueur " + adversaire.nom + ", quelle est votre réponse ?")
  211.                             if reponse_histoire == REPONSES_HISTOIRE[num_question_histoire]:
  212.                                 print("Bien joué vous avez répondu correctement !")
  213.                                 pion_adversaire = pion if adversaire.nom == joueur.nom else choisir_pion(adversaire)
  214.                                 pion_adversaire.move(1)
  215.                             else:
  216.                                 print("Dommage, mauvaise réponse...")
  217.  
  218.                     elif categorie == "géographie":
  219.                         print("Vous avez choisi Géographie. ")
  220.                         num_question_geographie = random.randint(0, len(QUESTIONS_QUIZZ_GEOGRAPHIE)-1)
  221.                         question_geographie = QUESTIONS_QUIZZ_GEOGRAPHIE[num_question_geographie]
  222.                         print(question_geographie)
  223.                         if not MODE_DEV: time.sleep(5)
  224.  
  225.                         for i in range(1, len(joueurs)+1):
  226.                             adversaire = joueurs[i]
  227.                             reponse_geographie = input("Joueur " + adversaire.nom + ", quelle est votre réponse ?")
  228.                             if reponse_geographie == REPONSES_GEOGRAPHIE[num_question_geographie]:
  229.                                 print("Bien joué vous avez répondu correctement !")
  230.                                 pion_adversaire = pion if adversaire.nom == joueur.nom else choisir_pion(adversaire)
  231.                                 pion_adversaire.move(1)
  232.                             else:
  233.                                 print("Dommage, mauvaise réponse...")
  234.  
  235.                 elif mini_jeu == "Dé":
  236.                     # On choisit un adversaire, qui n'est pas le joueur
  237.                     adversaire = joueurs[random.randint(0, len(joueurs) - 1)]
  238.                     while adversaire.nom == joueur.nom:
  239.                         adversaire = joueurs[random.randint(0, len(joueurs) - 1)]
  240.  
  241.                     print("Un Jeu du Dé est lancé !", joueur.nom, "affronte", adversaire.nom)
  242.                     if not MODE_DEV: time.sleep(2)
  243.                     print("Le Jeu du Dé commence, devinez le chiffre sur lequel le dé va tomber ! Le gagnant avancera d'une case.")
  244.                     if not MODE_DEV: time.sleep(2)
  245.  
  246.                     chiffre_mystere = lancer_de()
  247.                     # Les joueurs proposent leurs chiffres
  248.                     chiffre_propose1 = int(input(joueur.nom + ", proposez votre prédiction"))
  249.                     chiffre_propose2 = int(input(adversaire.nom + ", proposez votre prédiction"))
  250.  
  251.                     if not MODE_DEV: time.sleep(1)
  252.                     print("Et le chiffre est...")
  253.                     if not MODE_DEV: time.sleep(2)
  254.                     print(chiffre_mystere, "!!!")
  255.                     if not MODE_DEV: time.sleep(1)
  256.  
  257.                     # Si le chiffre est différent chez les deux Joueurs
  258.                     if chiffre_propose1 != chiffre_mystere and chiffre_propose2 != chiffre_mystere:
  259.                         print("Vous avez tous les deux perdus, vous n'avez pas prédis le bon chiffre, c'était une chance sur six aussi !")
  260.                     # Si le chiffre a été prédis par le Joueur 1 mais pas par le Joueur 2
  261.                     elif chiffre_propose1 == chiffre_mystere and chiffre_propose2 != chiffre_mystere:
  262.                         print(joueur.nom, "a réussi à deviner le chiffre du dé !", adversaire.nom, "tu as perdu !")
  263.                         pion.move(1)
  264.                     elif chiffre_propose2 == chiffre_mystere and chiffre_propose1 != chiffre_mystere:
  265.                         print(adversaire.nom, "a réussi à deviner le chiffre du dé !", joueur.nom, "tu as perdu !")
  266.                         if not MODE_DEV: time.sleep(1)
  267.                         pion_adversaire = choisir_pion(adversaire)
  268.                         pion_adversaire.move(1)
  269.  
  270.                     # Si le chiffre est identique chez les deux Joueurs
  271.                     else:
  272.                         print("Vous avez gagné tous les deux ! Vous avez prédis le bon chiffre, quels chanceux vous êtes !")
  273.                         pion.move(1)
  274.                         pion_adversaire = choisir_pion(adversaire)
  275.                         pion_adversaire.move(1)
  276.  
  277.         # Le joueur n'est pas dans la colonne
  278.         else:
  279.             # On bouge le pion (les messages et le check de si on dépasse la case finale sont aussi dans cette méthode)
  280.             pion.move(mvt)
  281.  
  282.             if pion.id_case % 7 == 0:
  283.                 if not MODE_DEV:
  284.                     time.sleep(1)
  285.                 text = TEXTES_CASES_MYSTERES[random.randint(0, len(TEXTES_CASES_MYSTERES) - 1)]
  286.                 print("Vous êtes atteris sur une case mystère,", text)
  287.                 if not MODE_DEV: time.sleep(2)
  288.                 if text == "vous revenez de 2 cases en arrière.":
  289.                     pion.id_case -= 2
  290.                     print("Vous arrivez sur la case", pion.id_case, ".")
  291.                 if text == "vous avancez de 2 cases.":
  292.                     pion.id_case += 2
  293.                     print("Vous arrivez sur la case", pion.id_case, ".")
  294.                 if text == "vous pouvez rejouer.":
  295.                     print("Lancez le dé puis déplacez-vous d'autant de cases que le chiffre indiqué")
  296.                     if not MODE_DEV: time.sleep(2)
  297.                     mvt = lancer_de()
  298.                     print("Vous faites un", mvt, "!")
  299.                     print("Vous arrivez sur la case", pion.id_case, ".")
  300.  
  301.             if not joueur.a_relance:
  302.                 if not MODE_DEV: time.sleep(1)
  303.                 reponse = input("Voulez-vous tenter de relancer les dés (possible qu'une fois dans la partie) ? (oui/non) :")
  304.  
  305.                 if reponse == "oui":
  306.                     joueur.a_relance = True
  307.                     devine = int(input("Prévoyez la valeur du dé entre 1 et 6 :"))
  308.                     relance = lancer_de()
  309.                     if devine == relance:
  310.                         pion.move(relance)
  311.                     else:
  312.                         print("Dommage vous avez raté votre seul chance de relancer les dés...")
  313.  
  314.     # Quand les 4 joueurs ont joués, on passe au tour suivant
  315.     tour += 1
Add Comment
Please, Sign In to add comment