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')
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")
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
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
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)}