C # تحكم تتريس البرمجة. جعل القطع تتحرك؟
سؤال
أحاول أن أجعل لعبتي الأولى، تتريس وحدة التحكم. لدي كتلة فئة، تحتوي على الأعداد الصحيحة 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;
}
}
نصائح أخرى
يمكنك استخدام خطاف لوحة مفاتيح منخفض المستوى كما هو موضح هنا