Pergunta

Eu estou tentando fazer o meu primeiro jogo, um console de Tetris. Eu tenho uma classe Block, que contém x e y inteiros. Então eu tenho um Piece : List<Block> classe, e uma Pieces : List<Piece> classe.

Já pode gerar aleatoriamente pedaços, e fazê-los cair uma linha por segundo. Eu ainda não cheguei a detecção de colisões, mas eu acho que eu já sabe como trabalhar com isso mais tarde. O problema é que eu não sei como controlar as peças. Eu li um pouco sobre enganchar teclado e verificado alguns tutoriais Tetris, mas a maioria deles são para Windows Forms, o que realmente simplifica tratamento eventos e tal.

Então ... Você poderia por favor me aponte o início do caminho para controlar as peças em um console? Obrigado!

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.
                }
            }
        }
Foi útil?

Solução

O que você está procurando não é o bloqueio de entrada de console.

Aqui está um exemplo:

http: // www .dutton.me.uk / 2009/02/24 / não-bloqueio-teclado de entrada-em-c /

Basicamente, você iria verificar Console.KeyAvailable em seu loop while e depois mover a peça de acordo com qual tecla foi pressionada.


            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;
                }
            }

Outras dicas

Você pode usar um gancho de teclado de baixo nível, como mostrado aqui

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top