コード例 #1
0
 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);
 }
コード例 #2
0
        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);
                }
            }
        }
コード例 #3
0
        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(" ");
            }
        }