Example #1
0
def test_get_score():
    """
    Fonction de test de get_score().
    """
    p1 = {'n': 4, 'nb_cases_libres': 6, 'tiles': [6, 2, 3, 2, 0, 2, 6, 2, 0, 2, 2, 0, 1, 0, 0, 0]}
    p2 = {'n': 4, 'nb_cases_libres': 0, 'tiles': [6, 2, 3, 2, 12, 2, 6, 2, 6, 2, 2, 12, 1, 6, 3, 1]}
    p3 = {'n': 4, 'nb_cases_libres': 16, 'tiles': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]}
    assert get_score(p1) == 28, 'Erreur : fonction get_score().'
    assert get_score(p2) == 68, 'Erreur : fonction get_score().'
    assert get_score(p3) == 0, 'Erreur : fonction get_score().'
    print('Fonction get_score() : OK')
Example #2
0
def test_get_score():
    plateau = init_play()

    assert get_score(plateau) == 0

    plateau = {'n': 4,
               'nb_cases_libres': 0,
               'tiles': [6, 2, 3, 2, 12, 2, 6, 2, 6, 2, 2, 12, 1, 6, 3, 1]}

    assert get_score(plateau) == 68

    print("Test de la fonction get_score: Ok")
Example #3
0
def cycle_play(partie):
    """
    Permet de jouer au jeu Threes.

    Séquencement des actions de cette fonction:
    1 - Affichage du plateau de jeu
    2 - Affichage de la valeur de la tuile suivante
    3 - Saisie du mouvemement proposé par le joueur ; deux cas possibles:
        * jouer le coup du joueur courant, mettre à jour le score et revenir au point 1.
        * retourner False si le menu est demandé.
    4 - Retourne True si la partie est terminée.

    :param partie: Une partie de jeu en cours (voir game/play/create_new_play) ou None sinon.
    :return: True si la partie est terminée, False si le menu est demandé.
    """
    assert not partie is None, "Erreur: Aucune partie n'est en cours."  # Vérification qu'une partie est en cours.

    plateau = partie['plateau']

    while not is_game_over(plateau):

        full_display(plateau)  # Affichage du plateau de jeu.

        if len(partie['next_tile']
               ) == 0:  # Vérification qu'une tuile n'est pas déjà stockée.
            partie['next_tile'] = get_next_alea_tiles(
                plateau, "encours"
            )  # Dans ce cas, on tire une nouvelle tuile et on la stocke dans la partie.

        next_tile = partie['next_tile']['0']

        print("La valeur de la tuile suivante est:",
              next_tile['val'])  # Affichage de la valeur de la tuile.

        move = get_user_move()  # Récupération du mouvement du joueur.

        if move != 'm':  # Vérification que le joueur ne demande pas le menu principal.

            play_move(plateau, move)

            if not is_room_empty(
                    plateau, next_tile['lig'], next_tile['col']
            ):  # Si les coordonnées de la prochaine tuile sont déjà prises
                next_tile['lig'], next_tile['col'] = get_free_space(
                    plateau)  # suite au mouvement, on les redéfinit.

            put_next_tiles(plateau,
                           partie['next_tile'])  # Ajout de la tuile suivante.

            partie['next_tile'] = {
            }  # Réinitialisation de la tuile stockée pour permettre un nouveau tirage.
            partie['score'] = get_score(plateau)  # Mise à jour du score.
        else:
            return False

    return True
Example #4
0
def threes():
    """ Permet d'enchainer les parties au jeu Threes, de reprendre une partie sauvegardée et de sauvegarder une
    partie en cours """

    user_entries = get_user_menu(None)

    while user_entries != "Q":

        if user_entries == "N":

            partie = create_new_play()
            x = cycle_play(partie)
            if not x:
                user_entries = get_user_menu(partie)

        elif user_entries == "L":

            partie = restore_game()
            x = cycle_play(partie)
            if not x:
                user_entries = get_user_menu(partie)

        elif user_entries == "S":

            if not is_game_over(partie['plateau']):
                save_game(partie)
                print("\nLa partie a bien été sauvegardée.")
                user_entries = get_user_menu(partie)

            else:
                print("\nImpossible de sauvegarder une partie terminée.")

        elif user_entries == "C":

            if not is_game_over(partie['plateau']):
                x = cycle_play(partie)
                if not x:
                    user_entries = get_user_menu(partie)
            else:
                print("\nVous ne pouvez pas continuer une partie terminée !")

        if x:
            print("Partie terminée. Score :", get_score(partie['plateau']))
            print("\n")

            user_entries = get_user_menu(partie)

    return
Example #5
0
def create_new_play():
    """
    Crée une nouvelle partie sous la forme d'un dictionnaire.

    Ses clés sont les suivantes:
    - 'plateau': Un dictionnaire correspondant au plateau de jeu.
    - 'next_tile': Un dictionnairement mémorisant la prochaine tuile à placer (vide au départ).
    - 'score': Un entier correspondant au score courant du joueur.

    :return: Un dictionnaire correspondant à la partie créée.
    """
    plateau = init_play()

    tiles = get_next_alea_tiles(plateau,
                                "init")  # Génération des tuiles de départ.

    put_next_tiles(plateau,
                   tiles)  # Ajout des tuiles de départ dans le plateau.

    return {'plateau': plateau, 'next_tile': {}, 'score': get_score(plateau)}