示例#1
0
        /// <summary>
        /// Guarda una puntuación entre las más altas
        /// </summary>
        /// <param name="dificultad">Dificultad en la que se ha jugado (3 para ganadores)</param>
        /// <param name="puntos">Puntos conseguidos</param>
        /// <param name="nombre">Nombre del jugador</param>
        public void guardarPuntuacion(int dificultad, int puntos, string nombre)
        {
            // Se recupera la lista de puntuaciones
            List <Puntuacion> lista = getPuntuaciones(dificultad);

            // Se añade la nueva puntuación y se ordenan todas
            Puntuacion nuevo = new Puntuacion();

            nuevo.Puntos = puntos;
            nuevo.Nombre = nombre;
            lista.Add(nuevo);
            lista.Sort((p, q) => q.Puntos.CompareTo(p.Puntos));

            XmlDataDocument doc = getXML(rutaPuntos);

            // Se busca el tag de modo que coincida con esta dificultad
            XmlNodeList modo     = doc.GetElementsByTagName("modo");
            XmlNode     esteModo = null;

            foreach (XmlNode n in modo)
            {
                if (n.Attributes.GetNamedItem("dif").InnerText.Equals($"{dificultad}"))
                {
                    esteModo = n;
                    break;
                }
            }

            // Si no existe, se lanza error
            if (esteModo == null)
            {
                throw new XmlException();
            }

            // Se borran todas las etiquetas hijas
            while (esteModo.FirstChild != null)
            {
                esteModo.RemoveChild(esteModo.FirstChild);
            }

            // Se limitan las puntuaciones guardadas a 5
            int numDatos = lista.Count < 5 ? lista.Count : 5;

            // Se vuelven a rellenar con los nuevos datos
            for (int i = 0; i < numDatos; i++)
            {
                XmlNode n = esteModo.OwnerDocument.CreateElement("puntuacion");
                esteModo.AppendChild(n);

                XmlNode nodoPuntos = n.OwnerDocument.CreateElement("puntos");
                nodoPuntos.InnerText = lista[i].Puntos.ToString();
                XmlNode nodoNombre = n.OwnerDocument.CreateElement("nombre");
                nodoNombre.InnerText = lista[i].Nombre;

                n.AppendChild(nodoPuntos);
                n.AppendChild(nodoNombre);
            }

            doc.Save(rutaPuntos);
        }
示例#2
0
        /// <summary>
        /// Devuelve las puntuaciones guardadas
        /// </summary>
        /// <param name="dificultad">Dificultad de la cual consultar las puntuaciones (0-2) o 3 para ganadores</param>
        /// <returns>Lista de puntuaciones de esa dificultad</returns>
        public List <Puntuacion> getPuntuaciones(int dificultad)
        {
            XmlDataDocument doc = getXML(rutaPuntos);
            XmlNodeList     listXmlModo;

            // Guarda el índice que buscamos de la lista de nodos
            int accedido = -1;

            listXmlModo = doc.GetElementsByTagName("modo");
            for (int i = 0; i < listXmlModo.Count; i++)
            {
                if (listXmlModo[i].Attributes.GetNamedItem("dif").InnerText.Equals($"{dificultad}"))
                {
                    accedido = i;
                    break;
                }
            }

            // Si el índice que buscamos no está, lanza excepción
            if (accedido == -1)
            {
                throw new XmlException();
            }

            List <Puntuacion> retorna = new List <Puntuacion>();

            try
            {
                // Parsea todos los resultados
                for (int i = 0; i < listXmlModo[accedido].ChildNodes.Count; i++)
                {
                    Puntuacion p = new Puntuacion();
                    p.Puntos = int.Parse(listXmlModo[accedido].ChildNodes[i].ChildNodes[0].InnerText);
                    p.Nombre = listXmlModo[accedido].ChildNodes[i].ChildNodes[1].InnerText;
                    retorna.Add(p);
                }

                // Se devuelven los resultados (truncados hasta 5 y ordenados)
                retorna.Sort((p, q) => q.Puntos.CompareTo(p.Puntos));
                if (retorna.Count > 5)
                {
                    return(retorna.GetRange(0, 5));
                }
                return(retorna);
            }
            catch (FormatException)
            {
                throw new XmlException();
            }
        }