}//termina clase tablero
        static void Main(string[] args)//inicia el codigo principal
        {
            //declaracion, instanciacion y declaracion
            string val1, val2;
            int alto, ancho;
            bool FinDelJuego = false;
            Tablero TableroDeJuego;
            Culebrita CulebritaDeJuego;
            ConsoleKeyInfo teclaPresionada;
            do//inicia bloque de instrucciones a repetir si se reinicia el juego
            {
                TableroDeJuego = new Tablero();//crea el tablero de juego como un tablero
                CulebritaDeJuego = new Culebrita();//crea la culebrita de juego como una culebrita
                FinDelJuego = false;//indica que el juego esta activo
                inicioprograma://punto de retorno si los datos ingresados no son validos
                Console.ForegroundColor = ConsoleColor.White;//asigna color de texto blanco
                Console.WriteLine("Instrucciones:");
                Console.WriteLine("Ingresa los valores del primer cuadrante: ");
                Console.WriteLine("valor minimo 3, valor maximo 15");//escribe las instrucciones
                Console.Write("x: ");
                val1 = Console.ReadLine();//pide y asigna el valor para x (horizontal primer cuadrante del tablero)
                Console.Write("y: ");
                val2 = Console.ReadLine();//pide y asigna el valor para y (vertical primer cuadrante del tablero)
                int temp1, temp2;
                if (int.TryParse(val1, out temp1) & int.TryParse(val2, out temp2))//verifica si los valores son numericos y enteros
                {
                    if ((int.Parse(val1) >= 3) & (int.Parse(val1) <= 15) & (int.Parse(val2) >= 3) & (int.Parse(val2) <= 15))//si son numeros enteros, verifica si estan dentro del rango minimo
                    {
                        ancho = int.Parse(val1);
                        alto = int.Parse(val2);
                    }//si son valores numericos enteros dentro de los rangos, convierte y asigna las dimensiones del primer cuadrante del tablero
                    else
                    {
                        Console.WriteLine("Valores fuera de rango, ingresalos nuevamente.");
                        Console.WriteLine("Enter para continuar...");
                        Console.ReadLine();
                        Console.Clear();
                        goto inicioprograma;
                    }//si son enteros pero estan fuera de rango, da aviso de error y regresa a pedir los datos de nuevo
                }
                else
                {
                    Console.WriteLine("Uno o todos los valores no son valios, ingresalos nuevamente.");
                    Console.WriteLine("Enter para continuar...");
                    Console.ReadLine();
                    Console.Clear();
                    goto inicioprograma;
                }//si no son valres numericos, indica el error y regresa a pedir los datos nuevamente
                //inicio del proceso de dibujado
                TableroDeJuego.DibujarTablero(ancho, alto);//envia al tabrelos los valores del primer cuadrante y se dibujan los 4 margenes de lo tablero
                CulebritaDeJuego.CulebritaPosicionInicial(TableroDeJuego);//envia a la culebrita los datos de tablero para asignar la posicion inicial en el centro del tablero
                CulebritaDeJuego.DibujarCulebrita();//dibuja la culebrita
                do//bloque de instrucciones a repetir si NO se presiona la tecla x
                {
                    CulebritaDeJuego.DibujarCulebrita();//dibuja la culebrita
                    Console.SetCursorPosition(1, TableroDeJuego.MargenAlto + 1);//posiciona el cursor debajo del tablero
                    Console.WriteLine("                                                       ");//borra la liena de coordenada (1 linea debajo del tablero)
                    Console.SetCursorPosition(1, TableroDeJuego.MargenAlto + 1);//regresa a la linea de coordenada (1 linea debajo del tablero)
                    Console.ForegroundColor = ConsoleColor.White;//asigna color de texto blanco
                    Console.WriteLine("Coordenadas de la cabeza: ({0},{1})  cola:({2},{3})", (CulebritaDeJuego.cabeza.x - TableroDeJuego.MargenAncho) / 2, (TableroDeJuego.MargenAlto - 1) / 2 - CulebritaDeJuego.cabeza.y, (CulebritaDeJuego.cola.x - TableroDeJuego.MargenAncho) / 2, (TableroDeJuego.MargenAlto - 1) / 2 - CulebritaDeJuego.cola.y);//escribe las coordenadas de la cabeza de la culebrita
                    Console.ForegroundColor = ConsoleColor.Black;//asigna color de texto negro
                    teclaPresionada = Console.ReadKey();//lee la tecla presionada y la almacena
                    Console.SetCursorPosition(1, TableroDeJuego.MargenAlto + 3);//se posiciona 3 lineas debajo del tablero
                    Console.Write("                                                                      ");//borra el mensaje de error anterior
                    Console.SetCursorPosition(1, TableroDeJuego.MargenAlto + 3);//se posciciona en la linea de mensaje de error(3 lineas debajo de tablero)
                    Console.ForegroundColor = ConsoleColor.White;//asigna color de texto blanco
                    ConsoleKey temp = teclaPresionada.Key;
                    if (temp == ConsoleKey.UpArrow || temp == ConsoleKey.DownArrow || temp == ConsoleKey.LeftArrow || temp == ConsoleKey.RightArrow)//evalua que sea una tecla valida para despues evaluar el movimiento y despues actualizar la posicion de la culebrita
                    {
                        if (CulebritaDeJuego.EvaluarCabezaIgualCola(teclaPresionada.Key))//evalua si se mordio la cola
                        {
                            Console.WriteLine("Te mordiste la cola");
                            FinDelJuego = true;
                        }//si se mordio la cola, muestra el mensaje de error y asigna el final del juego en verdadero
                        else if (CulebritaDeJuego.EvaluarCabezaIgualCuerpo1(teclaPresionada.Key))//evalua si se intenta regresar
                            Console.WriteLine("No puedes regresar");//si se intenta regresar, muestra el mensaje de error y se queda esperando otra direccion
                        else if (CulebritaDeJuego.EvaluarCabezaMargen(teclaPresionada.Key, TableroDeJuego))//evalua si se choco con el margen
                        {
                            Console.WriteLine("Chocaste con la pared");
                            FinDelJuego = true;
                        }//si se choco con el margen muestra el mensaje de error y asigna el fin del juego en verdadero
                        else
                            CulebritaDeJuego.Actualizar(teclaPresionada.Key);//si no se mordio la cola, choco contra un margen, o intento regresar, actualiza la posicion de la culebrita
                    }
                    } while (teclaPresionada.Key != ConsoleKey.X && !FinDelJuego);//se realiza el bloque anterior si NO se presiona X(instruccion cerrar juego) o si fin del juego es falso
                if (teclaPresionada.Key == ConsoleKey.X)//evalua si la tecla presionada es igual a la tecla X
                {
                    Console.WriteLine(" Gracias por jugar culebrita"); //si la tecla presionada es x, muestra mensaje de cierre
                }
                else
                    Console.WriteLine(" Presione una tecla para reiniciar");//si no se presiona x, se muestra el mensaje para reiniciar el juego
                Console.ForegroundColor = ConsoleColor.Black;//asigna el color del tecto en negro
                Console.ReadKey();//lee una tecla para pausar el programa
                Console.Clear();//limpia el tablero para reiniciar el programa
                CulebritaDeJuego = null;//borra los todos los valores de la culebrita de juego
                TableroDeJuego = null;//borra todos los valores del tablero de juego
            } while (teclaPresionada.Key != ConsoleKey.X);//repite el bloque anterior si NO se presiona x

        }//fin del codigo principal
