Beispiel #1
0
        /// <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);
            }
        }
Beispiel #2
0
 public void Mostrar(Punto p)
 {
     Console.SetCursorPosition(p.x, p.y);
     Console.Write(p.s);
 }
Beispiel #3
0
 public void Borrar(Punto p)
 {
     Console.SetCursorPosition(p.x, p.y);
     Console.Write(" ");
 }
Beispiel #4
0
        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();
        }