public bool LoadGame(string fileName, out Board newBoard, out int playerOnMove, out int player1settings, out int player2settings) { newBoard = null; player1settings = -1; player2settings = -1; playerOnMove = 1; if (fileName == null) { return(false); } int pointer = 0; List <int[]> loadedMoves = new List <int[]>(); try { XmlDocument document = new XmlDocument(); document.Load(fileName); XmlNode root = document.DocumentElement; foreach (XmlNode level1node in root) { switch (level1node.Name) { case "Players": XmlElement player = (XmlElement)level1node; player1settings = int.Parse(player.GetAttribute("Player1")); player2settings = int.Parse(player.GetAttribute("Player2")); break; case "Moves": XmlElement moves = (XmlElement)level1node; pointer = int.Parse(moves.GetAttribute("Pointer")); foreach (XmlNode level2node in level1node) { XmlElement oneMove = (XmlElement)level2node; int fromX = int.Parse(oneMove.GetAttribute("FromX")); int fromY = int.Parse(oneMove.GetAttribute("FromY")); int toX = int.Parse(oneMove.GetAttribute("ToX")); int toY = int.Parse(oneMove.GetAttribute("ToY")); if (ValidateMove(fromX, fromY, toX, toY)) { loadedMoves.Add(new int[] { fromX, fromY, toX, toY }); } else { return(false); } } break; } } } catch { return(false); } if (player1settings < 0 || player1settings > 4 || player2settings < 0 || player2settings > 4) { return(false); } if (pointer > loadedMoves.Count) { return(false); } newBoard = new Board(); Rules rules = new Rules(); rules.NaplnBoard(newBoard); foreach (int[] move in loadedMoves) { bool validMoveFound = false; foreach (int[] validMove in rules.GenerujPlatneTahy(newBoard, playerOnMove)) { if (move[0] == validMove[0] && move[1] == validMove[1] && move[2] == validMove[4] && move[3] == validMove[5]) { newBoard.VykonejTah(validMove); playerOnMove *= -1; validMoveFound = true; break; } } if (!validMoveFound) { return(false); } } while (newBoard.IndexSeznamu > pointer) { newBoard.TahZpet(); playerOnMove *= -1; } return(true); }