Pregunta

Estoy tratando de hacer mi primer juego, un tetris consola. Tengo un bloque de clase, que contiene X e Y enteros. Entonces tengo una Piece : List<Block> clase, y una Pieces : List<Piece> clase.

Ya puedo generar aleatoriamente pedazos, y hacerlos caer una fila por segundo. Todavía no llegué a la detección de colisiones, pero creo que ya sé cómo hacerlo funcionar más tarde. El problema es que no sé cómo controlar las piezas. He leído un poco acerca de enganche teclado y comprobado algunos tutoriales Tetris, pero la mayoría de ellos son de formas de las ventanas, que realmente simplifica el manejo de eventos y el ejemplo.

Así que ... ¿Me podría indicar el comienzo de la ruta de acceso al control de las piezas en una consola? Gracias!

public class Program
    {
        static void Main(string[] args)
        {
            const int limite = 60;
            Piezas listaDePiezas = new Piezas();    //list of pieces
            bool gameOver = false;
            Pieza pieza;    //piece
            Console.CursorVisible = false;
            while (gameOver != true)
            {
                pieza = CrearPieza();    //Cretes a piece
                if (HayColision(listaDePiezas, pieza) == true)   //if there's a collition
                {
                    gameOver = true;
                    break;
                }
                else
                    listaDePiezas.Add(pieza);    //The piece is added to the list of pieces
                while (true)    //This is where the piece falls. I know that I shouldn't use a sleep. I'll take care of that later
                {
                    Thread.Sleep(1000);
                    pieza.Bajar();    //Drop the piece one row.
                    Dibujar(listaDePiezas);    //Redraws the gameplay enviroment.
                }
            }
        }
¿Fue útil?

Solución

Lo que se busca es la consola de entrada no bloqueante.

Aquí es un ejemplo:

http: // www .dutton.me.uk / 2009/02/24 / no bloqueo-teclado-input-en-c /

Básicamente, se comprobaría Console.KeyAvailable en su bucle de tiempo y luego mover la pieza de acuerdo con lo que ha pulsado la tecla.


            if (Console.KeyAvailable)
            {
                ConsoleKeyInfo cki = Console.ReadKey();
                switch (cki.Key)
                {
                    case ConsoleKey.UpArrow:
                        // not used in tetris game?
                        break;
                    case ConsoleKey.DownArrow:
                        // drop piece
                        break;
                    case ConsoleKey.LeftArrow:
                        // move piece left
                        break;
                    case ConsoleKey.RightArrow:
                        // move piece right
                        break;
                }
            }

Otros consejos

Se puede usar un gancho de teclado de bajo nivel, como se muestra aquí

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top