Exemple #1
0
    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
Exemple #2
0
    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()
Exemple #3
0
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
Exemple #4
0
 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)
Exemple #5
0
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()