C # consola Tetris programação. Fazendo o movimento peças?
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.
}
}
}
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