//Funtie om XML bestand in te laden, daarna kan je de vastgelegde variablen in deze klasse gebruiken public void ReadXML() { //Laad het XML bestand in een document object XDocument doc = XDocument.Load(this.path); //Initieert de variablen gameHighscores = new List<GameHighscores>(); gameObjects = new List<GameObject>(); //Voert query uit op het XML document om de properties te laden in een var var lproperties = from r in doc.Descendants("properties") select new { Title = r.Element("title").Value, Difficulty = r.Element("difficulty").Value }; //Ditzelfde voor highscores var highscores = from r in doc.Descendants("highscore") select new { Name = r.Element("name").Value, DateTime = r.Element("datetime").Value, //Score wordt direct geconverteert naar een int omdat deze ook zo wordt weggeschreven Score = Int32.Parse(r.Element("score").Value), }; //en voor object var items = from r in doc.Descendants("object") select new { Type = r.Element("type").Value, //Directe conversie naar int omdat deze ook zo wordt weggeschreven X = Int32.Parse(r.Element("x").Value), Y = Int32.Parse(r.Element("y").Value)//, //Hieronder volgen dynamische gegevens en is vaak null, hier moet ik nog verder naar kijken ~jonathan //Movingspeed = Int32.Parse(r.Element("movingspeed").Value), //Slowdown = Int32.Parse(r.Element("slowdown").Value) }; //Voegt de gameproperties toe aan de variable gameProperties foreach (var property in lproperties) { gameProperties = new GameProperties(property.Title, property.Difficulty); } //Voegt alle highscores toe in een List foreach (var highscore in highscores) { gameHighscores.Add(new GameHighscores(highscore.Name, highscore.DateTime, highscore.Score)); } //Voegt alle gameObjecten toe in een List foreach (var gameObject in items) { switch (gameObject.Type) { case "Player": //gameObjects.Add(new Player(new Point(gameObject.X, gameObject.Y))); break; case "Car": //gameObjects.Add(new ExplodingObstacle(new Point(20, 20), "../Player.png")); break; case "Cyclist": //gameObjects.Add(new FollowingObstacle(new Point(20, 20), "../Player.png")); break; case "TrafficController": //gameObjects.Add(new StaticObstacle(new Point(20, 20), "../Player.png")); break; case "Freshmen": //SlowingObstacle sb = new SlowingObstacle(new Point(20, 20)) //sb.MovingSpeed = 10; //gameObjects.Add(sb); break; } } }
public void saveLevel_Click(object sender, EventArgs e) { if (level == null) { //Als nieuw level string dialog = showPropertyDialog("Set properties for Level"); if (dialog != "") { string[] returnValues = dialog.Split(new string[] { "|" }, StringSplitOptions.None); string title = returnValues[0].ToString(); string difficulty = returnValues[1].ToString(); string file; if (System.Diagnostics.Debugger.IsAttached) file = "../levels/" + title + ".xml"; else file = AppDomain.CurrentDomain.BaseDirectory + "/levels/" + title + ".xml"; if (!File.Exists(file)) { level = new XMLParser(file); GameProperties gameProperties = new GameProperties(title, difficulty); level.gameProperties = gameProperties; level.gameObjects = gameObjects; level.WriteXML(); modelEditor.gamePanel.Invalidate(); } else MessageBox.Show("Sorry, '" + title + "' already exist. Try again with another level name."); } } else { // Als Edit level level.gameObjects = gameObjects; level.WriteXML(); MessageBox.Show("Saved changes to " + level.gameProperties.title); } }
//Deze functie schrijft een XML file weg //Geef hier de gameproperties mee in het objecdt GameProperties, vervolgens een List met GameObjects daarna eenzelfde lijst voor Highscores public void WriteXML(GameProperties gameProperties, List<GameObject> gameObjects, List<GameHighscores> gameHighscores) { //Instellingen voor XML voor een juiste opmaak XmlWriterSettings settings = new XmlWriterSettings(); settings.Indent = true; settings.OmitXmlDeclaration = true; settings.NewLineOnAttributes = false; settings.IndentChars = " "; //XMLwriter aanmaken XmlWriter xmlWriter = XmlWriter.Create(this.path, settings); xmlWriter.WriteStartDocument(); xmlWriter.WriteStartElement("level"); xmlWriter.WriteStartElement("properties"); xmlWriter.WriteStartElement("title"); xmlWriter.WriteValue(gameProperties.title); //Title xmlWriter.WriteEndElement(); xmlWriter.WriteStartElement("difficulty"); xmlWriter.WriteValue(gameProperties.difficulty); //Difficulty xmlWriter.WriteEndElement(); xmlWriter.WriteEndElement(); xmlWriter.WriteStartElement("items"); foreach (GameObject gameObject in gameObjects) { xmlWriter.WriteStartElement("object"); string gameObjectType = ""; if (gameObject is Player) { gameObjectType = "Player"; } else if (gameObject is ExplodingObstacle) { gameObjectType = "Car"; } else if (gameObject is MovingExplodingObstacle) { gameObjectType = "Cyclist"; } else if (gameObject is StaticObstacle) { gameObjectType = "TrafficController"; } else if (gameObject is SlowingObstacle) { gameObjectType = "Freshmen"; } xmlWriter.WriteStartElement("type"); xmlWriter.WriteValue(gameObjectType); //Type xmlWriter.WriteEndElement(); xmlWriter.WriteStartElement("x"); xmlWriter.WriteValue(gameObject); //X positie xmlWriter.WriteEndElement(); xmlWriter.WriteStartElement("y"); xmlWriter.WriteValue(gameObject); //Y positie xmlWriter.WriteEndElement(); xmlWriter.WriteEndElement(); } xmlWriter.WriteEndElement(); xmlWriter.WriteStartElement("highscores"); foreach(GameHighscores gameHighscore in gameHighscores) { xmlWriter.WriteStartElement("highscore"); xmlWriter.WriteStartElement("name"); xmlWriter.WriteValue(gameHighscore.name); //Name xmlWriter.WriteEndElement(); xmlWriter.WriteStartElement("datetime"); xmlWriter.WriteValue(DateTime.Now); //DateTime xmlWriter.WriteEndElement(); xmlWriter.WriteStartElement("score"); xmlWriter.WriteValue(gameHighscore.score); //Score xmlWriter.WriteEndElement(); xmlWriter.WriteEndElement(); } xmlWriter.WriteEndElement(); xmlWriter.WriteEndDocument(); xmlWriter.Close(); //Sluiten van XMLWriter, dit is ook het moment dat het bestand wordt weggeschreven }
//Funtie om XML bestand in te laden, daarna kan je de vastgelegde variablen in deze klasse gebruiken public bool ReadXML() { XDocument doc; try { doc = XDocument.Load(this.path); } catch { return false; } //Initieert de variablen gameHighscores = new List<GameHighscore>(); gameObjects = new List<GameObject>(); //Voert query uit op het XML document om de properties te laden in een var var lproperties = from r in doc.Descendants("properties") select new { Title = r.Element("title").Value, Difficulty = r.Element("difficulty").Value }; //Ditzelfde voor highscores var highscores = from r in doc.Descendants("highscore") select new { Name = r.Element("name").Value, DateTime = r.Element("datetime").Value, //Score wordt direct geconverteert naar een int omdat deze ook zo wordt weggeschreven Score = Int32.Parse(r.Element("score").Value), }; //en voor object var items = from r in doc.Descendants("object") select new { Type = r.Element("type").Value, //Directe conversie naar int omdat deze ook zo wordt weggeschreven X = Int32.Parse(r.Element("x").Value), Y = Int32.Parse(r.Element("y").Value), Height = Int32.Parse(r.Element("height").Value), Width = Int32.Parse(r.Element("width").Value), //If statements voor dynamische gegevens in xml <object> Movingspeed = (r.Element("movingspeed") != null) ? Int32.Parse(r.Element("movingspeed").Value): 0, Slowdown = (r.Element("slowingspeed") != null) ? Int32.Parse(r.Element("slowingspeed").Value): 0, Smart = (r.Element("smart") != null) ? bool.Parse(r.Element("smart").Value) : false, Image = (r.Element("image") != null) ? r.Element("image").Value : "" }; //Voegt de gameproperties toe aan de variable gameProperties foreach (var property in lproperties) { gameProperties = new GameProperties(property.Title, property.Difficulty); } //Voegt alle highscores toe in een List highscores.OrderBy(o => o.Score); foreach (var highscore in highscores) { gameHighscores.Add(new GameHighscore(highscore.Name, highscore.DateTime, highscore.Score)); } //Sorteert highscores op volgorde van behaalde score gameHighscores = gameHighscores.OrderBy(highscore => highscore.score).ToList(); //Hardcoded start en eindpunt toevoegen aan level gameObjects.Add(new Checkpoint(new Point(750, 400), Resources.IconWIN, 80, 80, false)); gameObjects.Add(new Checkpoint(new Point(5, -5), Resources.IconSP, 80, 80, true)); //Voegt alle gameObjecten toe in een List foreach (var gameObject in items) { switch (gameObject.Type) { case "ExplodingObstacle": gameObjects.Add(new ExplodingObstacle(new Point(gameObject.X, gameObject.Y), gameObject.Height, gameObject.Width)); break; case "MovingExplodingObstacle": MovingExplodingObstacle moe = new MovingExplodingObstacle(new Point(gameObject.X, gameObject.Y), gameObject.Height, gameObject.Width); moe.MovingSpeed = gameObject.Movingspeed; moe.IsSmart = gameObject.Smart; gameObjects.Add(moe); break; case "StaticObstacle": gameObjects.Add(new StaticObstacle(new Point(gameObject.X, gameObject.Y), gameObject.Height, gameObject.Width)); break; case "SlowingObstacle": SlowingObstacle sb = new SlowingObstacle(new Point(gameObject.X, gameObject.Y), gameObject.Height, gameObject.Width); sb.MovingSpeed = gameObject.Movingspeed; sb.SlowingSpeed = gameObject.Slowdown; sb.IsSmart = gameObject.Smart; gameObjects.Add(sb); break; } } return true; }
//Funtie om XML bestand in te laden, daarna kan je de vastgelegde variablen in deze klasse gebruiken public void ReadXML() { //Laad het XML bestand in een document object XDocument doc = XDocument.Load(this.path); //Initieert de variablen gameHighscores = new List <GameHighscores>(); gameObjects = new List <GameObject>(); //Voert query uit op het XML document om de properties te laden in een var var lproperties = from r in doc.Descendants("properties") select new { Title = r.Element("title").Value, Difficulty = r.Element("difficulty").Value }; //Ditzelfde voor highscores var highscores = from r in doc.Descendants("highscore") select new { Name = r.Element("name").Value, DateTime = r.Element("datetime").Value, //Score wordt direct geconverteert naar een int omdat deze ook zo wordt weggeschreven Score = Int32.Parse(r.Element("score").Value), }; //en voor object var items = from r in doc.Descendants("object") select new { Type = r.Element("type").Value, //Directe conversie naar int omdat deze ook zo wordt weggeschreven X = Int32.Parse(r.Element("x").Value), Y = Int32.Parse(r.Element("y").Value) //, //Hieronder volgen dynamische gegevens en is vaak null, hier moet ik nog verder naar kijken ~jonathan //Movingspeed = Int32.Parse(r.Element("movingspeed").Value), //Slowdown = Int32.Parse(r.Element("slowdown").Value) }; //Voegt de gameproperties toe aan de variable gameProperties foreach (var property in lproperties) { gameProperties = new GameProperties(property.Title, property.Difficulty); } //Voegt alle highscores toe in een List foreach (var highscore in highscores) { gameHighscores.Add(new GameHighscores(highscore.Name, highscore.DateTime, highscore.Score)); } //Voegt alle gameObjecten toe in een List foreach (var gameObject in items) { switch (gameObject.Type) { case "Player": //gameObjects.Add(new Player(new Point(gameObject.X, gameObject.Y))); break; case "Car": //gameObjects.Add(new ExplodingObstacle(new Point(20, 20), "../Player.png")); break; case "Cyclist": //gameObjects.Add(new FollowingObstacle(new Point(20, 20), "../Player.png")); break; case "TrafficController": //gameObjects.Add(new StaticObstacle(new Point(20, 20), "../Player.png")); break; case "Freshmen": //SlowingObstacle sb = new SlowingObstacle(new Point(20, 20)) //sb.MovingSpeed = 10; //gameObjects.Add(sb); break; } } }
//Deze functie schrijft een XML file weg //Geef hier de gameproperties mee in het objecdt GameProperties, vervolgens een List met GameObjects daarna eenzelfde lijst voor Highscores public void WriteXML(GameProperties gameProperties, List <GameObject> gameObjects, List <GameHighscores> gameHighscores) { //Instellingen voor XML voor een juiste opmaak XmlWriterSettings settings = new XmlWriterSettings(); settings.Indent = true; settings.OmitXmlDeclaration = true; settings.NewLineOnAttributes = false; settings.IndentChars = " "; //XMLwriter aanmaken XmlWriter xmlWriter = XmlWriter.Create(this.path, settings); xmlWriter.WriteStartDocument(); xmlWriter.WriteStartElement("level"); xmlWriter.WriteStartElement("properties"); xmlWriter.WriteStartElement("title"); xmlWriter.WriteValue(gameProperties.title); //Title xmlWriter.WriteEndElement(); xmlWriter.WriteStartElement("difficulty"); xmlWriter.WriteValue(gameProperties.difficulty); //Difficulty xmlWriter.WriteEndElement(); xmlWriter.WriteEndElement(); xmlWriter.WriteStartElement("items"); foreach (GameObject gameObject in gameObjects) { xmlWriter.WriteStartElement("object"); string gameObjectType = ""; if (gameObject is Player) { gameObjectType = "Player"; } else if (gameObject is ExplodingObstacle) { gameObjectType = "Car"; } else if (gameObject is MovingExplodingObstacle) { gameObjectType = "Cyclist"; } else if (gameObject is StaticObstacle) { gameObjectType = "TrafficController"; } else if (gameObject is SlowingObstacle) { gameObjectType = "Freshmen"; } xmlWriter.WriteStartElement("type"); xmlWriter.WriteValue(gameObjectType); //Type xmlWriter.WriteEndElement(); xmlWriter.WriteStartElement("x"); xmlWriter.WriteValue(gameObject); //X positie xmlWriter.WriteEndElement(); xmlWriter.WriteStartElement("y"); xmlWriter.WriteValue(gameObject); //Y positie xmlWriter.WriteEndElement(); xmlWriter.WriteEndElement(); } xmlWriter.WriteEndElement(); xmlWriter.WriteStartElement("highscores"); foreach (GameHighscores gameHighscore in gameHighscores) { xmlWriter.WriteStartElement("highscore"); xmlWriter.WriteStartElement("name"); xmlWriter.WriteValue(gameHighscore.name); //Name xmlWriter.WriteEndElement(); xmlWriter.WriteStartElement("datetime"); xmlWriter.WriteValue(DateTime.Now); //DateTime xmlWriter.WriteEndElement(); xmlWriter.WriteStartElement("score"); xmlWriter.WriteValue(gameHighscore.score); //Score xmlWriter.WriteEndElement(); xmlWriter.WriteEndElement(); } xmlWriter.WriteEndElement(); xmlWriter.WriteEndDocument(); xmlWriter.Close(); //Sluiten van XMLWriter, dit is ook het moment dat het bestand wordt weggeschreven }
public void TestXMLParser_Save() { GameProperties gameProperties = new GameProperties("Test Level", "easy"); List<GameObject> gameObjects; Player player; BuildGameField(out gameObjects, out player); GameHighscore gameHighscore = new GameHighscore("Test Speler", DateTime.Now.ToString(), 900); XMLParser xmlParser = new XMLParser("unitTestXML.xml"); if(xmlParser == null) Assert.Fail("NRE"); xmlParser.gameHighscores.Add(gameHighscore); xmlParser.gameProperties = gameProperties; xmlParser.gameObjects = gameObjects; if (!xmlParser.WriteXML()) Assert.Fail("Kan niet Write XML uitvoeren"); }
public void TestXMLParser_Load() { GameProperties gameProperties = new GameProperties("Test Level", "easy"); List<GameObject> gameObjects; Player player; BuildGameField(out gameObjects, out player); GameHighscore gameHighscore = new GameHighscore("Test Speler", DateTime.Now.ToString(), 900); XMLParser xmlParser = new XMLParser("unitTestXML.xml"); if (xmlParser == null) Assert.Fail("NRE"); xmlParser.gameHighscores.Add(gameHighscore); xmlParser.gameProperties = gameProperties; xmlParser.gameObjects = gameObjects; if (!xmlParser.WriteXML()) Assert.Fail("Kan niet Write XML uitvoeren"); // Reset XML xmlParser = null; xmlParser = new XMLParser("unitTestXML.xml"); if(!xmlParser.ReadXML()) Assert.Fail("Kan niet Load XML uitvoeren"); Assert.AreEqual(gameProperties, xmlParser.gameProperties, "GameProperties not equal"); // We hebben checkpoints gehardcode, dus nu even verwijderen xmlParser.gameObjects.RemoveAt(0); xmlParser.gameObjects.RemoveAt(1); Assert.AreEqual(gameObjects.Count, xmlParser.gameObjects.Count, "GameObjects not equal"); }