SaveGame.cs 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. using System;
  2. using Microsoft.Xna.Framework.Storage;
  3. using System.Xml.Serialization;
  4. using System.IO;
  5. using Microsoft.Xna.Framework;
  6. namespace Storage
  7. {
  8. [Serializable]
  9. public struct SaveGame
  10. {
  11. public string Name;
  12. public int HiScore;
  13. public DateTime Date;
  14. [NonSerialized]
  15. public int DontKeep;
  16. }
  17. public class SaveGameStorage
  18. {
  19. private const string CONTAINER_NAME = "StorageGame";
  20. public SaveGame Load()
  21. {
  22. SaveGame ret = new SaveGame();
  23. var device = new StorageDevice(PlayerIndex.One);
  24. StorageContainer? container = null;
  25. Stream? fileStream = null;
  26. try
  27. {
  28. // Open a storage container
  29. container = device.OpenContainer(CONTAINER_NAME);
  30. // Open the file
  31. fileStream = container.OpenFile("savegame.xml", FileMode.OpenOrCreate, FileAccess.Read);
  32. // Read the data from the file
  33. XmlSerializer serializer = new XmlSerializer(typeof(SaveGame));
  34. var data = serializer.Deserialize(fileStream);
  35. if (data is SaveGame saveGame)
  36. {
  37. ret = saveGame;
  38. }
  39. else
  40. {
  41. ret = new SaveGame
  42. {
  43. Name = "Default",
  44. HiScore = 0,
  45. Date = DateTime.Now,
  46. DontKeep = 0
  47. };
  48. }
  49. }
  50. finally
  51. {
  52. if (fileStream != null)
  53. fileStream.Close();
  54. if (container != null)
  55. container.Dispose();
  56. }
  57. return ret;
  58. }
  59. public void Save(SaveGame sg)
  60. {
  61. var device = new StorageDevice(PlayerIndex.One);
  62. StorageContainer? container = null;
  63. Stream? fileStream = null;
  64. try
  65. {
  66. // Open a storage container
  67. container = device.OpenContainer(CONTAINER_NAME);
  68. // Open the file
  69. fileStream = container.OpenFile("savegame.xml", FileMode.OpenOrCreate, FileAccess.ReadWrite);
  70. // Convert the object to XML data and put it in the stream
  71. XmlSerializer serializer = new XmlSerializer(typeof(SaveGame));
  72. serializer.Serialize(fileStream, sg);
  73. }
  74. finally
  75. {
  76. if (fileStream != null)
  77. fileStream.Close();
  78. if (container != null)
  79. container.Dispose();
  80. }
  81. }
  82. }
  83. }