Bon, ceci est un tutoriel qui vous permettra d'écrire et de lire un fichier qui déterminera des paramètres dans votre jeu, et qui permettra à un joueur de modifier certains paramètres.
Et cela en incluant une sécurité!
Difficulté : moyenne
A connaître : Les bases du ruby, le reste est expliqué, certains points de base sont aussi repris.
On apprend en plus des bases: -l'utilité de la méthode "split" et de la méthode "gsub!" .
-Lire et écrire un fichier
-Gestion de l'erreur avec la structure begin...rescue...end
ETAPE 1 : Les paramètres et la syntaxe du fichier ---Paramètres à inclure---
Nous allons donc choisir quelques paramètres à déterminer.
Prenons, par exemple, deux variables de RPGMaker :
-$fontface qui détermine la police du texte
-$fontsize qui détermine la taille du texte
---Syntaxe du fichier---
Alors, je vais vous montrer une syntaxe simple, que vous utiliserez pour pouvoir lire le fichier, et en tirer des informations:
- Code:
-
Paramètre1 = valeur ;
P a r a m è t r e2 = A r ial_Blac k
Pourquoi est-ce écrit ça comme ça??Parce que notre syntaxe ne prendra pas en compte les espaces donc :
P a r a m è t r e2 revient à écrire paramètre2.
Pourquoi ce tiret "_" entre Arial et Black?Parce que ce tiret sera transformé par la suite par un espace,et si on colle Arial et Black, la police ne sera pas reconnue.
Ensuite, ce point virgule, c'est quoi??(Bon, ouais, je me suis un peu inspiré du C++)
C'est pour séparer nos instructions, vous verrez comment par la suite.
Donc, voilà pour ça, la syntaxe est établie!
Maintenant, on va définir les paramètres par défaut du fichier ainsi que son nom.
Appelons le "Params.txt"
Et dedans, mettons:
Police = Arial
;Taille = 24
Remarques :
-la dernière instruction n'a pas besoin d'avoir un point virgule en sa fin.
-On crée le fichier une première fois pour tester, vous verrez pourquoi par la suite il se créera tout seul ETAPE 2: Lecture du fichierLà, les choses sérieuses commencent! :demon
Nous devons tout d'abbord ouvrir le fichier
en lecture seule, puis, enregistrer son contenu dans une variable.
Procédons comme ceci:
- Code:
-
file = File.open("Params.txt", "r")
fichier = file #Vous verrez pourquoi après, c'est pour fermer
fichier = fichier.read
Mais qu'est ce que c'est ça??Tout d'abbord, on demande d'ouvrir le fichier "Params.txt", puis...
Ce "r" là, comme deuxième argument Késako?? Ca veut dire qu'on l'ouvre
en lecture seule on écrira pas dessus pour le moment, le pointeur se placera aussi au début du fichier.
Puis on demande à ce que la variable fichier prenne le contenu du document texte.
Alors, ça y'est, on à tout dedans, mais comment on fait pour interpréter ça?????Tout d'abbord, on va enlever les espaces et transformer les tirets ("_") en espaces, comme cela:
- Code:
-
fichier.gsub!(" ", "")
fichier.gsub!("_", " ")
La méthode gsub! permet de remplacer une chaîne de caractères par une autre. Un exemple plus flagrant :
- Code:
-
fichier.gsub("oui", "true")
Ici, tous les "oui", seront transformés en "true"
Ceci fait on va séparer les instructions comme suit:
- Code:
-
fichier = fichier.split(";")
Késako ça aussi??Et bien, celà transforme la chaîne de caractère fichier, en un tableau, qui contient plusieurs chaînes de caractères : les parties séparées par les points virgules! En fait, on a demandé de "couper" là où il y a un point virgule.
Donc, maintenant, pour avoir une vision:
fichier = ["Police = Arial", "Taille = 14"]Voilà à quoi est égale notre variable fichier...
On peut rien faire avec ça non plus, il faut déjà mettre chaque partie du tableau dans une variable. Alors, on va faire:
- Code:
-
police = fichier[0]
taille = fichier[1]
Et voilà, on se retrouve avec 2 variables : police et fichier... police étant égale à la première partie du tableau et taille à la seconde...
Mais on peut encore rien faire avec ça...
On va donc séparer ce qui est d'un côté du "=", et ce qui est de l'autre côté et qui nous intéresse!
Alors on fait:
- Code:
-
police = police.split("=")
@police = police[1] #Pour qu'il soit reconnu plus tard
taille = taille.split("=")
@taille = taille[1].to_i #Pour qu'il soit reconnu plus tard
Une chose à noter : on convertit la chaîne de caractères "42" en un Integer (un entier) 42 grâce à la méthode to_i
Maintenant, on a les infos, ici on a:
police = "Arial"
taille = 24Et pour la fin, on met cette ligne de code:
- Code:
-
file.close
Il ne nous reste plus qu'à mettre ça là où il faut.
C'est à dire, au commencement de tout... dans l'antre du script "main"!!!!
Donc, tout au début de main, mettez tout ce que je vous ai montré:
- Code:
-
file = File.open("Params.txt", "r")
fichier = file #Vous verrez pourquoi après, c'est pour fermer
fichier = fichier.read
fichier.gsub!(" ", "")
fichier.gsub!("_", " ")
fichier = fichier.split(";")
police = fichier[0]
taille = fichier[1]
police = police.split("=")
@police = police[1] #Pour qu'il soit reconnu plus tard
taille = taille.split("=")
@taille = taille[1].to_i #Pour qu'il soit reconnu plus tard
file.close
Et maintenant, pour appliquer ces modifs, nous restons dans "main" et nous changeons:
$fontface = "Arial"
$fontsize = 24
en
- Code:
-
$fontface = @police
$fontsize = @taille
ETAPE 3 : Gestion des erreursAlors, maintenant, imaginez un instant que le fichier soit supprimé, ou qu'il y ait une erreur à l'intérieur!! :hurle
Catastrophe, le joueur est dans la mouise.
Donc, on va appliquer une gestion de l'erreur grâce à la technique
begin... rescue... endA quoi ça sert?Et bien, celà, si il y a une erreur, au lieu de vous afficher un message d'erreur et de fermer, fait que vous pouvez passer à la commande dans rescue pour rétablir la situation.
Nous allons donc foutre un begin en haut de notre code et à la fin un rescue (avant le begin de main).
A la suite du rescue, nous allons informer le joueur que le fichier "Params.txt" n'existe pas où est corrumpu, avec un:
- Code:
-
print "Le fichier 'Params.txt' n'existe pas ou est corrompu.
Appuyez sur entrée pour créer le fichier"
Puis, on va créer le fichier en question, et écrire dedans, ou, s'il est erroné le remplacer par un nouveau.
Pour cela, nous allons faire:
- Code:
-
fichier = File.open("Params.txt", "w+")
Mais qu'est-ce que c'est que ce "w+"?Ca veut dire qu'on l'ouvre en lecture/écriture, et qu'on écrase toutes les données à l'intérieur, et que s'il n'existe pas, on le crée.
Puis, on va écrire nos données par défaut dedans :
- Code:
-
fichier.write("Police=Arial;
Taille=24)
Et on referme le fichier pour enregistrer les modifications...
- Code:
-
file.close
Note: dans l'éditeur de script de XP, la deuxième ligne ne va pas apparaître violette comme si elle était entre guillemets, cependant, elle l'est en réalité. Dans l'éditeur de VX, ce bug a été corrigéMaintenant, on va informer le joueur que le fichier a été créé:
- Code:
-
print "Le fichier 'Params.txt' a été créé avec succès!"
puis, fini le rescue, on met la touche finale!! :
- Code:
-
end
Donc, dans le rescue on a:
- Code:
-
rescue
print "Le fichier 'Params.txt' n'existe pas ou est corrompu.
Appuyez sur entrée pour créer le fichier"
fichier = File.open("Params.txt", "w+")
fichier.write("Police=Arial;
Taille=24)
file.close
print "Le fichier 'Params.txt' a été créé avec succès!"
@taille = 24
@police = "Arial" #Parce qu'il ne relit pas le fichier après
end
Et voilà, c'est fin prêt!!
ANNEXESVoici un petit quelque chose que j'ai sortit de je sais pas où qui donne les "flags" et leur fonction:
- Citation :
- 'r' Ouvre en lecture seule, et place le pointeur de fichier au début du fichier.
'r+' Ouvre en lecture et écriture, et place le pointeur de fichier au début du fichier.
'w' Ouvre en écriture seule ; place le pointeur de fichier au début du fichier et réduit la taille du fichier à 0. Si le fichier n'existe pas, on tente de le créer.
'w+' Ouvre en lecture et écriture ; place le pointeur de fichier au début du fichier et réduit la taille du fichier à 0. Si le fichier n'existe pas, on tente de le créer.
'a' Ouvre en écriture seule ; place le pointeur de fichier à la fin du fichier. Si le fichier n'existe pas, on tente de le créer.
'a+' Ouvre en lecture et écriture ; place le pointeur de fichier à la fin du fichier. Si le fichier n'existe pas, on tente de le créer.
'x' Crée et ouvre le fichier en lecture seule ; place le pointeur de fichier au début du fichier. Si le fichier existe déjà, fopen() va échouer, en retournant FALSE et en générant une erreur de niveau E_WARNING. Si le fichier n'existe pas, fopen() tente de le créer. Ce mode est l'équivalent des options O_EXCL|O_CREAT pour l'appel système open(2) sous-jacent. Cette option est supportée à partir de PHP 4.3.2 et fonctionne uniquement avec des fichiers locaux.
'x+' Crée et ouvre le fichier en lecture et écriture ; place le pointeur de fichier au début du fichier. Si le fichier existe déjà, fopen() va échouer, en retournant FALSE et en générant une erreur de niveau E_WARNING. Si le fichier n'existe pas, fopen() tente de le créer. Ce mode est l'équivalent des options O_EXCL|O_CREAT pour l'appel système open(2) sous-jacent. Cette option est supportée à partir de PHP 4.3.2, et fonctionne uniquement avec des fichiers locaux.
Voilà, c'est tout, si vous avez des questions à poser...
Tutoriel rédigé par RPG-Man.