private static Posicion direccionCabezaSerpiente(byte derecha, byte izquierda, byte abajo, byte arriba, int direccion, Posicion nouCapdeSerp) { Console.SetCursorPosition(nouCapdeSerp.columna, nouCapdeSerp.fila); Console.ForegroundColor = ConsoleColor.Green; if (direccion == derecha) { Console.Write(">"); } if (direccion == izquierda) { Console.Write("<"); } if (direccion == arriba) { Console.Write("^"); } if (direccion == abajo) { Console.Write("v"); } return(nouCapdeSerp); }
public static void Juego() { byte derecha = 0; byte izquierda = 1; byte abajo = 2; byte arriba = 3; int ultimoTiempodeEstrella = 0; int tempsDesaparecerEstrella = 8000; int Puntosnegativos = 0; bool quit = true; if (quit != false) { Posicion[] Direccions = new Posicion[] { new Posicion(0, 1), // right new Posicion(0, -1), // left new Posicion(1, 0), // down new Posicion(-1, 0), // up }; double tiempodeEspera = 100; int direccion = derecha; Random aleaNum = new Random(); //Probar si copia dependiendo del tamaño posible- Console.BufferHeight = Console.WindowHeight; //Obtiene el numero de milisegundos desde que se inicia el juego. ultimoTiempodeEstrella = Environment.TickCount; //Creamos nuevos objetos List <Posicion> obstacles = new List <Posicion>() { new Posicion(12, 12), new Posicion(14, 20), new Posicion(7, 7), new Posicion(19, 19), new Posicion(6, 9), }; foreach (Posicion obstacle in obstacles) { Dibujar(obstacle, 'O', ConsoleColor.Magenta); } //Creamos una nueva colección donde guardaremos las partes de la serpiente. Queue <Posicion> parteSnake = new Queue <Posicion>(); //Empezamos con 5 partes del cuerpo(#) de la serpiente. for (int i = 0; i <= 5; i++) { parteSnake.Enqueue(new Posicion(0, i)); } foreach (Posicion position in parteSnake) { Dibujar(position, '#', ConsoleColor.Red); } //Dibujamos estrella Posicion estrella; do { estrella = new Posicion(aleaNum.Next(0, Console.WindowHeight), aleaNum.Next(0, Console.WindowWidth)); }while (parteSnake.Contains(estrella) || obstacles.Contains(estrella)); Dibujar(estrella, '@', ConsoleColor.Yellow); while (quit == true) { Puntosnegativos++; int PuntosUsuario = (parteSnake.Count - 6) * 100 - Puntosnegativos; Console.Title = "Snake version a la Machi, Puntuacion: " + PuntosUsuario; direccion = ControlesFlechas(derecha, izquierda, abajo, arriba, direccion); Posicion capdeSerp = parteSnake.Last(); Posicion nuevaDireccion = Direccions[direccion]; Posicion nouCapdeSerp = new Posicion(capdeSerp.fila + nuevaDireccion.fila, capdeSerp.columna + nuevaDireccion.columna); if (nouCapdeSerp.columna < 0) { nouCapdeSerp.columna = Console.WindowWidth - 1; } if (nouCapdeSerp.fila < 0) { nouCapdeSerp.fila = Console.WindowHeight - 1; } if (nouCapdeSerp.fila >= Console.WindowHeight) { nouCapdeSerp.fila = 0; } if (nouCapdeSerp.columna >= Console.WindowWidth) { nouCapdeSerp.columna = 0; } //nouCapdeSerp = siEstrellaSerpienteEnObjeto(negativePoints, obstacles, parteSnake, nouCapdeSerp); if (parteSnake.Contains(nouCapdeSerp) || obstacles.Contains(nouCapdeSerp)) { PuntosUsuario = siEstrellamosSerpienteConObjeto(PuntosUsuario); quit = false; } Dibujar(capdeSerp, '#', ConsoleColor.Red); //nouCapdeSerp = direcciondeSerpiente(derecha, izquierda, abajo, arriba, direccion, parteSnake, nouCapdeSerp); parteSnake.Enqueue(nouCapdeSerp); nouCapdeSerp = direccionCabezaSerpiente(derecha, izquierda, abajo, arriba, direccion, nouCapdeSerp); //SirecogidaEstrella(ref ultimoTiempodeEstrella, ref tiempodeEspera, aleaNum, obstacles, parteSnake, ref estrella, ref nouCapdeSerp); //if (nouCapdeSerp.columna == estrella.columna && nouCapdeSerp.fila == estrella.fila) //{ // // feeding the snake // do // { // estrella = new Posicion(aleaNum.Next(0, Console.WindowHeight), // aleaNum.Next(0, Console.WindowWidth)); // } // while (parteSnake.Contains(estrella) || obstacles.Contains(estrella)); // ultimoTiempodeEstrella = Environment.TickCount; // //Dibujamos estrella // Dibujar(estrella,'@',ConsoleColor.Yellow); // tiempodeEspera--; // Posicion obstacle = new Posicion(); // int numPosAleaFila = aleaNum.Next(0, Console.WindowHeight); // int numPosAleaColumna = aleaNum.Next(0, Console.WindowWidth); // do // { // obstacle = new Posicion(numPosAleaFila, numPosAleaColumna); // } // while (parteSnake.Contains(obstacle) || // obstacles.Contains(obstacle) || // (estrella.fila != obstacle.fila && estrella.columna != obstacle.fila)); // obstacles.Add(obstacle); // obstacle = Dibujar(obstacle, '^', ConsoleColor.Blue); //} //else //{ // // borramos la ultima parte de la serpiente en cada movimiento. // Posicion last = parteSnake.Dequeue(); // Console.SetCursorPosition(last.columna, last.fila); // Console.Write(" "); //} siRecogeEstrella(ref ultimoTiempodeEstrella, ref tiempodeEspera, aleaNum, obstacles, parteSnake, ref estrella, ref nouCapdeSerp); if (Environment.TickCount - ultimoTiempodeEstrella >= tempsDesaparecerEstrella) { Puntosnegativos = Puntosnegativos + 100; Console.SetCursorPosition(estrella.columna, estrella.fila); Console.Write(" "); do { estrella = new Posicion(aleaNum.Next(0, Console.WindowHeight), aleaNum.Next(0, Console.WindowWidth)); }while (parteSnake.Contains(estrella) || obstacles.Contains(estrella)); ultimoTiempodeEstrella = Environment.TickCount; } Dibujar(estrella, '@', ConsoleColor.Yellow); tiempodeEspera -= 0.01; Thread.Sleep((int)tiempodeEspera); } } }
private static void siRecogeEstrella(ref int ultimoTiempodeEstrella, ref double tiempodeEspera, Random aleaNum, List <Posicion> obstacles, Queue <Posicion> parteSnake, ref Posicion estrella, ref Posicion nouCapdeSerp) { if (nouCapdeSerp.columna == estrella.columna && nouCapdeSerp.fila == estrella.fila) { do { estrella = new Posicion(aleaNum.Next(0, Console.WindowHeight), aleaNum.Next(0, Console.WindowWidth)); }while (parteSnake.Contains(estrella) || obstacles.Contains(estrella)); ultimoTiempodeEstrella = Environment.TickCount; Dibujar(estrella, '@', ConsoleColor.Yellow); tiempodeEspera--; Posicion obstacle = new Posicion(); do { obstacle = new Posicion(aleaNum.Next(0, Console.WindowHeight), aleaNum.Next(0, Console.WindowWidth)); }while (parteSnake.Contains(obstacle) || obstacles.Contains(obstacle) || (estrella.fila != obstacle.fila && estrella.columna != obstacle.fila)); obstacles.Add(obstacle); Dibujar(obstacle, 'O', ConsoleColor.Magenta); } else { Posicion last = parteSnake.Dequeue(); Console.SetCursorPosition(last.columna, last.fila); Console.Write(" "); } }