C # Konsole tetris Programmierung. Machen die Stücke bewegen?
Frage
Ich versuche, mein erstes Spiel, eine Konsole tetris zu machen.
Ich habe eine Klasse Block, die x und y ganze Zahlen enthalten. Dann habe ich eine Klasse Piece : List<Block>
, und eine Klasse Pieces : List<Piece>
.
Ich kann schon zufällig Stücke erzeugen, und sie pro Sekunde eine Reihe fallen. Ich habe noch nicht zu Kollisionen Erkennung, aber ich denke, dass ich schon wissen, wie es später zu erarbeiten. Das Problem ist, dass ich weiß nicht, wie die Stücke zu steuern. Ich habe ein bisschen über Tastatur Einhaken gelesen und geprüft einige tetris-Tutorials, aber die meisten von ihnen sind für Windows Forms, die wirklich die Behandlung von Ereignissen und die so vereinfacht.
So ... Könnten Sie mir bitte den Anfang des Weges weisen auf einer Konsole, die Stücke zu steuern? Dank!
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.
}
}
}
Lösung
Was Sie suchen ist nicht blockierend Konsole Eingang.
Hier ist ein Beispiel:
http: // www .dutton.me.uk / 2009/02/24 / non-blocking-Tastatur-Eingabe-in-c /
Im Grunde würden Sie überprüfen Console.KeyAvailable in Ihrer while-Schleife und dann das Stück bewegt nach dem, was Taste gedrückt wurde.
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;
}
}
Andere Tipps
könnten Sie verwenden einen Low-Level-Tastatur-Hook, wie gezeigt hier