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.
                }
            }
        }
War es hilfreich?

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top