}//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
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(); } }