Fichiers d'aide
2 participants
Page 1 sur 1
Fichiers d'aide
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:
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.
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:
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.
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 :
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 ?
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.
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.
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 ?
V@-Michel- Admin
- Messages : 1172
Date d'inscription : 13/05/2010
Age : 69
Localisation : Belgique
Re: Fichiers d'aide
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 :
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."""
Re: Fichiers d'aide
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.
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.
V@-Michel- Admin
- Messages : 1172
Date d'inscription : 13/05/2010
Age : 69
Localisation : Belgique
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum