Programmazione C # console tetris. Rendere i pezzi si muovono?
Domanda
Sto cercando di fare il mio primo gioco, un tetris console.
Ho una classe di blocco, che contiene x e y numeri interi. Poi ho un Piece : List<Block>
di classe, e un Pieces : List<Piece>
di classe.
posso già generare casualmente pezzi, e farli cadere una riga al secondo. Io ancora non sono riuscito a rilevamento collisioni, ma penso che so già come lavorare in un secondo momento. Il problema è che non so come controllare i pezzi. Ho letto un po 'di aggancio tastiera e controllato alcuni tutorial tetris, ma la maggior parte di loro sono per Windows Forms, che in realtà semplifica eventi movimentazione e il come.
Quindi ... Potresti per favore mi punto l'inizio del percorso per il controllo dei pezzi su una console? Grazie!
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.
}
}
}
Soluzione
Quello che state cercando è di input della console non-blocking.
Ecco un esempio:
http: // www .dutton.me.uk / 2009/02/24 / non-blocking-tastiera-input-in-c /
In sostanza, si dovrebbe verificare Console.KeyAvailable nel ciclo while e quindi spostare il pezzo in base a ciò che è stato premuto il tasto.
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;
}
}
Altri suggerimenti
È possibile utilizzare un gancio basso livello della tastiera come mostrato qui