noftaly

ISN N°6

Apr 19th, 2020
637
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 9.00 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 = False
  8.  
  9. # Textes des cases mystères
  10. TEXTES_CASES_MYSTERES = ["Revenez de 2 cases en arrière", "Vous ne jouerez pas au prochain tour",
  11.                          "Vous avancez de 2 cases", "Vous pouvez rejouer"]
  12. NOMBRE_CASES = 16
  13. # Nombre de cheval par joueur
  14. NOMBRE_PIONS_PAR_JOUEUR = 2
  15. # Liste de toutes les cases
  16. cases = []
  17. # Liste de tous les pions
  18. joueurs = []
  19.  
  20.  
  21. # Fonction pour lancer le dé (renvoie un nombre entre 1 et 6 inclus)
  22. def lancer_de():
  23.     return random.randint(1, 6)
  24.  
  25.  
  26. # Classe d'une case
  27. class Case:
  28.     def __init__(self, id_case, mystere):
  29.         self.mystere = False
  30.         self.id_case = id_case
  31.         if mystere:
  32.             self.text = TEXTES_CASES_MYSTERES[random.randint(0, len(TEXTES_CASES_MYSTERES) - 1)]
  33.  
  34.  
  35. # Class d'un joueur
  36. class Joueur:
  37.     def __init__(self, nom):
  38.         self.nom = nom
  39.         self.a_relance = False
  40.         self.pions = []
  41.         for i in range(NOMBRE_PIONS_PAR_JOUEUR):
  42.             self.pions.append(Pion(i + 1))
  43.         # Nombre de pions qui peuvent encore jouer (qui n'ont pas gagnés). Utilisé pour savoir si on doit lui demander
  44.         # 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)
  45.         self.nombre_pions_en_jeu = NOMBRE_PIONS_PAR_JOUEUR
  46.  
  47.  
  48. # Classe d'un pion
  49. class Pion:
  50.     def __init__(self, numero):
  51.         self.numero = numero
  52.         self.id_case = 0
  53.  
  54.         self.cases_restantes = NOMBRE_CASES
  55.         self.cases_colonne = 0
  56.         self.dans_colonne = False
  57.  
  58.         self.a_fini = False
  59.  
  60.     def move(self, de):
  61.         self.id_case += de
  62.         self.cases_restantes -= de
  63.  
  64.         if self.cases_restantes < 0:
  65.             recul = math.fabs(self.id_case - NOMBRE_CASES)
  66.             self.id_case -= recul * 2
  67.             self.cases_restantes += recul * 2
  68.             print("Eh pas si vite ! Vous avez fait un", de,
  69.                   "et avez dépassé le début de la colonne. Vous avez donc avancé de", int(de - recul), "et reculé de",
  70.                   int(recul), ". Vous êtes maintenant sur la case", int(self.id_case), ".")
  71.             if not MODE_DEV: time.sleep(2)
  72.         else:
  73.             print("Vous vous êtes déplacé de", mvt, "case(s). Vous êtes maintenant sur la case", self.id_case, ".")
  74.             if self.cases_restantes == 0:
  75.                 self.id_case += 1
  76.                 self.cases_colonne = 1
  77.                 self.dans_colonne = True
  78.                 print("Vous venez d'entrer dans votre colonne finale ! Bravo.")
  79.             if not MODE_DEV: time.sleep(2)
  80.  
  81.  
  82. # Création de toutes les cases
  83. for i in range(NOMBRE_CASES):
  84.     # 1 case sur 14 en partant de la 7ème est une case mystère
  85.     if (i + 7) % 14 == 0:
  86.         cases.append(Case(i, True))
  87.     else:
  88.         cases.append(Case(i, False))
  89.  
  90. # Création de tous les pions
  91. for i in range(4):
  92.     if MODE_DEV:
  93.         nom = i + 1
  94.     else:
  95.         nom = input("Nom du joueur " + str(i + 1) + " : ")
  96.     joueurs.append(Joueur(nom))
  97.  
  98. # ----- Ébauche de code pour les tours--------------
  99.  
  100. # Numéro du tour (on commence au tour 1)
  101. tour = 1
  102.  
  103. # Boucle infinie (à changer plus tard pour la remplacer par "tant que personne n'a gagné")
  104. while True:
  105.     print("")
  106.     print("")
  107.     print("Le tour", tour, "commence !")
  108.  
  109.     # Pour chaque tour, on fait les 4 joueurs
  110.     for i in range(4):
  111.         joueur = joueurs[i]
  112.  
  113.         print("")
  114.         print("")
  115.         print("Joueur", joueur.nom, "c'est votre tour !")
  116.         print("Vous avez", joueur.nombre_pions_en_jeu, "pions en jeu.")
  117.         # S'il a plusieurs pions en jeu, on lui demande avec le quel il veut jouer
  118.         if joueur.nombre_pions_en_jeu > 1:
  119.             for pion_joueur in joueur.pions:
  120.                 if not pion_joueur.a_fini:
  121.                     print("  - Pion", pion_joueur.numero, ": case", pion_joueur.id_case, "|", pion_joueur.cases_restantes, "cases restantes.")
  122.             index_pion = int(input("Choisissez avec quel pion jouer (1, 2, ...) :"))
  123.             index_pion -= 1
  124.             pion = joueur.pions[index_pion]
  125.         # Sinon il joue avec le seul pion qui n'a pas fini
  126.         else:
  127.             for pion_joueur in joueur.pions:
  128.                 if not pion_joueur.a_fini:
  129.                     pion = pion_joueur
  130.  
  131.         print("Vous utilisez le pion", pion.numero, "(case", pion_joueur.id_case, "|", pion_joueur.cases_restantes, "cases restantes).")
  132.         if not MODE_DEV: time.sleep(1)
  133.         print("Lancez le dé puis déplacez-vous d'autant de cases que le chiffre indiqué")
  134.         if not MODE_DEV: time.sleep(2)
  135.         mvt = lancer_de()
  136.         print("Vous faites un", mvt, "!")
  137.  
  138.         # Le joueur est dans la colonne
  139.         if pion.dans_colonne:
  140.             # Il faut faire avec le dé le même nombre que le numéro de notre case. Si on est devant la colonne (pas
  141.             # encore dedans) il faut faire 1.
  142.             expecte = pion.cases_colonne
  143.  
  144.             if mvt == expecte:
  145.                 pion.id_case += 1
  146.                 pion.cases_colonne += 1
  147.                 if pion.cases_colonne == 6:
  148.                     print("Bravo, vous êtes arrivé au milieu ! Le pion", pion.numero, "a terminé !")
  149.                     joueur.nombre_pions_en_jeu -= 1
  150.                     pion.a_fini = True
  151.                 else:
  152.                     print("Vous êtes arrivé sur la", pion.cases_colonne, "e case de la colonne finale.")
  153.             else:
  154.                 print("Vous n'avez pas avancé car il fallait faire un", expecte, "et vous avez fait un", mvt, ".")
  155.                 if not MODE_DEV: time.sleep(1)
  156.                 print("Vous êtes toujours sur la", pion.cases_colonne, "e case de la colonne finale.")
  157.  
  158.             if pion.cases_colonne == 3 or pion.cases_colonne == 6:
  159.                 if not MODE_DEV: time.sleep(1)
  160.                 print("Vous allez participer à un mini-jeu ! (pas encore implémenté)")
  161.  
  162.         else:  # Le joueur n'est pas dans la colonne
  163.             # On bouge le pion (les messages et le check de si on dépasse la case finale sont aussi dans cette méthode)
  164.             pion.move(mvt)
  165.  
  166.             if not joueur.a_relance:
  167.                 if not MODE_DEV: time.sleep(1)
  168.                 reponse = input("Voulez-vous tenter de relancer les dés (possible qu'une fois dans la partie) ? (oui/non) :")
  169.  
  170.                 if reponse == "oui":
  171.                     joueur.a_relance = True
  172.                     devine = int(input("Prévoyez la valeur du dé entre 1 et 6 :"))
  173.                     relance = lancer_de()
  174.                     if devine == relance:
  175.                         pion.move(relance)
  176.                     else:
  177.                         print("Dommage vous avez raté votre seul chance de relancer les dés...")
  178.  
  179.     # Quand les 4 joueurs on joués, on passe au tour suivant
  180.     tour += 1
Advertisement
Add Comment
Please, Sign In to add comment