/// <summary> /// Guarda las opciones /// </summary> /// <param name="b">Bean de opciones</param> public void guardaOpciones(BeanOpciones b) { XmlDataDocument xml = getXML(rutaOpciones); xml.GetElementsByTagName("esGorda")[0].InnerText = b.EsGorda ? "1" : "0"; xml.GetElementsByTagName("sacaLengua")[0].InnerText = b.SacaLengua ? "1" : "0"; xml.GetElementsByTagName("frecuenciaSacaLengua")[0].InnerText = b.FrecuenciaSacaLengua.ToString(); xml.GetElementsByTagName("indiceManzana")[0].InnerText = b.IndiceManzana.ToString(); xml.Save(rutaOpciones); }
/// <summary> /// Devuelve las opciones guardadas /// </summary> /// <returns>Bean de opciones</returns> public BeanOpciones getOpciones() { XmlDataDocument xml = getXML(rutaOpciones); BeanOpciones retorna = new BeanOpciones(); retorna.EsGorda = xml.GetElementsByTagName("esGorda")[0].InnerText == "1"; retorna.SacaLengua = xml.GetElementsByTagName("sacaLengua")[0].InnerText == "1"; retorna.FrecuenciaSacaLengua = int.Parse(xml.GetElementsByTagName("frecuenciaSacaLengua")[0].InnerText); retorna.IndiceManzana = int.Parse(xml.GetElementsByTagName("indiceManzana")[0].InnerText); return(retorna); }
/// <summary> /// Muestra la pantalla de opciones /// </summary> /// <param name="pos">Posición del marcador</param> /// <param name="serpiente">Representación gráfica de la serpiente</param> /// <param name="opciones">Información de opciones que se mostrarán</param> public void pantallaOpciones(int pos, char[,] serpiente, BeanOpciones opciones) { // Líneas del recuadro de la serpiente string[] serpienteDibujo = new string[11]; serpienteDibujo[0] = new string(' ', 14); serpienteDibujo[1] = " ╔" + new String('═', 11) + '╗'; serpienteDibujo[2] = " ║" + new String(' ', 11) + '║'; serpienteDibujo[8] = " ║" + new String(' ', 11) + '║'; serpienteDibujo[9] = " ╚" + new String('═', 11) + '╝'; serpienteDibujo[10] = serpienteDibujo[0]; for (int i = 0; i < 5; i++) { char[] temp = new char[5]; Buffer.BlockCopy(serpiente, i * 5 * 2, temp, 0, 5 * 2); serpienteDibujo[i + 3] = " ║ " + new String(temp) + " ║"; } // Líneas de las opciones string[] opcionesDibujo = new string[11]; opcionesDibujo[0] = " " + (pos == 0 ? '>' : ' ') + " GROSOR "; opcionesDibujo[0] += opciones.EsGorda ? " CULEBRILLA [ANACONDA]" : "[CULEBRILLA] ANACONDA "; opcionesDibujo[2] = " " + (pos == 1 ? '>' : ' ') + " LENGUA "; opcionesDibujo[2] += opciones.SacaLengua ? "[BURLONA] TÍMIDA " : " BURLONA [TÍMIDA]"; opcionesDibujo[4] = " " + (pos == 2 ? '>' : ' ') + " FRECUENCIA "; opcionesDibujo[4] += opciones.SacaLengua ? $"<{opciones.FrecuenciaSacaLengua}%>" : "[LAS SERPIENTES TÍMIDAS NO SACAN LA LENGUA]"; opcionesDibujo[6] = " " + (pos == 3 ? '>' : ' ') + " MANZANA "; opcionesDibujo[6] += $"< {opciones.Manzana} > {comentarioManzana[opciones.IndiceManzana]}"; opcionesDibujo[8] = " " + (pos == 4 ? '>' : ' ') + " GUARDAR "; opcionesDibujo[10] = " " + (pos == 5 ? '>' : ' ') + " SALIR "; // Borrar consola y dibujar Console.Clear(); foreach (string s in letrasIntro) { Console.WriteLine(s); } Console.WriteLine(); for (int i = 0; i < serpienteDibujo.Length; i++) { Console.WriteLine(serpienteDibujo[i] + opcionesDibujo[i]); } }
public GameManager() { ag = new AdaptadorGrafico(); modelo = new Modelo(); beanOpciones = modelo.getOpciones(); }
/// <summary> /// Controla la pantalla de opciones /// </summary> private void opciones() { // Marcador de opción y minitablero para serpiente de muestra int marcador = 0; char[,] tableroOpciones = new char[5, 5]; // Se cargan las opciones en el bean para modificar sobre la marcha BeanOpciones opcionesTemp = new BeanOpciones(); opcionesTemp.EsGorda = beanOpciones.EsGorda; opcionesTemp.SacaLengua = beanOpciones.SacaLengua; opcionesTemp.FrecuenciaSacaLengua = beanOpciones.FrecuenciaSacaLengua; opcionesTemp.Manzana = arrayManzana[beanOpciones.IndiceManzana]; opcionesTemp.IndiceManzana = beanOpciones.IndiceManzana; // Se instancia la serpiente de muestra Sierpe serpienteDeLasOpciones = new Sierpe(5, 5, Direccion.Izquierda, (opcionesTemp.SacaLengua ? opcionesTemp.FrecuenciaSacaLengua : 0), opcionesTemp.EsGorda); serpienteDeLasOpciones.prepararParaOpciones(); while (true) { // Para que la interfaz responda mejor, se actualiza la lectura de // tecla cada 30ms pero se mueve la serpiente cada 300 for (int i = 0; i < 10; i++) { Thread.Sleep(30); if (Console.KeyAvailable) { ConsoleKey k = Console.ReadKey(true).Key; switch (k) { case ConsoleKey.UpArrow: if (marcador > 0) { marcador--; } break; case ConsoleKey.DownArrow: if (marcador < 5) { marcador++; } break; case ConsoleKey.RightArrow: if (marcador == 0 && !opcionesTemp.EsGorda) { opcionesTemp.EsGorda = true; } else if (marcador == 1 && opcionesTemp.SacaLengua) { opcionesTemp.SacaLengua = false; } else if (marcador == 2 && opcionesTemp.FrecuenciaSacaLengua < 100) { opcionesTemp.FrecuenciaSacaLengua += 5; } else if (marcador == 3 && opcionesTemp.IndiceManzana < arrayManzana.Length - 1) { opcionesTemp.IndiceManzana++; opcionesTemp.Manzana = arrayManzana[opcionesTemp.IndiceManzana]; } break; case ConsoleKey.LeftArrow: if (marcador == 0 && opcionesTemp.EsGorda) { opcionesTemp.EsGorda = false; } else if (marcador == 1 && !opcionesTemp.SacaLengua) { opcionesTemp.SacaLengua = true; } else if (marcador == 2 && opcionesTemp.FrecuenciaSacaLengua > 0) { opcionesTemp.FrecuenciaSacaLengua -= 5; } else if (marcador == 3 && opcionesTemp.IndiceManzana > 0) { opcionesTemp.IndiceManzana--; opcionesTemp.Manzana = arrayManzana[opcionesTemp.IndiceManzana]; } break; case ConsoleKey.Enter: if (marcador == 4) { // Se guardan las opciones en el modelo modelo.guardaOpciones(opcionesTemp); beanOpciones = modelo.getOpciones(); return; } else if (marcador == 5) { return; } break; case ConsoleKey.Escape: return; } // Se actualizan los parámetros de la serpiente serpienteDeLasOpciones.cambiarParametrosParaOpciones(opcionesTemp.SacaLengua ? opcionesTemp.FrecuenciaSacaLengua : 0, opcionesTemp.EsGorda); // Se limpia el array y se rellena Array.Clear(tableroOpciones, 0, tableroOpciones.Length); rellenarArrayConSerpiente(tableroOpciones, serpienteDeLasOpciones); // Se dibuja en pantalla y se espera ag.pantallaOpciones(marcador, tableroOpciones, opcionesTemp); } } // Código copiado vilmente para evitar modularización innecesaria // (la única diferencia es el segundo comando) // Se actualizan los parámetros de la serpiente y se mueve serpienteDeLasOpciones.cambiarParametrosParaOpciones(opcionesTemp.SacaLengua ? opcionesTemp.FrecuenciaSacaLengua : 0, opcionesTemp.EsGorda); serpienteDeLasOpciones.moverParaOpciones(); // Se limpia el array y se rellena Array.Clear(tableroOpciones, 0, tableroOpciones.Length); rellenarArrayConSerpiente(tableroOpciones, serpienteDeLasOpciones); // Se dibuja en pantalla y se espera ag.pantallaOpciones(marcador, tableroOpciones, opcionesTemp); } }