C#のコンソールテトリスプログラミング。駒が動く作りますか?

StackOverflow https://stackoverflow.com/questions/2002623

  •  18-09-2019
  •  | 
  •  

質問

私は私の最初のゲーム、コンソールテトリスを作るしようとしています。 私は、xとyの整数を含むクラスのブロックを、持っています。それから私は、クラスPiece : List<Block>、およびクラスPieces : List<Piece>を持っています。

私はすでにランダムに断片を生成し、それらを秒ごとに1つの行を落ちることができます。私はまだ、衝突検出に取得していないが、私はすでに、後でそれをうまくする方法を知っていると思います。 問題は、私は作品を制御する方法がわからないということです。私は、キーボードフックについて少し読んで、いくつかのテトリスのチュートリアルを確認し、それらのほとんどは、実際にイベントハンドリングなどを簡素化するWindowsフォーム、のためのものであるしました。

だから... ...あなたは私のコンソール上の部分を制御するパスの先頭を指していただけますか?ありがとう!

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 W /非ブロッキング・キーボード入力・イン・C /

基本的に、あなたがチェックします Console.KeyAvailableするあなたのwhileループにして、キーが押されたものに応じて作品を移動します。


            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