Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import random
- import time
- import math
- # Mode "développeur" (tester + rapidement: désactive les temps entre les messages et attribue des noms automatiques aux
- # joueurs (1, 2, 3, 4))
- MODE_DEV = True
- # Textes des cases mystères
- TEXTES_CASES_MYSTERES = ["vous revenez de 2 cases en arrière.",
- "vous avancez de 2 cases.", "vous pouvez rejouer."]
- MINIJEUX = ["Quizz", "Dé"]
- 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)",
- "Quelle est la date de signature de l'armistice suivantla Seconde Guerre Mondiale ? (jour en chiffre et mois en lettres)"]
- REPONSES_HISTOIRE = ["bastille", "8 mai"]
- QUESTIONS_QUIZZ_GEOGRAPHIE = ["Quelle est la capitale du Canada ?", "Combien d'États comptent les États-Unis ?",
- "Quel pays d'Asie possède sur son drapeau national un dragon blanc ?"]
- REPONSES_GEOGRAPHIE = ["ottawa", "50", "bhoutan"]
- NOMBRE_CASES = 7
- NOMBRE_CASES_COLONNES = 6
- # Nombre de cheval par joueur
- NOMBRE_PIONS_PAR_JOUEUR = 2
- # Liste de toutes les cases
- cases = []
- # Liste de tous les pions
- joueurs = []
- # Classement final
- classement = []
- # Fonction pour lancer le dé (renvoie un nombre entre 1 et 6 inclus)
- def lancer_de():
- return random.randint(1, 6)
- def choisir_pion(joueur):
- # S'il a plusieurs pions en jeu, on lui demande avec le quel il veut jouer
- if joueur.nombre_pions_en_jeu > 1:
- for pion_joueur in joueur.pions:
- if not pion_joueur.a_fini:
- if pion_joueur.dans_colonne:
- print(" - Pion", pion_joueur.numero, ": case", pion_joueur.id_case, "|",
- NOMBRE_CASES_COLONNES - pion_joueur.cases_colonne, "cases restantes avant la fin.")
- else:
- print(" - Pion", pion_joueur.numero, ": case", pion_joueur.id_case, "|",
- pion_joueur.cases_restantes, "cases restantes avant la colonne.")
- index_pion = int(input("Choisissez avec quel pion jouer (1, 2, ...) :"))
- index_pion -= 1
- pion = joueur.pions[index_pion]
- # Sinon il joue avec le seul pion qui n'a pas fini
- else:
- for pion_joueur in joueur.pions:
- if not pion_joueur.a_fini:
- pion = pion_joueur
- return pion
- # Classe d'une case
- class Case:
- def __init__(self, id_case, mystere):
- self.mystere = False
- self.id_case = id_case
- if mystere:
- self.text = TEXTES_CASES_MYSTERES[random.randint(0, len(TEXTES_CASES_MYSTERES) - 1)]
- # Class d'un joueur
- class Joueur:
- def __init__(self, nom):
- self.nom = nom
- self.a_relance = False
- self.a_gagne = False
- self.pions = []
- for i in range(NOMBRE_PIONS_PAR_JOUEUR):
- self.pions.append(Pion(i + 1, self))
- # Nombre de pions qui peuvent encore jouer (qui n'ont pas gagnés). Utilisé pour savoir si on doit lui demander
- # 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)
- self.nombre_pions_en_jeu = NOMBRE_PIONS_PAR_JOUEUR
- # Classe d'un pion
- class Pion:
- def __init__(self, numero, joueur):
- self.numero = numero
- self.id_case = 0
- self.joueur = joueur
- self.cases_restantes = NOMBRE_CASES
- self.cases_colonne = 0
- self.dans_colonne = False
- self.a_fini = False
- def move(self, de):
- self.id_case += de
- # Si on est déjà dans la colonne finale, plus besoin de rien faire.
- if self.dans_colonne:
- self.cases_colonne += de
- if self.cases_colonne == NOMBRE_CASES_COLONNES:
- print("Bravo, vous êtes arrivé au milieu ! Le pion", pion.numero, "a terminé !")
- joueur.nombre_pions_en_jeu -= 1
- self.a_fini = True
- if joueur.nombre_pions_en_jeu == 0:
- joueur.a_gagne = True
- else:
- self.cases_restantes -= de
- if self.cases_restantes < 0:
- recul = math.fabs(self.id_case - NOMBRE_CASES)
- self.id_case -= recul * 2
- self.cases_restantes += recul * 2
- print("Eh pas si vite ! Vous avez fait un", de,
- "et avez dépassé le début de la colonne. Vous avez donc avancé de", int(de - recul), "et reculé de",
- int(recul), ". Vous êtes maintenant sur la case", int(self.id_case), ".")
- if not MODE_DEV: time.sleep(2)
- else:
- print("Vous vous êtes déplacé de", mvt, "case(s). Vous êtes maintenant sur la case", self.id_case, ".")
- if self.cases_restantes == 0:
- self.id_case += 1
- self.cases_colonne = 1
- self.dans_colonne = True
- print("Vous venez d'entrer dans votre colonne finale ! Bravo.")
- if not MODE_DEV: time.sleep(2)
- # Création de toutes les cases
- for i in range(NOMBRE_CASES):
- # 1 case sur 14 en partant de la 7ème est une case mystère
- if (i + 7) % 14 == 0:
- cases.append(Case(i, True))
- else:
- cases.append(Case(i, False))
- noms_pris = []
- # Création de tous les pions
- for i in range(4):
- if MODE_DEV:
- nom = str(i + 1)
- else:
- nom = input("Nom du joueur " + str(i + 1) + " : ")
- while nom in noms_pris:
- nom = input("Ce nom est déjà pris. Choisis un nouveau nom : ")
- noms_pris.append(nom)
- joueurs.append(Joueur(nom))
- # ----- Code pour les tours --------------
- # Numéro du tour
- tour = 1
- # Boucle infinie (à changer plus tard pour la remplacer par "tant que personne n'a gagné")
- while True:
- print("")
- print("")
- print("Le tour", tour, "commence !")
- # Pour chaque tour, on fait les 4 joueurs
- for i in range(4):
- joueur = joueurs[i]
- print("")
- print("")
- print("Joueur", joueur.nom, "c'est votre tour !")
- print("Vous avez", joueur.nombre_pions_en_jeu, "pions en jeu.")
- pion = choisir_pion(joueur)
- print("Vous utilisez le pion", pion.numero, "(case", pion.id_case, "|", pion.cases_restantes, "cases restantes).")
- if not MODE_DEV: time.sleep(1)
- print("Lancez le dé puis déplacez-vous d'autant de cases que le chiffre indiqué")
- if not MODE_DEV: time.sleep(2)
- mvt = lancer_de()
- print("Vous faites un", mvt, "!")
- # Le joueur est dans la colonne
- if pion.dans_colonne:
- # Il faut faire avec le dé le même nombre que le numéro de notre case. Si on est devant la colonne (pas
- # encore dedans) il faut faire 1.
- expecte = pion.cases_colonne
- if mvt == expecte:
- pion.move(1)
- else:
- print("Vous n'avez pas avancé car il fallait faire un", expecte, "et vous avez fait un", mvt, ".")
- if not MODE_DEV: time.sleep(1)
- print("Vous êtes toujours sur la", pion.cases_colonne, "e case de la colonne finale.")
- if pion.cases_colonne == 1 or pion.cases_colonne == 2:
- if not MODE_DEV: time.sleep(1)
- print("Vous allez participer à un mini-jeu !")
- mini_jeu = "Quizz"#MINIJEUX[random.randint(0, len(MINIJEUX) - 1)]
- if mini_jeu == "Quizz":
- print("Un quizz est lancé ! Répondez aux questions posées sans majuscules ou ponctuation.")
- if not MODE_DEV: time.sleep(2)
- categorie = input("Histoire ou Géographie ? (pas de majuscules)")
- if categorie == "histoire":
- print("Vous avez choisi Histoire. ")
- num_question_histoire = random.randint(0, len(QUESTIONS_QUIZZ_HISTOIRE)-1)
- question_histoire = QUESTIONS_QUIZZ_HISTOIRE[num_question_histoire]
- print(question_histoire)
- if not MODE_DEV: time.sleep(5)
- for i in range(0, len(joueurs)):
- adversaire = joueurs[i]
- reponse_histoire = input("Joueur " + adversaire.nom + ", quelle est votre réponse ?")
- if reponse_histoire == REPONSES_HISTOIRE[num_question_histoire]:
- print("Bien joué vous avez répondu correctement !")
- pion_adversaire = pion if adversaire.nom == joueur.nom else choisir_pion(adversaire)
- pion_adversaire.move(1)
- else:
- print("Dommage, mauvaise réponse...")
- elif categorie == "géographie":
- print("Vous avez choisi Géographie. ")
- num_question_geographie = random.randint(0, len(QUESTIONS_QUIZZ_GEOGRAPHIE)-1)
- question_geographie = QUESTIONS_QUIZZ_GEOGRAPHIE[num_question_geographie]
- print(question_geographie)
- if not MODE_DEV: time.sleep(5)
- for i in range(1, len(joueurs)+1):
- adversaire = joueurs[i]
- reponse_geographie = input("Joueur " + adversaire.nom + ", quelle est votre réponse ?")
- if reponse_geographie == REPONSES_GEOGRAPHIE[num_question_geographie]:
- print("Bien joué vous avez répondu correctement !")
- pion_adversaire = pion if adversaire.nom == joueur.nom else choisir_pion(adversaire)
- pion_adversaire.move(1)
- else:
- print("Dommage, mauvaise réponse...")
- elif mini_jeu == "Dé":
- # On choisit un adversaire, qui n'est pas le joueur
- adversaire = joueurs[random.randint(0, len(joueurs) - 1)]
- while adversaire.nom == joueur.nom:
- adversaire = joueurs[random.randint(0, len(joueurs) - 1)]
- print("Un Jeu du Dé est lancé !", joueur.nom, "affronte", adversaire.nom)
- if not MODE_DEV: time.sleep(2)
- print("Le Jeu du Dé commence, devinez le chiffre sur lequel le dé va tomber ! Le gagnant avancera d'une case.")
- if not MODE_DEV: time.sleep(2)
- chiffre_mystere = lancer_de()
- # Les joueurs proposent leurs chiffres
- chiffre_propose1 = int(input(joueur.nom + ", proposez votre prédiction"))
- chiffre_propose2 = int(input(adversaire.nom + ", proposez votre prédiction"))
- if not MODE_DEV: time.sleep(1)
- print("Et le chiffre est...")
- if not MODE_DEV: time.sleep(2)
- print(chiffre_mystere, "!!!")
- if not MODE_DEV: time.sleep(1)
- # Si le chiffre est différent chez les deux Joueurs
- if chiffre_propose1 != chiffre_mystere and chiffre_propose2 != chiffre_mystere:
- print("Vous avez tous les deux perdus, vous n'avez pas prédis le bon chiffre, c'était une chance sur six aussi !")
- # Si le chiffre a été prédis par le Joueur 1 mais pas par le Joueur 2
- elif chiffre_propose1 == chiffre_mystere and chiffre_propose2 != chiffre_mystere:
- print(joueur.nom, "a réussi à deviner le chiffre du dé !", adversaire.nom, "tu as perdu !")
- pion.move(1)
- elif chiffre_propose2 == chiffre_mystere and chiffre_propose1 != chiffre_mystere:
- print(adversaire.nom, "a réussi à deviner le chiffre du dé !", joueur.nom, "tu as perdu !")
- if not MODE_DEV: time.sleep(1)
- pion_adversaire = choisir_pion(adversaire)
- pion_adversaire.move(1)
- # Si le chiffre est identique chez les deux Joueurs
- else:
- print("Vous avez gagné tous les deux ! Vous avez prédis le bon chiffre, quels chanceux vous êtes !")
- pion.move(1)
- pion_adversaire = choisir_pion(adversaire)
- pion_adversaire.move(1)
- # Le joueur n'est pas dans la colonne
- else:
- # On bouge le pion (les messages et le check de si on dépasse la case finale sont aussi dans cette méthode)
- pion.move(mvt)
- if pion.id_case % 7 == 0:
- if not MODE_DEV:
- time.sleep(1)
- text = TEXTES_CASES_MYSTERES[random.randint(0, len(TEXTES_CASES_MYSTERES) - 1)]
- print("Vous êtes atteris sur une case mystère,", text)
- if not MODE_DEV: time.sleep(2)
- if text == "vous revenez de 2 cases en arrière.":
- pion.id_case -= 2
- print("Vous arrivez sur la case", pion.id_case, ".")
- if text == "vous avancez de 2 cases.":
- pion.id_case += 2
- print("Vous arrivez sur la case", pion.id_case, ".")
- if text == "vous pouvez rejouer.":
- print("Lancez le dé puis déplacez-vous d'autant de cases que le chiffre indiqué")
- if not MODE_DEV: time.sleep(2)
- mvt = lancer_de()
- print("Vous faites un", mvt, "!")
- print("Vous arrivez sur la case", pion.id_case, ".")
- if not joueur.a_relance:
- if not MODE_DEV: time.sleep(1)
- reponse = input("Voulez-vous tenter de relancer les dés (possible qu'une fois dans la partie) ? (oui/non) :")
- if reponse == "oui":
- joueur.a_relance = True
- devine = int(input("Prévoyez la valeur du dé entre 1 et 6 :"))
- relance = lancer_de()
- if devine == relance:
- pion.move(relance)
- else:
- print("Dommage vous avez raté votre seul chance de relancer les dés...")
- # Quand les 4 joueurs ont joués, on passe au tour suivant
- tour += 1
Add Comment
Please, Sign In to add comment