def simulation(self, liste_coups): """ Méthode qui simule un coup joué par un joueur. Parameters ------ liste_coups : list liste des coup qui ont eu lieu dans la partie, ces coups sont eux même des dictionnaires. Returns ------- dico : dict Dictionnaire contenant tous les participants. Et aqqui a chaque joueur associe un dictionnaire contenant nom, couleur, ordre de jeu, nombre de tour d'attente, position actuelle et position précédente deu joueur. """ self.make_liste_of_players() self.Set_GameByDefault() for coup in liste_coups: colonne_jouee = coup[3] dice1, dice2 = self.get_dices(colonne_jouee) ordre_joueur = DAOparticipation.get_position_ordre( pseudo=coup[2], id_partie=coup[0]) self.Throw(dice1, dice2, ordre_joueur) dico = {} for player in self.listOfPlayers: dico[f"{player._name}"] = player.get_dico() return dico
def jouer_un_coup(self, coup, gridClass): """ Méthode qui va gérer la séquence où un joueur joue son tour. Parameters ------ Coup : dict Dictionnaire contenant le nom du joueur, la partie dans laquelle il se trouve, et la colonne dans laquelle il souhaite jouer. gridClass : Objet de la classe GridP4 Grille de jeu en cours, avec tous les coups déja joués. Returns ------- type = list Liste representant la grille contenant les coups joués. Si le coup était valide alors il fait partie de cette liste. Sinon la grille est inchangée. """ #coup = {'player' : ... , 'id_partie': ... , 'colonne': ...} from jeuxservice.jeux.p4game import PlayerP4 playerClass = PlayerP4( coup[0], color=DAOparticipation.get_couleur(pseudo=coup[0], id_partie=coup[1]), ordre=DAOparticipation.get_position_ordre(pseudo=coup[0], id_partie=coup[1])) if self.is_coup_valide(coup, gridClass)["Statut"]: gridClass.Throw( self.is_coup_valide(coup, gridClass)["Colonne"], playerClass.Get_Token()) self.enregistrer_coup(coup, playerClass) return gridClass.getGrid()
def est_ce_mon_tour(): """ Fonction qui traite la requête de vérification si c'est le tour d'un utilisateur :returns -------- Code 449 : - Si ce n'est pas le tour de l'utilisateur. Code 403 : - Si l'utilisateur ne peut pas jouer son tour. Code 200 : Si c'est le tour de l'utilisateur. """ request.get_json(force=True) id_partie, pseudo = request.json.get('id_salle'), request.json.get( 'pseudo') print( f"L'utilisateur {pseudo} demande si c'est son tour dans la salle {id_partie}." ) aquiltour = DAOparties.get_aquiltour(id_partie) self_ordre = DAOparticipation.get_position_ordre(pseudo, id_partie) #mettre condition prochain tour != 1 if aquiltour == self_ordre: #c'est le tour du joueur qui demande print( f"C'est bien le tour de l'utilisateur {pseudo} dans la salle {id_partie}." ) old_coup = DAOcoups.get_old_coup(id_partie, pseudo) last_coup = DAOcoups.get_last_coup(id_partie)[0] if old_coup[4] == 1: print( f"L'utilisateur {pseudo} peut jouer son tour dans la salle {id_partie}" ) response = { "status_code": http_codes.ok, "message": "C'est ton tour" } # code 200 return make_reponse(response, http_codes.ok) # code 200 elif old_coup[4] > 1: print( f"L'utilisateur doit passer son tour encore {old_coup[4]-1} fois. Il passe donc automatiquement son tour ici. " ) DAOcoups.add_new_coup(id_partie, last_coup + 1, pseudo, old_coup[3], old_coup[4] - 1) response = { "status_code": http_codes.forbidden, "message": "C'est votre tour, mais vous ne pouvez pas jouer" } # code 403 return make_reponse(response, http_codes.forbidden) # code 403 else: #ce n'est pas son tour de jouer print( f"Ce n'est pas le tour de l'utilisateur {pseudo} dans la salle {id_partie}." ) response = { "status_code": http_codes.retry_with, "message": "Ce n'est pas votre tour" } # code 449 return make_reponse(response, http_codes.retry_with) # code 449
def simulatation(self, liste_coups): """ Méthode qui simule un coup joué par un joueur. Parameters ------ liste_coups : list liste des coup qui ont eu lieu dans la partie, ces coups sont eux même des dictionnaires. """ for coup in liste_coups: colonne_jouee = coup[3] ordre_joueur = DAOparticipation.get_position_ordre(pseudo=coup[2], id_partie=coup[0]) self.Throw(colonne_jouee, ordre_joueur)
def add_coup_zero(id_partie, pseudo): """ Procédure qui enregistre le coup initial de la partie composé de id_partie, num_coup -compris entre 0 et 1 exclu-, pseudo_joueur, new_position égal à -1 et prochain_tour égal à 1 :parameter ---------- id_partie : int identifiant de la partie auquelle on ajoute un nouveau coup pseudo_joueur : str pseudo du joueur qui a joué ,ou non, le coup à ajouter :raise ------ ConnectionAbortedError Si une erreur se produit au cours de la communication avec la DB, un rollback jusqu'au commit précédant a lieu et l'erreur est levée. :return ------- None. """ position = DBparticipation.get_position_ordre(pseudo, id_partie) zero_value = position * 0.1 try : con = sqlite3.connect(db_address) cursor = con.cursor() cursor.execute("INSERT INTO Coups (id_partie, num_coup, pseudo_joueur, position, prochain_tour)" " VALUES (?,?,?,-1,1)", (id_partie,zero_value, pseudo,)) con.commit() except : print("erreur dans add_coup_zero") con.rollback() raise ConnectionAbortedError finally: con.close()