Introducción

El ejemplo muestra cómo construir el clásico juego Snake en una aplicación de consola.

Descripción

La visualización de la serpiente se mantiene a través de un objeto Queue que almacena las posiciones de los diferentes puntos de la cola de la serpiente.

De esta forma según va avanzando la serpiente se van añadiendo los puntos a través del método Enqueue a la vez que se eliminan los últimos puntos de la cola de la serpiente a través del método Dequeue.

El funcionamiento del juego se apoya en 4 funciones:

  1. MoveSnake. Que se encarga de dibujar la serpiente en la pantalla en su nueva posición. La función devuelve un valor booleano indicando si el movimiento es posible, si no lo es, porque la serpiente choca contra los bordes de la pantalla o contra su propia cola devuelve false provocando el fin del juego.
  2. GetDirection. Es la responsable de capturar las pulsaciones de teclado del jugador y modificar la dirección que sigue la serpiente en función de éstas. Devuelve un valor Direction indicando la dirección en que se debería mover la serpiente.
  3. GetNextPosition. Se encarga de calcular la nueva posición de la serpiente teniendo en cuenta su posición actual y la dirección.
  4. ShowFood. Muestra en pantalla, en una posición aleatoria, un elemento que representa la comida de la serpiente. Devuelve la posición en la que se ha mostrado la comida.

Con estas funciones el código del método principal prácticamente se reduce a ir llamando al método MoveSnake hasta que éste devuelve false y finaliza el juego.

Después de cada movimiento comprueba si ha alcanzado la comida (y en tal caso muestra otra) y calcula la nueva dirección y posición. 

 

C#Visual Basic
Editar script|Remove
        static void Main() 
        { 
            var score = 0; 
            var speed = 100; 
            var foodPosition = Point.Empty; 
            var screenSize = new Size(6020); 
            var snake = new Queue<Point>(); 
            var snakeLength = 3; 
            var currentPosition = new Point(09); 
            snake.Enqueue(currentPosition); 
            var direction = Direction.Right; 
 
            DrawScreen(screenSize); 
            ShowScore(score); 
 
            while (MoveSnake(snake, currentPosition, snakeLength, screenSize)) 
            { 
                Thread.Sleep(speed); 
                direction = GetDirection(direction); 
                currentPosition = GetNextPosition(direction, currentPosition); 
 
                if (currentPosition.Equals(foodPosition)) 
                { 
                    foodPosition = Point.Empty; 
                    snakeLength++; 
                    score += 10; 
                    ShowScore(score); 
                } 
 
                if (foodPosition == Point.Empty) 
                { 
                    foodPosition = ShowFood(screenSize, snake); 
                } 
            } 
 
            Console.ResetColor(); 
            Console.SetCursorPosition(screenSize.Width/2 - 4, screenSize.Height/2); 
            Console.Write("Game Over"); 
            Thread.Sleep(2000); 
            Console.ReadKey(); 
        } .

Más Información

Se puede encontrar una descripción más detallada del código del ejemplo en:

Juego Snake en aplicación de consola