[C#]Enregistrement des préférences dans un fichier XML
Bonjour à toutes et à tous ! :)
Je travaille actuellement sur un projet de jeu vidéo 2D. Celui-ci est bientôt terminé, et j'aimerais passer à l'étape de l'enregistrement des préférences de l'utilisateur.
Pour être plus clair, le jeu dispose d'un menu permettant de changer la résolution, la configuration des touches ou même de la partie. Afin que l'utilisateur ne soit pas obligé à chaque démarrage du jeu de changer la résolution (par exemple), j'aimerais stocker ces informations dans un fichier (XML ?) puis les restituer.
Actuellement, toutes les infos que je voudrais enregistrer sont contenues dans une classe "Config" à part en static. L'ensemble des classes du projet a accès à toutes les variables de ce fichier "Config". Il me suffirait donc de charger un fichier XML, plutôt que de mettre des valeurs par défaut à ces variables.
Avant de demander de l'aide ici, je me suis renseigné sur ce qu'on pouvait faire en XML, et j'ai découvert la classe "System.XML" qui permet facilement de lire et d'écrire dans des fichiers. Voici ce que j'ai fait pour m'entrainer un peu:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| // Ecriture du fichier
XmlTextWriter fichier = new XmlTextWriter("config.xml", null);
fichier.WriteStartDocument();
fichier.WriteWhitespace("\n");
fichier.WriteWhitespace("\t");
fichier.WriteStartElement("resolution");
fichier.WriteWhitespace("\n");
fichier.WriteWhitespace("\t\t");
fichier.WriteStartElement("largeur");
fichier.WriteString("1280");
fichier.WriteEndElement();
fichier.WriteWhitespace("\n");
fichier.WriteWhitespace("\t\t");
fichier.WriteStartElement("hauteur");
fichier.WriteString("1024");
fichier.WriteEndElement();
fichier.WriteWhitespace("\n");
fichier.WriteWhitespace("\t");
fichier.WriteEndElement();
fichier.WriteEndDocument();
fichier.Close(); |
Ce code produit un fichier XML avec ce contenu:
Code:
1 2 3 4 5 6
|
<?xml version="1.0"?>
<resolution>
<largeur>1280</largeur>
<hauteur>1024</hauteur>
</resolution> |
Maintenant, je passe à l'étape de la lecture et j'ai fait ceci:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
// Lecture du fichier
XmlTextReader config = new XmlTextReader("config.xml");
config.WhitespaceHandling = WhitespaceHandling.None;
int[] resolution = new int[2];
while (config.Read())
{
if (config.LocalName == "largeur")
resolution[0] = Convert.ToInt32(config.ReadString());
else if(config.LocalName == "hauteur")
resolution[1] = Convert.ToInt32(config.ReadString());
} |
Ce code fonctionne bien, le tableau "resolution" contient bien les deux valeurs, mais est-ce vraiment la meilleur façon de procéder ? J'ai beaucoup de variables différentes, et je me vois mal enchaîner les "else if" dans la boucle principale.
De plus, à chaque modification par l'utilisateur via le menu, il faudra réécrire le fichier XML, mais devrais-je tout réécrire où il existe un moyen de changer uniquement la valeur entre telle ou telle balise ?
Maintenant, est-ce que XML est le meilleur moyen d'arriver à mes fins ? Comment font les jeux commerciaux pour enregistrer les préférences de ses utilisateurs ?
Merci d'avance pour vos réponses ! :)
Bonne soirée ;)