C # console de programmation tetris. Faire les pièces se déplacent?
Question
Je suis en train de faire mon premier jeu, un tetris de la console.
J'ai un bloc de classe, qui contient des entiers x et y. Ensuite, j'ai un Piece : List<Block>
de classe, et une Pieces : List<Piece>
de classe.
Je peux déjà générer aléatoirement des morceaux et les faire tomber une ligne par seconde. Je ne ai toujours pas eu à la détection des collisions, mais je pense que je sais déjà comment ça plus tard. Le problème est que je ne sais pas comment contrôler les pièces. J'ai lu la manipulation et comme un peu d'accrochage du clavier et vérifié quelques tutoriels tetris, mais la plupart d'entre eux sont des fenêtres formes, ce qui simplifie vraiment les événements.
Alors ... Pourriez-vous s'il vous plaît me indiquer le début du chemin de contrôler les morceaux sur une console? Merci!
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.
}
}
}
La solution
Ce que vous recherchez est entrée de la console non-blocage.
Voici un exemple:
http: // www .dutton.me.uk / 2009/02/24 / non-blocage de clavier d'entrée en c /
En gros, vous consultez Console.KeyAvailable dans votre boucle while puis déplacer la pièce selon ce que touche a été pressée.
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;
}
}