def afficher(quelquechose, t=0): """ Une surcouche de iconsole.afficher qui met automatiquement l'état courant en « acteur » @quelquechose : str = un truc à afficher @t : int = nombre de tabulations [opts] @return : None """ iconsole.afficher(get_etat(), quelquechose, t)
def ia_alea (): # On fait pas dans la finesse ici # Il faut plus de rafinement --" while True: prop = generer_couleurs_aleatoires () try: r = moteur.verification_solution (prop) except moteur.TableauInvalide as t: iconsole.afficher ("IA", "Erreur ... " + t.message) else: if r == "gagne" or r == "perdu": raise StopIteration else: yield
def ia_knuth (): univers = couleurs.liste_couleurs (moteur.get_nombre_couleurs ()) li = create_list (univers) # Crée la liste de toutes les possibilités while True: # On boucle ! Youhou ... yield try: proposition = choice (li) # On propose un truc de la liste li.remove (proposition) # Retire la proposition de la liste except: iconsole.afficher ("IA","Le code utilise FORCÉMENT des couleurs qui ne sont pas disonibles ...") try: reponse = moteur.verification_solution (proposition) # Et récupère la réponse du moteur iconsole.afficher ("IA","Joue {0} -> {1}".format (proposition,reponse)) if reponse == "gagne" or reponse == "perdu": raise StopIteration else: nli = [] for i in li: reponse_tmp = moteur.proposition_solution (proposition, i) if reponse_tmp == reponse: nli.append (i) li = nli except moteur.TableauInvalide as t: iconsole.afficher ("IA", "Erreur ... " + t.message)
# -c IA | Joueur # qui code # -j IA | Joueur # qui joue # (j dépend de c, mais pas réciproquement) # --console # entièrement en console # --graphique # entièrement graphique parser = argparse.ArgumentParser("pymastermind") parser.add_argument("-d") # Mauvais .... args = parser.parse_args() # print (args) ## fin arguments en ligne de commande iconsole.init() # Initialise le module iconsole iconsole.afficher("Programme", "Bienvenue dans le mastermind !") sleep(1) # Initialisations des modules dans le bon ordre ! persistance.init() iconsole.afficher("Chargement", "Charge la persistance ...") sleep(random()) couleurs.init() iconsole.afficher("Chargement", "Charge les couleurs ...") sleep(random()) primitives.init() affichage.init() iconsole.afficher("Chargement", "Initialise l'affichage ...") sleep(random())
def gen_fsm (): """ Crée la FSM ... c'est toute la fonction la plus importante """ # Variables de la FSM fichier = "" st = "menu-fichier" while True: # Là est toute la magnificience # on rend la main avec l'état actuel (comme ça les gens peuvent # savoir où on est) # mais la prochaine exécution ... demande une action à faire # (et comme la boucle est infinie ... on revient toujours attendre # à ce point exact de la boucle :-P. req = (yield st) # on sauve dans une variable if st == "menu-fichier": # Si on est dans le menu-fichier les commandes sont if req == "list": # On affiche la liste des fichiers # disponnibles iconsole.afficher (st, persistance.liste_fichiers ()) elif req == "entrer": # Yop, on transite vers l'état menu-variable # SI ET SEULEMENT SI l'utilisateur # a sélectionné un fichier !!! if fichier != "": st = "menu-variable" else: iconsole.afficher (st,"Vous n'avez pas sélectionné un fichier ...") elif req == "help": # L'aide affiche la liste des commandes possibles iconsole.afficher (st, "Les commandes sont : « quit », « list », « entrer », « help » et @Fichier") else: # C'est un nom de fichier # On suppose que si ce n'est pas une commande, # c'est un nom de fichier, et on change donc # le fichier sélectionné fichier = req iconsole.afficher (st,"Vous avez sélectionné " + req) else: # il n'existe que deux états, celui là est donc menu-variable # On a forcément définit un fichier, # vu que l'on ne peut être arrivé à cet état # QUE par une transition ! if req == "list": # On affiche simplement la liste des variables disponnibles iconsole.afficher (st, persistance.liste_variables (fichier)) elif req == "up": # On retourne au menu fichier ... tout con st = "menu-fichier" elif req == "ou": # On dit à l'utilisateur où il se trouve, c'est à dire le fichier courant iconsole.afficher (st, "Le fichier courant est : "+ fichier) elif req == "help": # On affiche la liste des commandes disponnibles iconsole.afficher (st, "Les commandes sont : « quit », « ou », « list », « help », « up » et @Variable") else: # C'est une variable # On suppose que si ce n'est pas une commande c'est une variable # à modifier ... Donc on demande la nouvelle valeur # et on modifie ... try: iconsole.afficher (st, "Valeur actuelle : " + str (persistance.get_propriete (fichier,req))) except: iconsole.afficher (st, "Nouvelle variable !") val = iconsole.demander (st,"Nouvelle valeur") persistance.set_propriete (fichier,req,val) iconsole.afficher (st,"Bien modifié !")