2 votes

Comment aborder le dessin de formes en C# pour faire un clone de tetris ?

Je tiens tout d'abord à préciser que je n'utilise PAS XNA ou LINQ dans ce petit projet. En gros, je veux faire un clone de Tetris en utilisant une application Windows C#. J'ai déjà dessiné ma grille, la taille de ma boîte à images est de 250x500, chaque bloc carré faisant 25 pixels x 25 pixels.

Je suis un amateur du dessin de formes. Je peux dessiner des lignes, des rectangles, des cercles, des ellipses et des polygones sur une grille, et je peux les remplir avec une couleur, etc. C'est tout. Je ne peux pas faire grand-chose d'autre avec le dessin. Des formes de base en d'autres termes, en utilisant les points que j'ai créés pour dessiner des polygones tels que la forme "T" de tetris.

Ma question est la suivante : lorsque je crée mes formes de tétris, dois-je les dessiner en utilisant les méthodes de dessin en C# ou dois-je créer et importer des images bitmap des formes de tétris et les utiliser pour créer mon clone de tétris ?

Une fois que j'ai compris comment dessiner des formes, je peux trouver le reste tout seul. Par ailleurs, lorsque je travaille sur la grille de jeu, dois-je hériter des propriétés de la boîte à images de ma classe appelée GameGrid ?

0voto

MD.Unicorn Points 8354

Il est préférable d'utiliser des images bitmap et prérendu, car cela accélère le rendu de chaque image. C'est ce que font la plupart des jeux de ce type.

0voto

rhughes Points 3325

La façon dont vous rendez les formes aura un effet sur votre détection de collision. Par exemple, si vous utilisez un bitmap de la forme T vous devrez disposer d'une méthode permettant de détecter quand la T est entré en collision, peut-être par collision par pixel ou par une structure distincte qui maintient la forme spécifique. En revanche, si vous maintenez simplement une liste des blocs utilisés, la détection des collisions devient beaucoup plus simple.

Si vous avez vos formes sous forme de matrice de blocs, comme dans le jeu original, vous trouverez le rendu, la manipulation et la collision beaucoup plus faciles.

Par exemple, jetez un coup d'œil au pseudo-code suivant :

class Shape
{
    bool [3][3] Blocks;

    Pos pos;
}

Shape T = new Shape();

T.Blocks[0][0] = true;
T.Blocks[0][1] = true;
T.Blocks[0][2] = true;

T.Blocks[1][0] = false;
T.Blocks[1][1] = true;
T.Blocks[1][2] = false;

T.Blocks[2][0] = false;
T.Blocks[2][1] = true;
T.Blocks[2][2] = false;

Lors du rendu, vous pouvez faire quelque chose du type suivant :

foreach(Shape s in currentBlocks)
{
    for(int x = 0; i < 3)
    {
        for(int y = 0; y < 3; y++)
        {
            if(s.Blocks[x][y])
            {
                gameGrid.Render(s.Pos.X + x, s.Pos.Y + y);
            }
        }
    }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X