× Bienvenue dans le forum Kunena!

Monogame Sauvegarde

Plus d'informations
il y a 1 semaine 6 jours #54 par JLKM
Monogame Sauvegarde a été créé par JLKM
Bonjour à tous
je n'ai pas réussi à le mettrer
j'ai un projet sous Monogame terminé mais, je ne sais comment sauvegarder ma progression ni comment restaurer.
(sauvegarde du Level terminé pour passer au suivant sans recommencer au début).

la solution doit être soit au niveau de la serialisation d'un fichier contenant les données du jeu qu'on pourra sauvegarder et restaurer mais
je n'ai pas réussi à le mettre en place.

autre possibilité, avec le monogame pipeline. idem cela ne fonctionne pas.

quelqu'un peut-il m'aider ?

Merci d'avance

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 1 semaine 4 jours - il y a 1 semaine 4 jours #55 par jay81
Réponse de jay81 sur le sujet Monogame Sauvegarde
Bonjour,

Ce n'est pas très clair, mais si je comprends bien, ton problème consiste à sauvegarder dans un fichier et à le lire pour récupérer la progression en jeu ?
Je n'ai jamais vraiment utilisé Mono, pour ma part, je suis resté à XNA, mais peut-être que Gondulzak pourra t'aider.
Sous XNA, les fichiers de sauvegarde étaient stockés dans Mes Documents afin d'être modifiables (sécurité) et le plus simple était d'utiliser la serialisation pour tout stocker dans un fichier XML. De mémoire, il y avait un code-type à rentrer mais c'était assez simple. Il suffisait ensuite simplement de lister les variables et XNA se chargeait de tout. Je ne sais pas si cela a été adapté sous Mono ?

Cela ressemblait à ça (pour le jeu Aron HD) :

