def demander(quelquechose, t=0): """ Une surcouche de iconsole.demander qui met l'état actuel en « acteur » @quelquechose : str = un truc à afficher @t : int = nombre de tabulations [opts] @return : str """ return iconsole.demander(get_etat(), quelquechose, t)
import persistance import affichage import moteur import iconsole import couleurs import misc if __name__ == '__main__': persistance.init () couleurs.init () # affichage.init () continuer = True while continuer == True: jcode = iconsole.demander ("main","Tu veux decider du code ?") jcode = misc.question_fermee (jcode) if jcode == True: iconsole.choisir_code () else: iconsole.choisir_code () iconsole.jouer () rep = iconsole.demander ("main","Tu veux rejouer ?") continuer = misc.question_fermee (jcode) affichage.reset () persistance.save ()
iconsole.afficher("Chargement", "Interface console principale ...") sleep(random()) iconsole.afficher("Chargement", "Lancement ...") sleep(1) e = "Menu" # L'état de base est le "Menu" joueur.init() # Initialise le joueur iconsole.afficher(e, "Tapez « help » pour obtenir de l'aide ...") continuer = True while continuer == True: # Les commandes sont # help, humain-code, humain-joue, quit, ia-joue, ia-code rep = iconsole.demander(e, "Commande") if rep == "quit": continuer = False iconsole.afficher("Programme", "Quitte ...") else: try: e = joueur.send(rep) except joueur.ErreurFatale: iconsole.afficher("Programme", "Une erreur fatale est survenue ...") continuer = False except joueur.LeProgrammeurEstCon: iconsole.afficher("Programme", "Une des fonctions dans `joueur.py` est mal utilisée ... quitte") continuer = False except joueur.EcranInvalide: iconsole.afficher(
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é !")
persistance.init () # On crée une machine comme définit en début de fichier machine = gen_fsm () #st = machine.next () # premier yield, pour savoir le nom de l'état et initialiser le générateur st = next (machine) # La boucle infinie ... moche ! while True: # On actualise l'état courant à chaque # tour de boucle ... # Un prompt personnalisé, demande une commande req = iconsole.demander (st, "Commande") # Ici on fait un switch entre les états # C'est là que se déroule toutes les # redirections ... Je ne sais pas trop comment # faire cela autrement :-) # Quelque soit l'état ... on peut quitter ! :-) if req == "quit": break # On sort de la boucle, sauve, et quitte le programme st = machine.send (req) # on l'envoie à la machine # Une fois la boucle terminée, on doit # sauver les modifications (sinon c'est con nan ?) persistance.save ()