예제 #2
0
        public void JuegoNuevo(ref MenuPrincipal menu)
        {
            ConsoleKeyInfo tecla;

            Marco.Pintar();
            Puntuacion puntos = new Puntuacion(2, 1);

            puntos.Pintar();
            Alimento alimento = new Alimento(this.Marco);

            alimento.Pintar();

            Culebrita snake = new Culebrita(this.Marco);

            snake.Pintar();

            tecla = new ConsoleKeyInfo((char)39, ConsoleKey.RightArrow, false, false, false);
            do
            {
                Console.SetCursorPosition(60, 1);
                Console.Write("Velocidad: " + snake.Velocidad);

                if (300 - snake.Velocidad > 0)
                {
                    Thread.Sleep(300 - snake.Velocidad);
                    if (Console.KeyAvailable)
                    {
                        tecla = Console.ReadKey(true);
                    }
                }
                else
                {
                    Thread.Sleep(0);
                    if (Console.KeyAvailable)
                    {
                        tecla = Console.ReadKey(true);
                    }
                }

                // Si serpiente come alimento... Generar uno nuevo
                if (snake.Comio(alimento))
                {
                    snake.Crecer();
                    snake.Velocidad += 20;
                    alimento.BorrarAlimento();
                    puntos.AgregarPuntos();
                    puntos.Actualizar();
                    alimento.GenerarNuevo();
                    alimento.Actualizar();
                }

                if (tecla.Key == ConsoleKey.UpArrow)
                {
                    snake.MoverArriba();
                }
                if (tecla.Key == ConsoleKey.RightArrow)
                {
                    snake.MoverDerecha();
                }
                if (tecla.Key == ConsoleKey.LeftArrow)
                {
                    snake.MoverIzquierda();
                }
                if (tecla.Key == ConsoleKey.DownArrow)
                {
                    snake.MoverAbajo();
                }

                snake.Actualizar();
            } while (snake.Colisiona() == false && tecla.Key != ConsoleKey.Escape);

            /** Si se presiona ESQ en el teclado,
             *  o la culebrita está muerta
             *  se regresa al menu principal */
            if (tecla.Key == ConsoleKey.Escape || snake.EstaViva == false)
            {
                if (!snake.EstaViva)
                {
                    GameOver gameOver = new GameOver(this.Marco, puntos);
                    gameOver.Pintar();
                    Console.ReadKey();
                }
                Console.Clear();
                // Se imprime nuevamente el menú en pantalla
                menu.EstaActivo = true;
                menu.Pintar();
            }
        }