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é !
Dans ce tutoriel, je vous présente les principaux types utilisés en Ruby et l'essentiel à savoir sur les variables en Ruby.
I)Les principaux types rencontrés
1)Les entiers
Ils appartiennent à la classe Integer et font partie des valeurs numériques.
Portion de code:
nb = 2
var = -3
zero = 0
2) Les flottants
Ce sont les nombres décimaux de la classe Float. Attention à la virgule !
Portion de code:
pi = 3.14
nb = -5.68
zero = 0.0
3) Les booléens
Les deux seules valeurs possibles pour ces pseudo-variables sont true(vrai) et false(faux). Nous avons respectivement la classe
TrueClass pour true et FalseClass pour false.
Portion de code:
vrai = true
faux = false
4) Les chaines de caractères
Ce sont des chaines entre guillemets ou de simples caractères provenant de la célèbre classe String.
Portion de code:
msg = "Bonjour !"
ch = 'a'
5) Les intervalles
Pour définir un intervalle, on utilise la classe Range avec un borne de valeurs, avec ou sans exclusion.
Portion de code:
periode = 1939 .. 1945 # Inclusion de 1939 à 1945
periode = 1939 ... 1945 # Exclusion de 1945, avec de 1939 à 1944
6) Les tableaux
Un tableau est un ensemble de variables d'objets différents définis sous forme de liste. Il appartient à la classe Array.
En tout cas, vous devez savoir que toute liste ou tableau a un indice commençant par zéro.
Portion de code:
tab = [1,2.35,"quatre"]
tab[1] # 2.35
7) Les listes indexées
Une liste indexée est une liste associative associant un objet à partir d'un autre. La classe Hash gère ce type de listes.
Chaque élément associatif s'appelle une clé et s'associe à une valeur. L'index est l'indice commençant toujours par 0.
Portion de code:
liste = {1=>"un",2=>"deux",3=>"trois"}
Les objets invalides
La pseudo-variable nil sert à initialiser un objet non initialisé ou invalide. Elle appartient à la classe NilClass.
Portion de code:
rien = nil
nb_inconnu = nil
9) Les objets de manière générale
Comme vous avez pu le constater, chaque type est associé à son objet par instanciation. De manière générale, on définit un
type comme ceci :
Portion de code:
class Test
# Instructions
end
objet = Test.new
10) Les méthodes de conversion de types
Vous devez toutefois faire attention à certaines conversions.
Portion de code:
to_i # Conversion en entier
to_f # Conversion en flottant
to_s # Conversion en chaine de caractères
to_a # Conversion en tableau
Avec la pseudo-variable nil, voilà ce que ça nous donne :
Portion de code:
nil.to_i # 0
nil.to_f # 0.0
nil.to_s # ""
nil.to_a # []
II) Les opérations sur les variables
1) Les opérations mathématiques
Voici comment on définit des opérations mathématiques en général :
Portion de code:
a = a+1
a = a-2
a = a*4
a = a/3 # Jamais de division par zéro !
a = a%7 # Le modulo % renvoie le reste d'une division euclidienne
Je vous mets aussi la forme contractée :
Portion de code:
a += 1
a -= 2
a *= 4
a /= 3
a %= 7
2) La concaténation
Pour concaténer deux ou plusieurs chaines, on utilise la méthode + (qui est un opérateur mathématique, je sais !).
Portion de code:
"Bon"+"jour !" # "Bonjour !"
Ensuite, il est possible de multiplier un nombre de fois une chaine.
Portion de code:
"Go ! "*3 # "Go ! Go ! Go ! "
"Go !"*0 # Renvoie la chaine vide ""
III) Les booléens et les opérateurs logiques
Je donnerais des exemples concrets après avoir donné les formules logiques sur les booléens.
1) and(et)
Portion de code:
true and true # true
false and false # false
true and false # false
nb>=2 and nb<=5 # 2..5
2) or(ou)
Portion de code:
true or true
false or false
true or false
nb<=2 or nb>=15
3) not(non)
Portion de code:
not true # false
not false # true
not nb>=0 # nb<0
IV) Les différentes portées des variables
Je donnerais la portée et la syntaxe en fonction des variables.
1) Les variables locales
Elles ne s'utilisent que depuis là où elles sont définies.
Portion de code:
var = 0
2) Les variables d'instance ou attributs
Elles ne s'utilisent que dans la classe où elles sont définies et dans les classes dérivées.
Portion de code:
@var = 0
3) Les variables de classe
Ce sont des constantes de classe s'appliquant à l'ensemble des attributs d'une génération de classes.
Portion de code:
@@var = 0
4) Les variables globales
Ce sont des variables qui peuvent s'appeler et se rédéfinir de n'importe où. Elles sont à éviter autant que possible !
Portion de code:
$var = 0
5) Les constantes
Ce sont des variables gardant une valeur fixe.
Portion de code:
VAR = 0
V) Les instructions d'entrée-sortie
1) Pour afficher un message
Portion de code:
print "Bonjour !" # Sans saut de ligne
puts "Bonjour !" # Avec saut de ligne
2) Pour entrer une valeur
Portion de code:
print "Quel est votre age ?"
age = gets.chomp # Renvoyer automatiquement une chaine de caractère
puts "Vous avez #{age} ans."
print "Quel est votre pseudo ?"
age = gets
puts "Vous pseudo est "+pseudo.to_s # Si on doit convertir
Voilà, c'est tout pour les variables !
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:
Portion de 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 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:
Portion de 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'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:
Portion de 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 :
Portion de code:
fichier.gsub("oui", "true")
Ici, tous les "oui", seront transformés en "true"
Ceci fait on va séparer les instructions comme suit:
Portion de code:
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:
Portion de 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:
Portion de 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 = 24
Et pour la fin, on met cette ligne de code:
Portion de 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é:
Portion de 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
Portion de code:
$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:
Portion de 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:
Portion de 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 :
Portion de code:
fichier.write("Police=Arial;
Taille=24)
Et on referme le fichier pour enregistrer les modifications...
Portion de 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éé :
Portion de code:
print "Le fichier 'Params.txt' a été créé avec succès!"
puis, fini le rescue, on met la touche finale!! :
Portion de code:
end
Donc, dans le rescue on a:
Portion de 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!!
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...
Et cela en incluant une sécurité !
Dans ce tutoriel, je vous présente les principaux types utilisés en Ruby et l'essentiel à savoir sur les variables en Ruby.
I)Les principaux types rencontrés
1)Les entiers
Ils appartiennent à la classe Integer et font partie des valeurs numériques.
Portion de code:
nb = 2
var = -3
zero = 0
2) Les flottants
Ce sont les nombres décimaux de la classe Float. Attention à la virgule !
Portion de code:
pi = 3.14
nb = -5.68
zero = 0.0
3) Les booléens
Les deux seules valeurs possibles pour ces pseudo-variables sont true(vrai) et false(faux). Nous avons respectivement la classe
TrueClass pour true et FalseClass pour false.
Portion de code:
vrai = true
faux = false
4) Les chaines de caractères
Ce sont des chaines entre guillemets ou de simples caractères provenant de la célèbre classe String.
Portion de code:
msg = "Bonjour !"
ch = 'a'
5) Les intervalles
Pour définir un intervalle, on utilise la classe Range avec un borne de valeurs, avec ou sans exclusion.
Portion de code:
periode = 1939 .. 1945 # Inclusion de 1939 à 1945
periode = 1939 ... 1945 # Exclusion de 1945, avec de 1939 à 1944
6) Les tableaux
Un tableau est un ensemble de variables d'objets différents définis sous forme de liste. Il appartient à la classe Array.
En tout cas, vous devez savoir que toute liste ou tableau a un indice commençant par zéro.
Portion de code:
tab = [1,2.35,"quatre"]
tab[1] # 2.35
7) Les listes indexées
Une liste indexée est une liste associative associant un objet à partir d'un autre. La classe Hash gère ce type de listes.
Chaque élément associatif s'appelle une clé et s'associe à une valeur. L'index est l'indice commençant toujours par 0.
Portion de code:
liste = {1=>"un",2=>"deux",3=>"trois"}
Les objets invalides
La pseudo-variable nil sert à initialiser un objet non initialisé ou invalide. Elle appartient à la classe NilClass.
Portion de code:
rien = nil
nb_inconnu = nil
9) Les objets de manière générale
Comme vous avez pu le constater, chaque type est associé à son objet par instanciation. De manière générale, on définit un
type comme ceci :
Portion de code:
class Test
# Instructions
end
objet = Test.new
10) Les méthodes de conversion de types
Vous devez toutefois faire attention à certaines conversions.
Portion de code:
to_i # Conversion en entier
to_f # Conversion en flottant
to_s # Conversion en chaine de caractères
to_a # Conversion en tableau
Avec la pseudo-variable nil, voilà ce que ça nous donne :
Portion de code:
nil.to_i # 0
nil.to_f # 0.0
nil.to_s # ""
nil.to_a # []
II) Les opérations sur les variables
1) Les opérations mathématiques
Voici comment on définit des opérations mathématiques en général :
Portion de code:
a = a+1
a = a-2
a = a*4
a = a/3 # Jamais de division par zéro !
a = a%7 # Le modulo % renvoie le reste d'une division euclidienne
Je vous mets aussi la forme contractée :
Portion de code:
a += 1
a -= 2
a *= 4
a /= 3
a %= 7
2) La concaténation
Pour concaténer deux ou plusieurs chaines, on utilise la méthode + (qui est un opérateur mathématique, je sais !).
Portion de code:
"Bon"+"jour !" # "Bonjour !"
Ensuite, il est possible de multiplier un nombre de fois une chaine.
Portion de code:
"Go ! "*3 # "Go ! Go ! Go ! "
"Go !"*0 # Renvoie la chaine vide ""
III) Les booléens et les opérateurs logiques
Je donnerais des exemples concrets après avoir donné les formules logiques sur les booléens.
1) and(et)
Portion de code:
true and true # true
false and false # false
true and false # false
nb>=2 and nb<=5 # 2..5
2) or(ou)
Portion de code:
true or true
false or false
true or false
nb<=2 or nb>=15
3) not(non)
Portion de code:
not true # false
not false # true
not nb>=0 # nb<0
IV) Les différentes portées des variables
Je donnerais la portée et la syntaxe en fonction des variables.
1) Les variables locales
Elles ne s'utilisent que depuis là où elles sont définies.
Portion de code:
var = 0
2) Les variables d'instance ou attributs
Elles ne s'utilisent que dans la classe où elles sont définies et dans les classes dérivées.
Portion de code:
@var = 0
3) Les variables de classe
Ce sont des constantes de classe s'appliquant à l'ensemble des attributs d'une génération de classes.
Portion de code:
@@var = 0
4) Les variables globales
Ce sont des variables qui peuvent s'appeler et se rédéfinir de n'importe où. Elles sont à éviter autant que possible !
Portion de code:
$var = 0
5) Les constantes
Ce sont des variables gardant une valeur fixe.
Portion de code:
VAR = 0
V) Les instructions d'entrée-sortie
1) Pour afficher un message
Portion de code:
print "Bonjour !" # Sans saut de ligne
puts "Bonjour !" # Avec saut de ligne
2) Pour entrer une valeur
Portion de code:
print "Quel est votre age ?"
age = gets.chomp # Renvoyer automatiquement une chaine de caractère
puts "Vous avez #{age} ans."
print "Quel est votre pseudo ?"
age = gets
puts "Vous pseudo est "+pseudo.to_s # Si on doit convertir
Voilà, c'est tout pour les variables !
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:
Portion de 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 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:
Portion de 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'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:
Portion de 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 :
Portion de code:
fichier.gsub("oui", "true")
Ici, tous les "oui", seront transformés en "true"
Ceci fait on va séparer les instructions comme suit:
Portion de code:
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:
Portion de 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:
Portion de 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 = 24
Et pour la fin, on met cette ligne de code:
Portion de 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é:
Portion de 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
Portion de code:
$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:
Portion de 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:
Portion de 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 :
Portion de code:
fichier.write("Police=Arial;
Taille=24)
Et on referme le fichier pour enregistrer les modifications...
Portion de 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éé :
Portion de code:
print "Le fichier 'Params.txt' a été créé avec succès!"
puis, fini le rescue, on met la touche finale!! :
Portion de code:
end
Donc, dans le rescue on a:
Portion de 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!!
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...