示例#1
0
def test_is_game_over():
    """
    Fonction de test de is_game_over().
    """
    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]}
    assert is_game_over(p1) == False, 'Erreur : fonction is_game_over().'
    assert is_game_over(p2) == True, 'Erreur : fonction is_game_over().'
    print('Fonction is_game_over() : OK')
示例#2
0
def get_next_alea_tiles(plateau, mode):
    if mode.upper(
    ) == "INIT" and get_nb_empty_rooms(plateau) >= 2 or mode.upper(
    ) == "ENCOURS" and get_nb_empty_rooms(plateau) >= 1:
        if mode.upper() == "INIT":
            tableau = {
                'mode': "init",
                'check': not is_game_over(plateau),
                '0': {
                    'val': 1,
                    'lig': randint(0, 3),
                    'col': randint(0, 3)
                },
                '1': {
                    'val': 2,
                    'lig': randint(0, 3),
                    'col': randint(0, 3)
                }
            }
            while not (is_room_empty(plateau, tableau["0"]["lig"],
                                     tableau["0"]["col"])
                       and is_room_empty(plateau, tableau["1"]["lig"],
                                         tableau["1"]["col"])
                       and not (tableau["0"]["lig"] == tableau["1"]["lig"] and
                                tableau["0"]["col"] == tableau["1"]["col"])):
                tableau["0"] = {
                    'val': 1,
                    'lig': randint(0, 3),
                    'col': randint(0, 3)
                }
                tableau["1"] = {
                    'val': 2,
                    'lig': randint(0, 3),
                    'col': randint(0, 3)
                }
        else:
            tableau = {
                'mode': 'encours',
                'check': not is_game_over(plateau),
                '0': {
                    'val': randint(1, 3),
                    'lig': randint(0, 3),
                    'col': randint(0, 3)
                }
            }
            while not (is_room_empty(plateau, tableau["0"]["lig"],
                                     tableau["0"]["col"])):
                tableau["0"] = {
                    'val': randint(1, 3),
                    'lig': randint(0, 3),
                    'col': randint(0, 3)
                }
        return tableau
    else:
        return 'Erreur !'
示例#3
0
def test_is_game_over():
    plateau = {'n': 4,
               'nb_cases_libres': 6,
               'tiles': [6, 2, 3, 2, 0, 2, 6, 2, 0, 2, 2, 0, 1, 0, 0, 0]}

    assert not (is_game_over(plateau))

    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 is_game_over(plateau)

    print("Test de la fonction is_game_over: Ok")
示例#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
示例#5
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