سؤال

أحاول أن أجعل لعبتي الأولى، تتريس وحدة التحكم. لدي كتلة فئة، تحتوي على الأعداد الصحيحة X و Y. ثم لدي فصل Piece : List<Block>, ، وفئة Pieces : List<Piece>.

يمكنني بالفعل توليد القطع بشكل عشوائي، وجعلها تقع صف واحد في الثانية. ما زلت لم أحصل على اكتشاف الاصطدامات، لكنني أعتقد أنني أعرف بالفعل كيفية عملها في وقت لاحق. المشكلة هي أنني لا أعرف كيفية التحكم في القطع. لقد قرأت قليلا عن ربط لوحة المفاتيح وفحص بعض البرامج التعليمية Tetris، ولكن معظمها في نماذج ويندوز، والتي تبسط حقا التعامل مع الأحداث ومثل هذا.

لذلك ... هل يمكن أن توجه بي بداية المسار للتحكم في القطع على وحدة تحكم؟ شكرا!

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.
                }
            }
        }
هل كانت مفيدة؟

المحلول

ما تبحث عنه هو إدخال وحدة التحكم غير المحظورة.

هنا مثال:

http://www.dutton.me.uk/2009/02/24/non-blocking-keyboard-in-in-c/

أساسا، سوف تحقق console.keyavailable. في أثناء حلقة الخاص بك ثم حرك القطعة وفقا لما تم الضغط عليه.


            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;
                }
            }

نصائح أخرى

يمكنك استخدام خطاف لوحة مفاتيح منخفض المستوى كما هو موضح هنا

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top