/// <summary> /// Comienza la partida y controla su flujo /// </summary> private void comenzarPartida() { // Se crean las instancias necesarias para la partida tablero = new char[altoTablero, anchoTablero]; puntos = 0; hayManzana = false; generaManzanas = new Random(); direccionElegida = Direccion.Izquierda; sierpe = new Sierpe(anchoTablero, altoTablero, direccionElegida, (beanOpciones.SacaLengua ? beanOpciones.FrecuenciaSacaLengua : 0), beanOpciones.EsGorda); partidaGanada = false; while (true) { // Se limpia el array anterior Array.Clear(tablero, 0, tablero.Length); // Se pone una nueva manzana si no hay if (!hayManzana) { // Antes de generarla se comprueba si hay espacio // (si no lo hay, es que la partida ha finalizado) if (sierpe.Serpiente.Count >= anchoTablero * altoTablero) { partidaGanada = true; partidaFinalizada(); return; } while (true) { // Genera un punto aleatorio en el tablero de juego int xManzana = generaManzanas.Next(anchoTablero); int yManzana = generaManzanas.Next(altoTablero); // Compara el punto generado con el cuerpo de la serpiente // (así no se generará una manzana sobre la serpiente) nuevaManzana = new Punto(xManzana, yManzana); if (!sierpe.Serpiente.Contains(nuevaManzana)) { hayManzana = true; break; } } } // Lee la última tecla pulsada if (Console.KeyAvailable) { switch (Console.ReadKey(true).Key) { case ConsoleKey.UpArrow: direccionElegida = Direccion.Arriba; break; case ConsoleKey.RightArrow: direccionElegida = Direccion.Derecha; break; case ConsoleKey.DownArrow: direccionElegida = Direccion.Abajo; break; case ConsoleKey.LeftArrow: direccionElegida = Direccion.Izquierda; break; case ConsoleKey.P: ag.dibujarPausa(puntos, tablero); while (true) { if (Console.ReadKey(true).Key == ConsoleKey.P) { break; } } break; } } // Confirma la posición de la cabeza en el siguiente movimiento // (en la serpiente se ignorará si se le pasa una dirección // opuesta a la que tiene actualmente) Punto nuevaCabeza = sierpe.confirmarDireccion(direccionElegida); // Si la nueva posición de la cabeza es una manzana if (nuevaCabeza.Equals(nuevaManzana)) { sierpe.crecer(); hayManzana = false; puntos += 50; // Si la manzana es la nota musical, sonará un tono if (beanOpciones.IndiceManzana == 5) { new Thread(() => Console.Beep(554, 300)).Start(); } } // Si la serpiente ha chocado else if (serpienteChoca(nuevaCabeza)) { // Se activa penalización si está en modo fácil, // si no, game over if (muertePorAutofagiaEnModoFacil) { sierpe.autofagia(); } else { partidaFinalizada(); return; } } // Si no hay ningún evento, se mueve normalmente else { sierpe.mover(); } // Se asignan la manzana y la serpiente al array // y se deja lo demás vacío tablero[nuevaManzana.Y, nuevaManzana.X] = arrayManzana[beanOpciones.IndiceManzana]; rellenarArrayConSerpiente(tablero, sierpe); ag.dibujarFrame(puntos, tablero); if (tiempoDinamico > 0) { tiempoDinamico--; } Thread.Sleep(tiempoBase + tiempoDinamico); } }
public void Mostrar(Punto p) { Console.SetCursorPosition(p.x, p.y); Console.Write(p.s); }
public void Borrar(Punto p) { Console.SetCursorPosition(p.x, p.y); Console.Write(" "); }
static void Main(string[] args) { Display.Marco(); Punto p1 = new Punto(5, 10, "*"); Punto p2 = new Punto(5, 9, "*"); Punto p3 = new Punto(5, 8, "*"); Punto p4 = new Punto(5, 7, "*"); Punto p5 = new Punto(5, 6, "*"); ConsoleKeyInfo tecla; do { tecla = Console.ReadKey(true); switch (tecla.Key) { case ConsoleKey.DownArrow: p5.Borrar(p5); p1.Mover(p1, p1.x + 0, p1.y + 1); p2.Mover(p2, p1.x, p1.y); p3.Mover(p3, p2.x, p2.y); p4.Mover(p4, p3.x, p3.y); //p5.Borrar(p5); p5.Mover(p5, p4.x, p4.y); break; case ConsoleKey.UpArrow: p1.Mover(p1, p1.x + 0, p1.y - 1); p2.Mover(p2, p1.x, p1.y); p3.Mover(p3, p2.x, p2.y); p4.Mover(p4, p3.x, p3.y); //p5.Borrar(p5); p5.Mover(p5, p4.x, p4.y); break; case ConsoleKey.LeftArrow: p1.Mover(p1, p1.x - 1, p1.y + 0); p2.Mover(p2, p1.x, p1.y); p3.Mover(p3, p2.x, p2.y); p4.Mover(p4, p3.x, p3.y); //p5.Borrar(p5); p5.Mover(p5, p4.x, p4.y); break; case ConsoleKey.RightArrow: p1.Mover(p1, p1.x + 1, p1.y + 0); p2.Mover(p2, p1.x, p1.y); p3.Mover(p3, p2.x, p2.y); p4.Mover(p4, p3.x, p3.y); //p5.Borrar(p5); p5.Mover(p5, p4.x, p4.y); break; default: break; } } while (tecla.Key != ConsoleKey.Escape);; Console.ReadLine(); }