Advertisement
Guest User

Untitled

a guest
Jul 17th, 2019
258
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.28 KB | None | 0 0
  1. import json
  2. import random
  3.  
  4.  
  5. class Quote:
  6.     """
  7.    Notre objet Quote est composé de :
  8.    - Le contenu (un texte càd str)
  9.    - Un auteur (le nom de l'auteur càd str)
  10.    - Une origine (titre de l'oeuvre dont elle est extraitre càd str)
  11.    - Année de publication càd int
  12.    """
  13.  
  14.     def __init__ (self, dict): #constructeur de notre quote
  15.         self.__dict__.update(dict)
  16.  
  17.     def __str__(self):
  18.         if self.date == -1 and not self.origin:
  19.             return "« {0} » par {1}".format(self.content, self.author)
  20.         return "« {0} » par {1} en {2}, extrait de {3}".format(self.content, self.author, self.date, self.origin)
  21.  
  22.  
  23. class Core:
  24.     """
  25.    Notre objet Core gère les données liées au jeu mais qui ne nécessitent
  26.    pas d'être différentes selon les parties.
  27.    Exemple : Lit le fichier data.json pour en extraire toutes les citations
  28.    possibles (quotes) sans les modifier
  29.    """
  30.    
  31.     def __init__(self):
  32.         self.quotes = []
  33.         #lit le fichier data.json et convertit son contenu en objets Quote
  34.         for json_quote in json.load(open('data.json')):
  35.             self.quotes.append(Quote(json_quote))
  36.  
  37.         #supprime les doublons (un set ne peut pas avoir d'élément en double)
  38.         self.authors = set()
  39.         for quote in self.quotes:
  40.             self.authors.add(quote.author)
  41.  
  42.  
  43. class Player:
  44.     """
  45.    Notre objet Player gère les données qui diffèrent en fonction
  46.    d'un joueur ou d'une partie (un joueur ne joue qu'une partie à la fois)
  47.    Exemple : emma = Player(core, 7) va créer un Player contenant une copie des citations
  48.    du Core core avec l'identifiant 7. Quand on mettra à jour sa copie des citations
  49.    (emma.quotes), cela n'impactera pas les citations du core (core.quotes)
  50.    """
  51.  
  52.     def __init__(self, core, id):
  53.         self.score = 0
  54.         self.turn = -1 # astuce pour éviter d'avoir à dédoubler le contenu de update
  55.         self.core = core
  56.         self.quotes = core.quotes.copy()
  57.         self.id = id
  58.         self.update(0)
  59.  
  60.     # s'active lorsqu'un tour est terminé
  61.     def update(self, points):
  62.         self.score+=points
  63.         self.turn+=1
  64.         # définit la citation à trouver pendant le tour, càd self.quote_to_find
  65.         self._draw_the_quote_to_find()
  66.         # définit les suggestions d'auteurs
  67.         self.authors_suggestion = Suggestion(self)
  68.  
  69.  
  70.     # tire au sort la citation à trouver
  71.     def _draw_the_quote_to_find(self):
  72.         random_index = random.randrange(len(self.quotes))
  73.         self.quote_to_find = self.quotes[random_index]
  74.         del self.quotes[random_index]
  75.  
  76.  
  77. class Suggestion:
  78.     """
  79.    Permet de structurer simplement la suggestion: une liste d'auteurs aléaoire contenant
  80.    l'auteur que le joueur doit trouver
  81.    """
  82.  
  83.     def __init__(self, player, amount=6):
  84.         #génère une liste d'auteurs aléatoire contenant celui que le joueur doit trouver
  85.         suggestions = {player.quote_to_find.author}
  86.         while len(suggestions) < amount:
  87.             fake_author = random.choice(list(player.quotes)).author
  88.             suggestions.add(fake_author)
  89.  
  90.         self.authors = list(suggestions)
  91.         random.shuffle(self.authors)
  92.  
  93.         self.right_author_index = self.authors.index(player.quote_to_find.author)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement