Les Voltigeurs d'URU LIVE
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.

Fichiers d'aide

2 participants

Aller en bas

Fichiers d'aide  Empty Fichiers d'aide

Message  V@-Michel Lun 22 Oct - 11:10

Toujours concernant la gestion des robots, un point important est de délivrer aux avatars qui le souhaitent des notes d'aide.

Ces aides peuvent avoir comme intérêt, soit de donner les commandes que chaque robot reconnait, soit un mode d'emploi pour un jeu particulier ou une invitation ...etc.


Pour envoyer une note il existe bien entendu des fonctions.
Vous vous rappelez que je vous avais expliqué pourquoi je préférais rédiger une note à chaque demande d'aide et l'envoyer à l'avatar concerné ? Non ? Petit rappel...

Si on rédige une note de façon traditionnelle avec l'interface du KI puis qu'on l'envoie à un avatar, tout se passe bien mais le problème c'est que si quelqu'un modifie cette note en supprimant des lignes ou en ajoutant ses propres commentaires, ces modifications affecteront toutes celles envoyées et l'originale également.
Afin de parer à ce défaut, nous avons pris l'habitude, pour nos robots, de rédiger cette note à chaque demande avec un texte se trouvant dans une variable de nos modules Python. De cette manière plus aucun problème: la note envoyée sera toujours pure, telle que nous souhaitons la distribuer.


Toutefois, rédiger une note dans un programme n'est pas très pratique sur le plan de la composition car il est nécessaire, en Python, de placer des caractères de saut et de passage à la ligne suivante et on n'a pas le résultat que lorsque on exécute le script.
Alors pourquoi ne pas rédiger une note de façon habituelle avec un simple traitement de texte comme le "nodepad", de la sauvegarder sur notre disqye dur et de l'envoyer sous forme de KI-note par la suite ?
C'est le but de ce petit module que je vous propose de réaliser ici.

Avant tout, nous importons les modules Python os et errno nécessaires pour la création et vérification des chemins de répertoire où vont être sauvegardés nos fichiers .txt

Voici le script:

Code:

#*******************#
#      Lire et ecrire          #
#  un fichier sur disque    #
#*******************#
class FichierDisque:
    def __init__(self,repertoire='Jeux/',fichier='default'):
        self._repertoire = repertoire
        self._chemin = repertoire+fichier
    def ecrire(self,Ligne=''):
        try:
            os.makedirs(self._repertoire)
        except OSError as e:
            if not(e.errno==errno.EEXIST and os.path.isdir(self._repertoire)):
                raise
        file = open (self._chemin,"a")
        file.write(Ligne+"\n")
        file.close
    def lire(self,Ligne = ""):
        file = open (self._chemin,"r")
        texte =''
        titre=""
        compteur = 0
        for ligne in file:
            compteur += 1
            if compteur == 1:
                titre = ligne.rstrip("\n\r")
            else:
                texte=texte + ligne
        file.close       
        return texte   

Il s'agit d'une classe qui comporte deux fonctions : ecrire pour l'écriture du fichier sur le disque et lire pour la lecture de ce fichier.

La fonction ecrire, ne nous est d'aucune utilité en ce qui concerne l'envoi des fichiers d'aide car ces fichiers existeront déjà, puisque nous les aurons créés avec notre traitement de texte. Moi, je l'utilise pour les jeux comme magicgame4 où, je sauvegarde sur mon disque dur la progression de chaque joueur dans un fichier séparé, ce qui me permet de voir où ils en sont et leur venir plus facilement en aide en cas de blocage. Cela me servira aussi plus tard pour mon projet de "Fabuleux trésor" assisté par robot.Razz

Ce qui va nous intéresser c'est la fonction lire().
Cette fonction est toute simple. Elle permet de lire le fichier texte, ligne par ligne et de concaténer ces lignes dans une variable de notre programme d'appel de la procédure.

Je vais prendre un exemple afin que vous compreniez comment procéder.
Imaginons que je crée un fichier texte Aide.txt
Voici son contenu:

Code:
 
Aide mise à jour au 26 octobre 2012.
 
Bonjour, ceci est un fichier d'aide de demonstration.
Il ne comporte que 6 lignes.
 
Fin de l'aide

Ce fichier est sauvegardé dans le répertoire: C:\Program Files (x86)\Uru Live MagicBot\Jeux\Helpnotes

Dans mon module d'appel, je tape l'instruction:

Texte = FichierDisque("C:/Program Files (x86)/Uru Live MagicBot/Jeux/Helpnotes/","Aide.txt").lire()

la variable Texte va donc recevoir le texte contenu dans Aide.txt, tel qu'il sera renvoyé à l'avatar qui l'a demandé dans une KI note. C'est donc cette variable que nous aurons besoin par la suite.
Remarquez que j'ai inversé les barres de séparation du chemin ("" en "/") afin que Python ne confonde pas les "" avec un caractère spécial. N'oubliez pas non plus le "/" de fin de chemin, sinon, Helpnotes et Aide.txt seront collés ensembles et vous obtiendrez un message d'erreur : Chemin ou fichier non trouvé, au moment de l'exécution du script.Rolling Eyes

Comment envoyer ce texte sous forme de Ki-mail ?
Je vous en ai déjà parlé dans un post précédent mais ceci concernait une note réalisée au moyen de votre KI. Pour envoyer une note dont le contenu se trouve dans une variable de votre programme, nous utiliserons une autre procédure.

Voici cette fonction :
Code:

def EnvoyerTexte(playerID,titre,message):
    """Pour envoyer un texte sous forme de note a un joueur de KI=playerID"""
    localPlayer = PtGetLocalPlayer()
    texte = ptVaultTextNoteNode(0)
    texte.noteSetText(message)
    texte.noteSetTitle(titre)
    texte.sendTo(playerID)

Il suffit donc d'utiliser:

EnvoyerTexte(idplayer,titrenote,Texte)

idplayer est le numéro de KI du joueur à qui vous envoyez votre note
titrenote est le titre que vous voulez donner à votre note, par exemple "Note d'aide"
Texte est le texte contenu dans cette note, c'est la variable qui nous a servi pour récupérer le contenu du fichier Aide.txt

Et voilà. Pas plus compliqué que cela....
Maintenant, lorsque vous modifierez votre note dans le fichier Aide.txt de votre disque dur, ce nouveau texte sera envoyé à la place de l'ancien.
C'est quand même plus pratique non ? Laughing
V@-Michel
V@-Michel
Admin
Admin

Messages : 1172
Date d'inscription : 13/05/2010
Age : 69
Localisation : Belgique

Revenir en haut Aller en bas

Fichiers d'aide  Empty Re: Fichiers d'aide

Message  Lyrositeur Lun 22 Oct - 11:22

Michel, ta solution pour ouvrir les fichier est extrêmement compliqué - Python a des outils beaucoup plus simples :
1) Tu n'as qu'à utiliser try: ... except IOError: pour ouvrir le fichier. Pas besoin de os ou errno.
2) Tu ouvres et tu fermes le fichier à chaque ligne, mais ce n'est pas nécessaire, tu n'as qu'à l'ouvrir une fois, écrire chaque ligne, puis fermer le fichier.
3) Tu peux stocker toutes ces variables dans Python sous forme de variables plutôt que de fichier : tu n'as qu'à écrire :
Code:
message = """Ceci est un message.
Un saut à la ligne.

Deux sauts à la ligne."""
Cela préservera les sauts à la ligne dans la note KI.
Lyrositeur
Lyrositeur
Escaladeur
Escaladeur

Messages : 96
Date d'inscription : 03/07/2012
Age : 28
Localisation : Montréal, Canada

http://www.lyros.net

Revenir en haut Aller en bas

Fichiers d'aide  Empty Re: Fichiers d'aide

Message  V@-Michel Lun 22 Oct - 14:49

Effectivement, pour l'écriture de lignes dans le fichier sur disque, j'ouvre le fichier et le referme pourquoi ?
Tout simplement parceque cela me sert à sauvegarder les avancées de chaque joueur dans un jeu et une seule ligne suffit pour cela sinon, bien-sûr que il n'est pas nécessaire d'ouvrir et de refermer le fichier à chaque ligne s'il s'agit d'un texte plus long. C'est dailleurs ce que je fais en lecture comme tu as pu le remarquer étant donné que les fichiers d'aide en comportent plus d'une.

Comme je l'ai expliqué dans ce post, il est tout-à-fait possible de réaliser un texte et le placer dans une variable string dans le module Python. C'est dailleurs ce que je faisais avant. Mais il est beaucoup plus facile de changer un fichier texte avec un simple traitement de texte que de le modifier dans le programme, car il ne faut pas relancer les robots à chaque modification, on peut plus facilement déplacer des lignes, modifier une mise en page...

Enfin j'utilise les bibliothèques os et errno car celles-ci tiennent compte du système d'exploitation utilisé par l'ordinateur et renvoie des erreurs spécifiques à ce système. Pour ma part j'utilise windows 7 et les erreurs sont retournées en fonction de ce système avec un numéro spécifique et en Français.

Chaque module utilisé, chaque fonction que je développe sur le forum le sont afin d'ouvrir la porte à suggestions comme tu le fais et cela permet de progresser et d'améliorer le code utilisé. Libre à tout le monde de les utiliser ou de les adapter selon ses propres besoins.Very Happy
V@-Michel
V@-Michel
Admin
Admin

Messages : 1172
Date d'inscription : 13/05/2010
Age : 69
Localisation : Belgique

Revenir en haut Aller en bas

Fichiers d'aide  Empty Re: Fichiers d'aide

Message  Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Revenir en haut


 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum