{ //Doge static void Main(string[] args) { bool ingame = true; Console.Beep(); while (ingame == true) { Console.Title = "Intérprete de tablas Fadic : Selector inicial"; Console.ForegroundColor = ConsoleColor.Gray; string path = Interfaz.abrirArchivo(); //Abre un archivo desde consola. Entrega el path del archivo XML bool modo = Interfaz.modo; //true = juego, false = editor if (modo) { Mapa tabla = new Mapa(path); //Abrir en modo juego ingame = tabla.jugar(); } else { Escritor_imagen imagen = new Escritor_imagen(path, "new", 6, 6); Mapa tabla = new Mapa(path, true); //Crear un mapa nuevo tabla.editar(); Console.Clear(); } } }
public static void imprimirTabla(char[,] tabla, bool movmode, Escritor_imagen imagen) //Este métodoimprime en el bmp, y en la consola, a la vez { if (Interfaz.modo == true) { Console.Clear(); } Console.CursorSize = 1; Console.BackgroundColor = ConsoleColor.White; for (int j = 0; j < tabla.GetLength(1); j++) { for (int i = 0; i < tabla.GetLength(0); i++) { imagen.dibujar_cuadro(i, j, tabla[i, j], tabla.GetLength(0), tabla.GetLength(1)); } } for (int j = 0; j < tabla.GetLength(1); j++) { for (int i = 0; i < tabla.GetLength(0); i++) { switch (tabla[i, j]) { case 'W': Console.ForegroundColor = ConsoleColor.Gray; Console.Write('█'); break; case 'R': Console.ForegroundColor = ConsoleColor.Red; Console.Write('█'); break; case 'r': Console.ForegroundColor = ConsoleColor.DarkRed; Console.Write('█'); break; case 'G': Console.ForegroundColor = ConsoleColor.Green; Console.Write('█'); break; case 'g': Console.ForegroundColor = ConsoleColor.DarkGreen; Console.Write('█'); break; case 'Y': Console.ForegroundColor = ConsoleColor.Yellow; Console.Write('█'); break; case 'y': Console.ForegroundColor = ConsoleColor.DarkYellow; Console.Write('█'); break; case 'P': Console.ForegroundColor = ConsoleColor.Magenta; Console.Write('█'); break; case 'p': Console.ForegroundColor = ConsoleColor.DarkMagenta; Console.Write('█'); break; case 'B': Console.ForegroundColor = ConsoleColor.Blue; Console.Write('█'); break; case 'b': Console.ForegroundColor = ConsoleColor.DarkBlue; Console.Write('█'); break; case 'O': Console.ForegroundColor = ConsoleColor.Cyan; Console.Write('█'); break; case 'o': Console.ForegroundColor = ConsoleColor.DarkCyan; Console.Write('█'); break; default: Console.Write(' '); break; } Console.ForegroundColor = ConsoleColor.White; } Console.WriteLine(); } Console.BackgroundColor = ConsoleColor.Black; if (Interfaz.modo == true) { Console.WriteLine(); Console.Write("Marcando ruta : "); Console.Write(movmode); //Header Console.WriteLine(); } else if (Interfaz.modo == false) { Console.WriteLine(); } Console.CursorSize = 100; }
public void editar() { Escritor_imagen imagen = new Escritor_imagen(path, nombre, lx, ly); Console.WriteLine("Iniciando editor"); bool finedit = false; //Finalizó editor Mapasig = new char[lx, ly]; for (int j = 0; j < ly; j++) { for (int i = 0; i < lx; i++) { Mapasig[i, j] = ' '; } } int posx = 0; int posy = 3; string modo = "Void"; while (finedit == false) { Console.Clear(); Console.BackgroundColor = ConsoleColor.Black; Console.ForegroundColor = ConsoleColor.Gray; Console.Title = ("Nombre = " + nombre + ".xml | " + "Modo cursor : " + modo); Console.WriteLine("Nombre = " + nombre + ".xml | Largo = " + lx + " - Ancho = " + ly); Console.Write("Modo cursor : |"); //Selector de color para el cuadrito pequeño imprimirCuadritoColor(modo); Console.ForegroundColor = ConsoleColor.Gray; Console.WriteLine("| " + modo); Console.WriteLine("[ ] Abrir paleta visual de colores"); Interfaz.imprimirTabla(Mapasig, false, imagen); Console.ForegroundColor = ConsoleColor.Gray; Console.SetCursorPosition(posx, posy); Console.CursorSize = 100; ConsoleKeyInfo tecla = Console.ReadKey(); if (tecla.Key == ConsoleKey.UpArrow && posy >= 3) { if (posy == 3) { posy--; posx = 1; } else { posy--; } } else if (tecla.Key == ConsoleKey.DownArrow && posy < ly + 3 - 1) { posy++; } else if (tecla.Key == ConsoleKey.RightArrow && posx < lx) { posx++; } else if (tecla.Key == ConsoleKey.LeftArrow && posx > 0) { posx--; } else if (tecla.Key == ConsoleKey.Spacebar) { if (posx == 1 && posy == 2) //Vamos a la paleta de colores { bool s2done = false; posy = 2; while (s2done == false) { Console.Clear(); Console.BackgroundColor = ConsoleColor.Black; Console.ForegroundColor = ConsoleColor.Gray; Console.WriteLine("Seleccione un elemento para posicionar en su mapa"); Console.WriteLine(); #region Console.Write("[ ] "); imprimirCuadritoColor("Void"); Console.WriteLine(" Void"); Console.Write("[ ] "); imprimirCuadritoColor("Wall"); Console.WriteLine(" Wall"); Console.Write("[ ] "); imprimirCuadritoColor("Purple"); Console.WriteLine(" Purple"); Console.Write("[ ] "); imprimirCuadritoColor("Blue"); Console.WriteLine(" Blue"); Console.Write("[ ] "); imprimirCuadritoColor("Red"); Console.WriteLine(" Red"); Console.Write("[ ] "); imprimirCuadritoColor("Yellow"); Console.WriteLine(" Yellow"); Console.Write("[ ] "); imprimirCuadritoColor("Orange"); Console.WriteLine(" Orange (Cyan)"); Console.Write("[ ] "); imprimirCuadritoColor("Green"); Console.WriteLine(" Green"); #endregion Console.SetCursorPosition(1, posy); Console.CursorSize = 100; ConsoleKeyInfo tecla2 = Console.ReadKey(); if (tecla2.Key == ConsoleKey.UpArrow && posy > 2) { posy--; } else if (tecla2.Key == ConsoleKey.DownArrow && posy < 9) { posy++; } else if (tecla2.Key == ConsoleKey.Spacebar) { switch (posy - 2) { case 0: modo = "Void"; break; case 1: modo = "Wall"; break; case 2: modo = "Purple"; break; case 3: modo = "Blue"; break; case 4: modo = "Red"; break; case 5: modo = "Yellow"; break; case 6: modo = "Orange"; break; case 7: modo = "Green"; break; } s2done = true; } } } else if (posx < lx && posy < ly + 3) { int relx = posx; int rely = posy - 3; if (modo == "Wall" || modo == "Void") //Poner una muralla o un espacio es muy simple, solo hemos de ponerla { switch (modo) { case "Wall": Mapasig[relx, rely] = 'W'; break; case "Void": Mapasig[relx, rely] = ' '; break; } } if (modo != "Wall" && modo != "Void") //Algun nodo de color... { bool otronododone = false; int porx = posx; int pory = posy; switch (modo) { case "Purple": Mapasig[relx, rely] = 'P'; break; case "Blue": Mapasig[relx, rely] = 'B'; break; case "Red": Mapasig[relx, rely] = 'R'; break; case "Yellow": Mapasig[relx, rely] = 'Y'; break; case "Orange": Mapasig[relx, rely] = 'O'; break; case "Green": Mapasig[relx, rely] = 'G'; break; } while (otronododone == false) //Modo seleccion del otro par: asi siempre tenemos un par de nodos { Console.Clear(); Console.BackgroundColor = ConsoleColor.Black; Console.ForegroundColor = ConsoleColor.Gray; Console.Title = ("Nombre = " + nombre + ".xml | " + "Modo cursor : " + modo); Console.WriteLine("Nombre = " + nombre + ".xml | Largo = " + lx + " - Ancho = " + ly); Console.Write("Modo cursor : |"); //Selector de color para el cuadrito pequeño imprimirCuadritoColor(modo); Console.ForegroundColor = ConsoleColor.Gray; Console.WriteLine("| " + modo); Console.WriteLine("Seleccione otro lugar para poner el otro nodo del mismo color"); // modos disponibles: pintando x color, eliminando, seleccionando Interfaz.imprimirTabla(Mapasig, false, imagen); Console.WriteLine("NOTA: No puede atravesar murallas; si puede sobreescribir nodos ya existentes"); Console.SetCursorPosition(posx, posy); Console.CursorSize = 100; ConsoleKeyInfo tecla2 = Console.ReadKey(); if (tecla2.Key == ConsoleKey.UpArrow && posy > 3) { if (Mapasig[posx, posy - 3 - 1] != 'W') { posy--; } } else if (tecla2.Key == ConsoleKey.DownArrow && posy < ly + 2) { if (Mapasig[posx, posy - 3 + 1] != 'W') { posy++; } } else if (tecla2.Key == ConsoleKey.RightArrow && posx < lx - 1) { if (Mapasig[posx + 1, posy - 3] != 'W') { posx++; } } else if (tecla2.Key == ConsoleKey.LeftArrow && posx > 0) { if (Mapasig[posx - 1, posy - 3] != 'W') { posx--; } } else if (tecla2.Key == ConsoleKey.Spacebar && !(posx == porx && pory == posy)) { relx = posx; rely = posy - 3; switch (modo) { case "Purple": Mapasig[relx, rely] = 'P'; break; case "Blue": Mapasig[relx, rely] = 'B'; break; case "Red": Mapasig[relx, rely] = 'R'; break; case "Yellow": Mapasig[relx, rely] = 'Y'; break; case "Orange": Mapasig[relx, rely] = 'O'; break; case "Green": Mapasig[relx, rely] = 'G'; break; } otronododone = true; } } } } } switch (tecla.Key) //Es posible seleccionar mediante la paleta en pantalla, o con las teclas asignadas a cada pincel { case ConsoleKey.P: modo = "Purple"; break; case ConsoleKey.B: modo = "Blue"; break; case ConsoleKey.R: modo = "Red"; break; case ConsoleKey.Y: modo = "Yellow"; break; case ConsoleKey.O: modo = "Orange"; break; case ConsoleKey.G: modo = "Green"; break; case ConsoleKey.W: modo = "Wall"; break; case ConsoleKey.V: modo = "Void"; break; case ConsoleKey.Escape: //Comando de salida finedit = true; break; } } Console.WriteLine("Escribiendo archivo XML"); this.ImprimirXML(); Console.WriteLine("Edición finalizada. Pulse cualquier tecla para continuar"); }
public Mapa(string path) //Inicializado como objeto abierto { XmlDocument xDoc = new XmlDocument(); xDoc.Load(path); //Load path Console.WriteLine("Archivo bien cargado"); XmlNodeList nnstage = xDoc.SelectNodes("//stage"); XmlNode nstage = nnstage[0]; string nombre = path.Split('/').Last(); lx = Convert.ToInt32(nstage.Attributes["width"].Value); //obten ly = Convert.ToInt32(nstage.Attributes["height"].Value); imagen = new Escritor_imagen(path.Substring(0, path.Length - nombre.Length), nombre.Substring(0, nombre.Length - 4), lx, ly); XmlNodeList dat = xDoc.SelectNodes("//stage/nodeList/node"); //Cargar los nodos Mapasig = new char[lx, ly]; for (int j = 0; j < ly; j++) { for (int i = 0; i < lx; i++) { Mapasig[i, j] = ' '; } } int[] nnodos = { 0, 0, 0, 0, 0, 0 }; for (int i = 0; i < dat.Count; i++) { string contenido = dat[i].Attributes["content"].Value; //obtengo el tipo de nodo int x = Convert.ToInt32(dat[i].Attributes["i"].Value); //y su posicion int y = Convert.ToInt32(dat[i].Attributes["j"].Value); if (contenido == "wall") { Mapasig[x, y] = 'W'; } else if (contenido == "blue") { Mapasig[x, y] = 'B'; nnodos[0]++; } else if (contenido == "red") { Mapasig[x, y] = 'R'; nnodos[1]++; } else if (contenido == "purple") { Mapasig[x, y] = 'P'; nnodos[2]++; } else if (contenido == "yellow") { Mapasig[x, y] = 'Y'; nnodos[3]++; } else if (contenido == "orange") { Mapasig[x, y] = 'O'; nnodos[4]++; } else if (contenido == "green") { Mapasig[x, y] = 'G'; nnodos[5]++; } } foreach (int numno in nnodos) { if (numno == 2) { nconex += 1; //Formula para las conexiones posibles de los nodos.... } if (numno >= 3) { nconex += numno - 1; } } Interfaz.imprimirTabla(Mapasig, false, imagen); }