public class SaveGameData
        {
            public int level1, level2, level3;
            public int coeursMax1, coeursMax2, coeursMax3;
            public int evolution1, evolution2, evolution3;
            public int clefs1, clefs2, clefs3;
            public int scriptnumberMax1, scriptnumberMax2, scriptnumberMax3;
            public int persoControlle1, persoControlle2, persoControlle3;
            public int switchPersos1, switchPersos2, switchPersos3;
            public int difficulty;
            public int langue;
            public int pleinecran;
            public Keys keyX, keyY, keyA, keyB, keyStart, keyUp, keyDown, keyLeft, keyRight;
            //public Scores[] savedScore;

            public SaveGameData()
            {
                level1 = level2 = level3 = 0;
                coeursMax1 = coeursMax2 = coeursMax3 = 0;
                evolution1 = evolution2 = evolution3 = 0;
                clefs1 = clefs2 = clefs3 = 0;
                scriptnumberMax1 = scriptnumberMax2 = scriptnumberMax3 = 0;
                persoControlle1 = persoControlle2 = persoControlle3 = 0;
                switchPersos1 = switchPersos2 = switchPersos3 = 0;
                difficulty = Constantes.Normal;
                keyX = Keys.X;
                keyY = Keys.W;
                keyA = Keys.C;
                keyB = Keys.V;
                keyStart = Keys.Enter;
                keyUp = Keys.Up;
                keyDown = Keys.Down;
                keyLeft = Keys.Left;
                keyRight = Keys.Right;

                pleinecran = Constantes.window;
                langue = Constantes.english;

                /*savedScore = new Scores[Constantes.MaxLevel + 1];
                for (int i = 0; i <= Constantes.MaxLevel; i++)
                {
                    savedScore[i] = new Scores();
                }*/

            }

        }

        /// <summary>
        /// This method serializes a data object into
        /// the StorageContainer for this game.
        /// </summary>
        /// <param name="device"></param>
        public void DoSaveGame(StorageDevice device)
        {
            /* SignedInGamer gamer = Gamer.SignedInGamers[controllingPlayer];

            if (gamer == null || gamer.IsGuest)
            {
                if (!Guide.IsVisible)
                {
                    Guide.ShowSignIn(1, false);
                    //jeu.initializeStorageDevice = true;
                    jeu.GameLoadRequested = true;
                }
            }
            else
            { */
                // Create the data to save.
                SaveGameData data = new SaveGameData();

                data.level1 = jeu.level1;
                data.level2 = jeu.level2;
                data.level3 = jeu.level3;
                data.coeursMax1 = jeu.coeursMax1;
                data.coeursMax2 = jeu.coeursMax2;
                data.coeursMax3 = jeu.coeursMax3;
                data.evolution1 = jeu.evolution1;
                data.evolution2 = jeu.evolution2;
                data.evolution3 = jeu.evolution3;
                data.clefs1 = jeu.clefs1;
                data.clefs2 = jeu.clefs2;
                data.clefs3 = jeu.clefs3;
                data.scriptnumberMax1 = jeu.scriptnumberMax1;
                data.scriptnumberMax2 = jeu.scriptnumberMax2;
                data.scriptnumberMax3 = jeu.scriptnumberMax3;
                data.persoControlle1 = jeu.persoControlle1;
                data.persoControlle2 = jeu.persoControlle2;
                data.persoControlle3 = jeu.persoControlle3;
                data.switchPersos1 = jeu.switchPersos1;
                data.switchPersos2 = jeu.switchPersos2;
                data.switchPersos3 = jeu.switchPersos3;
                data.difficulty = jeu.difficulty;
                data.pleinecran = jeu.pleinecran;
                data.langue = jeu.langue;

                data.keyX = input.keyX;
                data.keyY = input.keyY;
                data.keyA = input.keyA;
                data.keyB = input.keyB;
                data.keyStart = input.keyStart;
                data.keyUp = input.keyUp;
                data.keyDown = input.keyDown;
                data.keyLeft = input.keyLeft;
                data.keyRight = input.keyRight;
                
                //data.savedScore = scores;

                // Open a storage container.

                IAsyncResult result = device.BeginOpenContainer("Aron PC", null, null);

                // Wait for the WaitHandle to become signaled.
                result.AsyncWaitHandle.WaitOne();

                container = device.EndOpenContainer(result);

                // Close the wait handle.
                result.AsyncWaitHandle.Close();


                string filename = "savegame.sav";

                // Check to see whether the save exists.
                if (container.FileExists(filename))
                    // Delete it so that we can create one fresh.
                    container.DeleteFile(filename);

                // Create the file.
                Stream stream = container.CreateFile(filename);


                // Convert the object to XML data and put it in the stream.

                XmlSerializer serializer = new XmlSerializer(typeof(SaveGameData));

                serializer.Serialize(stream, data);

                
                // Close the file.
                stream.Close();

                // Dispose the container, to commit changes.
                container.Dispose();

                jeu.GameSaveRequested = false;

                Debug.WriteLine("Savefile saved");
           // }
        }

        /// <summary>
        /// This method loads a serialized data object
        /// from the StorageContainer for this game.
        /// </summary>
        /// <param name="device"></param>
        public void DoLoadGame(StorageDevice device)
        {
            /*SignedInGamer gamer = Gamer.SignedInGamers[controllingPlayer];


            if (gamer == null || gamer.IsGuest)
            {
                if (!Guide.IsVisible)
                {
                    Guide.ShowSignIn(1, false);
                    //jeu.initializeStorageDevice = true;
                    jeu.GameLoadRequested = true;
                }

            }
            else
            { */
                IAsyncResult result = device.BeginOpenContainer("Aron PC", null, null);

                // Wait for the WaitHandle to become signaled.
                result.AsyncWaitHandle.WaitOne();

                container = device.EndOpenContainer(result);

                // Close the wait handle.
                result.AsyncWaitHandle.Close();


                string filename = "savegame.sav";

                // Check to see whether the save exists.
                if (!container.FileExists(filename))
                {
                    // Notify the user there is no save.
                    Debug.WriteLine("No savefile found");
                    jeu.GameLoadRequested = false;

                    // If not, dispose of the container and return.

                    jeu.level1 = jeu.level2 = jeu.level3 = 1;
                    jeu.coeursMax1 = jeu.coeursMax2 = jeu.coeursMax3 = 3;
                    jeu.evolution1 = jeu.evolution2 = jeu.evolution3 = 0;
                    jeu.clefs1 = jeu.clefs2 = jeu.clefs3 = 0;
                    jeu.scriptnumberMax1 = jeu.scriptnumberMax2 = jeu.scriptnumberMax3 = 0;
                    jeu.persoControlle1 = jeu.persoControlle2 = jeu.persoControlle3 = Constantes.Aron;
                    jeu.switchPersos1 = jeu.switchPersos2 = jeu.switchPersos3 = 0;
                    jeu.difficulty = Constantes.Easy;
                    input.keyX = Keys.X;
                    input.keyY = Keys.W;
                    input.keyA = Keys.C;
                    input.keyB = Keys.V;
                    input.keyStart = Keys.Enter;
                    input.keyUp = Keys.Up;
                    input.keyDown = Keys.Down;
                    input.keyLeft = Keys.Left;
                    input.keyRight = Keys.Right;

                    jeu.pleinecran = Constantes.window;
                    jeu.langue = Constantes.english;                  

                    container.Dispose();
                    return;
                }


                // Open the file.
                Stream stream = container.OpenFile(filename, FileMode.Open);

                // Read the data from the file.

                // Convert the object to XML data and put it in the stream.

                XmlSerializer serializer = new XmlSerializer(typeof(SaveGameData));

                SaveGameData data = (SaveGameData)serializer.Deserialize(stream);

                // Close the file.
                stream.Close();

                // Dispose the container.
                container.Dispose();

                // Report the data to the game
                jeu.level1 = data.level1;
                jeu.level2 = data.level2;
                jeu.level3 = data.level3;
                jeu.coeursMax1 = data.coeursMax1;
                jeu.coeursMax2 = data.coeursMax2;
                jeu.coeursMax3 = data.coeursMax3;
                jeu.evolution1 = data.evolution1;
                jeu.evolution2 = data.evolution2;
                jeu.evolution3 = data.evolution3;
                jeu.clefs1 = data.clefs1;
                jeu.clefs2 = data.clefs2;
                jeu.clefs3 = data.clefs3;
                jeu.scriptnumberMax1 = data.scriptnumberMax1;
                jeu.scriptnumberMax2 = data.scriptnumberMax2;
                jeu.scriptnumberMax3 = data.scriptnumberMax3;
                jeu.persoControlle1 = data.persoControlle1;
                jeu.persoControlle2 = data.persoControlle2;
                jeu.persoControlle3 = data.persoControlle3;
                jeu.switchPersos1 = data.switchPersos1;
                jeu.switchPersos2 = data.switchPersos2;
                jeu.switchPersos3 = data.switchPersos3;

                jeu.difficulty = data.difficulty;
                jeu.pleinecran = data.pleinecran;
                jeu.langue = data.langue;

                input.keyX = data.keyX;
                input.keyY = data.keyY;
                input.keyA = data.keyA;
                input.keyB = data.keyB;
                input.keyStart = data.keyStart;
                input.keyUp = data.keyUp;
                input.keyDown = data.keyDown;
                input.keyLeft = data.keyLeft;
                input.keyRight = data.keyRight;
               
                                
                //scores = data.savedScore;

                jeu.GameLoadRequested = false;

                Debug.WriteLine("Savefile loaded");
          //  }

        }
Dernière édition: il y a 1 semaine 4 jours par jay81.

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 1 semaine 4 jours #57 par JLKM
Réponse de JLKM sur le sujet Monogame Sauvegarde
Merci de votre aide

sous XNA, il existait une bibliothèque Storage utilisée pour effectuer ce type d'opérations. N'est plus implémentée avec Monogame.

j

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 1 semaine 1 jour #59 par jay81
Réponse de jay81 sur le sujet Monogame Sauvegarde
Sinon, j'imagine qu'on doit encore pouvoir ouvrir un fichier en binaire pour l'éditer comme en C++ ?

Dans ce cas-là, les exemples des tutos en C++ pourraient peut-être t'aider ?

Bon courage et tiens-nous au courant de tes avancées. ;)

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 1.137 secondes
Propulsé par Kunena