❤ 0 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:
1
2
| 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 fichier
Là, les choses sérieuses commencent !
Nous devons tout d'abord ouvrir le fichier en lecture seule, puis, enregistrer son contenu dans une variable.
Procédons comme ceci:
1
2
3
| 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'abord, on demande d'ouvrir le fichier "Params.txt", puis...
Ce "r" là, comme deuxième argument Késako ??
Ça 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'abord, on va enlever les espaces et transformer les tirets ("_") en espaces, comme cela:
1
2
| fichier.gsub!(" ", "")
fichier.gsub!("_", " ") |
La méthode gsub! permet de remplacer une chaîne de caractères par une autre. Un exemple plus flagrant :
1
| fichier.gsub("oui", "true") |
Ici, tous les "oui", seront transformés en "true"
Ceci fait on va séparer les instructions comme suit:
1
| fichier = fichier.split(";") |
Késako ça aussi ??
Et bien, cela 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:
1
2
| 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:
1
2
3
4
5
| 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 = 24
Et pour la fin, on met cette ligne de code:
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é:
1
2
3
4
5
6
7
8
9
10
11
12
13
| 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
1
2
3
4
|
$fontface = @police
$fontsize = @taille
|
ETAPE 3 : Gestion des erreurs
Alors, maintenant, imaginez un instant que le fichier soit supprimé, ou qu'il y ait une erreur à l'intérieur !
Catastrophe, le joueur est dans la mouise.
Donc, on va appliquer une gestion de l'erreur grâce à la technique
begin... rescue... end
A 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 corrompu, avec un:
1
2
| 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:
1
| 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 :
1
2
| fichier.write("Police=Arial;
Taille=24) |
Et on referme le fichier pour enregistrer les modifications...
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éé :
1
| print "Le fichier 'Params.txt' a été créé avec succès!" |
puis, fini le rescue, on met la touche finale!! :
Donc, dans le rescue on a:
1
2
3
4
5
6
7
8
9
10
11
12
|
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!!
ANNEXES
Voici 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éé 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éé 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.
|