private static GameState GameState(XElement state) { var gs = from g in state.Elements("GameState") select new { AIPolice = Convert.ToBoolean(g.Element("AIPolice").Value), ThiefPlayers = ThiefPlayers(g.Element("ThiefPlayers")), PolicePlayer = PolicePlayer(g.Element("PolicePlayer")), CurrentPlayerDiceRoll = Convert.ToInt32(g.Element("CurrentDiceRoll").Value), CurrentPlayerIndex = Convert.ToInt32(g.Element("CurrentPlayerIndex").Value), TravelAgency = Convert.ToInt32(g.Element("TravelAgency").Attribute("Money").Value), GameRunning = Convert.ToBoolean(g.Element("GameRunning").Value) }; GameState s = new GameState(); foreach (var g in gs) { s.Board = LoadBoard(); s.AIPolice = g.AIPolice; s.ThiefPlayers = g.ThiefPlayers; s.PolicePlayer = g.PolicePlayer; s.CurrentPlayerDiceRoll = g.CurrentPlayerDiceRoll; s.CurrentPlayerIndex = g.CurrentPlayerIndex; s.GameRunning = g.GameRunning; ((TravelAgency)s.Board[s.Board.SpecialBlocks[BlockType.TravelAgency][0].X, s.Board.SpecialBlocks[BlockType.TravelAgency][0].Y]).Money = g.TravelAgency; s.Board.addPiece(s.ThiefPlayers.Select<ThiefPlayer, Piece>(player => player.Piece).ToList()); s.Board.addPiece(s.PolicePlayer.getControlledPieces()); } return s; }
public void Save(GameState state) { // Disable the watcher while saving, to avoid our own save // causing the game to reload watcher.EnableRaisingEvents = false; Saver.Save(filename, state); lastSave = File.GetLastWriteTime(filename); watcher.EnableRaisingEvents = true; }
private static XElement XmlGameState(GameState state) { XElement s = new XElement("GameState"); s.Add(new XElement("AIPolice", state.AIPolice)); s.Add(XmlThiefPlayers(state.ThiefPlayers)); s.Add(XmlPolicePlayer(state.PolicePlayer)); s.Add(new XElement("CurrentDiceRoll", state.CurrentPlayerDiceRoll)); s.Add(new XElement("GameRunning", state.GameRunning)); s.Add(new XElement("CurrentPlayerIndex", state.CurrentPlayerIndex)); s.Add(new XElement("TravelAgency", new XAttribute("Money", ((TravelAgency)state.Board[state.Board.SpecialBlocks[BlockType.TravelAgency][0]]).Money))); return s; }
public static void Save(string filename, GameState state) { // Purge with fire while (true) { try { XDocument x = new XDocument(); x.Add(new XElement("Save", XmlGameState(state))); x.Save(filename); break; } catch (Exception) {} } }
private void newGame(int nrOfPlayers) { State = new GameState(); if (nrOfPlayers < 2) throw new ArgumentException("Must have at least two players"); State.Board = Loader.LoadBoard(); addThiefPlayers(nrOfPlayers - 1); addPolicePlayer(nrOfPlayers); ruleEngine = new RuleEngine(State.Board); logicEngine = new LogicEngine(State.Board); State.CurrentPlayerDiceRoll = LogicEngine.diceRoll(); // Initial player roll State.CurrentPlayerIndex = State.Players.Count - 1; if (OnReloadedState != null) OnReloadedState(); }