# -*- coding:utf-8 -*- __projet__ = "CoursS5" __nom_fichier__ = "8_dominos" __author__ = "A-J. Tinet" __date__ = "décembre 2022" """ ======================================================================================================================== Ex. 8 - JEU DE DOMINOS ======================================================================================================================== """ # Import de bibliothèque from random import randint # Définition de fonctions def precede(chaineA, chaineB): """ La chaine A précède la chaine B si elle se termine par une suite non vide de caractères que l'on retrouve au début de B. :param chaineA: mot :param chaineB: mot :return: 1 si A précède B, 0 sinon """ for i in range(len(chaineA)-1, -1, -1): if chaineB.startswith(chaineA[i:]): return 1 return 0 def gestion_joueur(reserve, sequence, pioche): """ Joue un tour pour le joueur. :param reserve: Reserve de mot du joueur :param sequence: Séquence de dominos :param pioche: Liste des mots de la pioche :return: None """ # Saisie d'une propostion de mot de la part du joueur print("Votre réserve est : ",reserve) mot = input("Proposer un mot : ") joue_un_tour(mot, reserve, sequence, pioche) def joue_un_tour(mot, reserve, sequence, pioche): """ Modifie la réserve du joueur, la séquence (éventuellement) et la pioche (éventuellement) :param mot: Mot sélectionné :param reserve: Reserve de mot :param sequence: Séquence de dominos :param pioche: Liste des mots de la pioche :return: None """ # Vérifie que le mot est dans la réserve et mise à jour de la séquence si possible if mot in reserve: if len(sequence) == 0: sequence.append(mot) reserve.remove(mot) elif precede(mot, sequence[0]): sequence.insert(0,mot) reserve.remove(mot) elif precede(sequence[-1], mot): sequence.append(mot) reserve.remove(mot) # Pas de jeu possible, on tire au sort un mot if len(pioche) != 0: mot = pioche[randint(0, len(pioche)-1)] pioche.remove(mot) reserve.append(mot) def joue(reserve, sequence, pioche): """ Joue un tour pour l'ordinateur. :param reserve: Reserve de mot de l'ordinateur :param sequence: Séquence de dominos :param pioche: Liste des mots de la pioche :return: """ # Tire au sort un mot de la réserve if len(reserve) == 0: mot = "" else: mot = reserve[randint(0, len(reserve)-1)] print("Ordinateur joue : ",mot) joue_un_tour(mot, reserve, sequence, pioche) def jeu_de_domino(pioche): """ Lance une partie de dominos. :param pioche: Liste des mots de la pioche :return: None """ # Initialise les reserves et la séquence reserve_joueur = [] reserve_ordinateur = [] sequence = [] # Jeu - le joueur commence while True: print(sequence) gestion_joueur(reserve_joueur, sequence, pioche) if len(reserve_joueur) == 0: print("Le joueur a gaggné.") return joue(reserve_ordinateur, sequence, pioche) if len(reserve_ordinateur) == 0: print("L'ordinateur a gagné.") return # Programme principal if __name__ == '__main__': # Test de précède print(precede("VACHE","CHEVAL")) print(precede("BONJOUR","REVOIR")) print(precede("VACHE","VACHE")) print(precede("VACHE","CHAMEAU")) # Test du jeu du joueur pioche = ["VACHE","CHEVAL","GEAI"] sequence = ["ETE","TENEBRE"] reserve = ["UREE","BRETON","BONJOUR"] gestion_joueur(reserve, sequence, pioche) # Tester les trois mots de la reserve print(reserve, sequence, pioche) # Test du jeu pioche = ["VACHE","CHEVAL","GEAI","ETE","TENEBRE","UREE","BRETON","TONNE","NEIGE","VALEUR"] jeu_de_domino(pioche)