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