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.
                }
            }
        }
È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top