Bonsoir,
Je travaille actuellement sur un projet pour mes cours : je développe un Kamisado en C# avec des Winforms.
J'essaye de créer un système de sauvegarde / chargement en utilisant XmlSerializer mais je bloque sur un problème : j'arrive bien à créer un fichier XML mais certaines balises, qui devraient contenir des infos, sont auto-fermées.
La seule chose qui est bien sauvée est l'historique des coups, qui est un String que je récupère de ma classe Partie().
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 <?xml version="1.0"?> <Donnees xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <boardgame /> <j1 /> <j2 /> <histoCoups>Quistis (Noir) a déplacé la tour Rouge sur case Marron Linoa (Blanc) a déplacé la tour Marron sur case Bleue Quistis (Noir) a déplacé la tour Bleue sur case Marron </histoCoups> </Donnees>
Je ne comprends pas vraiment ce comportement ...
Voici ma classe Sauvegarde() :
Voici Joueur() :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Xml.Serialization; using System.Windows.Forms; namespace kamisado { public class Sauvegarde { static void Main(string[] args, Partie p) { sauver(p); } public class Donnees { public Plateau boardgame; public Joueur j1; public Joueur j2; public String histoCoups; } public static void sauver(Partie p) { DialogResult reponse = new DialogResult(); reponse = MessageBox.Show("Voulez-vous sauvegarder la partie ?"+ Environment.NewLine +"(cela effacera toute sauvegarde plus ancienne)", "Sauvegarde", MessageBoxButtons.YesNo, MessageBoxIcon.Question); if (reponse == DialogResult.Yes) { Donnees enCours = new Donnees(); enCours.boardgame = p.getPlateau(); enCours.j1 = new Joueur(); { enCours.j1.setNom(Accueil.J1.getNom()); enCours.j1.setCouleurPions(0); enCours.j1.savePoints(Accueil.J1); enCours.j1.saveTimer(Accueil.J1); } enCours.j2 = Accueil.J2; enCours.histoCoups = p.getHistoCoups(); XmlSerializer serializer = new XmlSerializer(typeof(Donnees)); var chemin = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + "\\kamisado_save.xml"; System.IO.FileStream fichier = System.IO.File.Create(chemin); serializer.Serialize(fichier, enCours); fichier.Close(); MessageBox.Show("Partie sauvegardée", "Information", MessageBoxButtons.OK,MessageBoxIcon.Information); } } } }
Si besoin, je peux mettre le code de Partie() mais il est assez long et je suppose que le problème est le même que celui qui concerne Joueur().
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace kamisado { public class Joueur { private String nom; private int couleurPions; // 0 pour noir, 1 pour blanc private int compteurPoints; private int timer; public Joueur() { // constructeur vide, sert à la classe Sauvegarde } public Joueur(String s, int n, int t) { this.nom = s; this.couleurPions = n; this.timer = t*60; this.compteurPoints = 0; } public String getNom() { return this.nom; } public void setNom(String n) { this.nom = n; } public int getCouleurPions() { return this.couleurPions; } public void setCouleurPions(int c) { this.couleurPions = c; } public int getPoints() { return this.compteurPoints; } public void setPoints() { this.compteurPoints++; } public void savePoints(Joueur j) { this.compteurPoints = j.getPoints(); } public int getTime() { return this.timer; } public void setTime() { this.timer--; } public void saveTimer(Joueur j) { this.timer = j.getTime(); } } }
Merci d'avance pour votre aide
Partager