2010-01-04 4 views
1

J'essaie de faire mon premier jeu, un tetris de console. J'ai un bloc de classe, qui contient des entiers x et y. Ensuite, j'ai une classe Piece : List<Block>, et une classe Pieces : List<Piece>.Programmation de tetris de console C#. Faire bouger les pièces?

Je peux déjà générer aléatoirement des pièces et les faire tomber une ligne par seconde. Je n'ai toujours pas eu de détection de collisions, mais je pense que je sais déjà comment l'utiliser plus tard. Le problème est que je ne sais pas comment contrôler les pièces. J'ai lu un peu sur l'accrochage au clavier et vérifié quelques tutoriels tetris, mais la plupart d'entre eux sont pour les formulaires Windows, ce qui simplifie vraiment la gestion des événements et les autres. Alors ... Pouvez-vous s'il vous plaît me signaler le début du chemin pour contrôler les pièces sur une console? Merci!

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. 
       } 
      } 
     } 
+0

Qu'est-ce que vous utilisez pour votre interface utilisateur? Est-ce une application de console? –

+0

Je recommanderais de ne pas faire une application de console pour cela parce que vous apprendrez des choses plus utiles en faisant une application visuelle. C'est peut-être plus facile à certains égards, mais je ne suis pas sûr. –

+0

Oui. Je n'utilise rien en ce moment pour mon interface utilisateur. Jusqu'à présent, il s'agit juste d'un morceau de # tombant du milieu de l'écran. Merci CrazyJuggler, j'y ai pensé mais je voulais simplement m'en tenir aux bases maintenant. Travailler autour de la rotation, des collisions, du contrôle des pièces etc ... Je vais faire une version Windows après avoir fini avec celle-ci. – Uri

Répondre

12

Ce que vous cherchez est entrée de la console non-bloquant.

Voici un exemple:

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

Fondamentalement, vous vérifiez Console.KeyAvailable dans votre boucle while puis déplacer la pièce selon ce que touche a été pressée.


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

Merci, ressemble à ce que je cherchais. – Uri

+0

En effet, c'était exactement ce que je cherchais. M'a aidé beaucoup. Merci! – Uri

+0

Hahaha, merci pour le lien vers mon blog, je viens juste de le repérer dans les statistiques de mon serveur. – Dutts

1

Vous pouvez utiliser un clavier bas niveau crochet comme indiqué here

+0

Merci, je vais vérifier. – Uri