Francescu e Dume

THE ROAD TOWARDS FREEDOM

TrèsTriste -> un Tetris Like en C#


C# nom sonnant particulièrement bien. Le doux son de l’hiver… Les hirondelles qui volent… Enfin tout cela pour dire qu’en fait du C# c’est la première fois que je vais en faire. Premier coup d’oeil sur l’IDE Visual 2003 et hop, magique tout simplement: Interface comme VB et codage comme C++.
Début du Tetris Tres Triste! Et quelle aventure… Après quelques essais cela s’annonce chaud bouillant

Caracteristiques

  • Langages : C# / DirectX (pour le son)
  • Date : 17 mars 2006
  • Source : (Bientôt)
  • Executable : (Bientôt)
  • Auteur : Francescu SANTONI

Un peu de reflexion

Comment représenter le jeu?
Mon idée est de simuler une grille de 30px * 30px:

Donc creation d’un groupBox et ensuite gridSize = 30; 30.
Ensuite creer une variable qui modelise l’état de ma grille:
public int[,] blockMap = new int[12, 12];
const int NB_LIGNES = 11;
const int NB_COLONNES = 11;

J’ai mis plutot en NB_LIGNES et COLONNES l’indice maximum dans la variable, chose n’étant pas forcément la meilleure à faire mais bon.
Arbitrairement j’ai choisis 12×12 (12 lignes 12 colonnes) au début, donc j’ai ajouter 144 Labels que je place ensuite dans le Form1_Load:
for (i = 0; i < (NB_LIGNES + 1) * (NB_COLONNES + 1); i++)
{
y = i / (NB_COLONNES + 1);
x = i % (NB_COLONNES + 1);
groupBox1.Controls[i].Left = x * 30;
groupBox1.Controls[i].Top = y * 30;
}

On a un lien x = i Modulo LeNombreDeColonnes
y = i / LeNombreDeColonnes

L’utilisation du for au lieu d’un foreach est du au fait que je ne suis pas certain de comment récuperer l’indice du control.

La methode drawMap

J’ai creer un lien entre la variable int[,] blockMap et ce qui ce passe visuellement.
C’est la méthode drawMap qui change la couleur des labels selon les contenus de blockMap[i, j]
Le tout est de creer une variable BLOCK de type couleur contenant l’équivalent couleur du numero de blockMap;

Sauf si le block est en train de descendre pour plusieurs raisons il faut un code différent, mais c’est surtout pour la suite car pour tester les interractions/colisions il ne faut pas prendre en compte le block descendant comme un block figé au sol.

D’abord en déclaration: const int BLOCK_DOWN = 20200;

System.Drawing.Color[] BLOCK =
{
System.Drawing.Color.White, System.Drawing.Color.Blue, System.Drawing.Color.Green, System.Drawing.Color.Red, System.Drawing.Color.YellowGreen, System.Drawing.Color.Turquoise, System.Drawing.Color.Violet, System.Drawing.Color.Gold
};
Puis la méthode:
private void drawMap()
{
int i, j;
for (i = 0; i <= NB_COLONNES; i++)
{
for (j = 0; j <= NB_LIGNES; j++)
{
switch(this.blockMap[i, j])
{
case BLOCK_DOWN:
groupBox1.Controls[i + j * (NB_COLONNES + 1)].BackColor = laBarre.couleur;
break;
default:
groupBox1.Controls[i + j * (NB_COLONNES + 1)].BackColor = BLOCK[this.blockMap[i, j]];
break;
}
}
}
}

Les Barres

Creation d’une petite classe, il nous faut, une couleur, un type (les differentes formes des barres de tetris), une position dans la grille (x et y), une direction (orientation plutot mais bon) et surtout un mask.
Un mask ? Je sais pas vraiment si cela s’appel comme ca mais moi je vois la barre en faites qui prend une place de 4×4 avec des endroits vide et pleins. (donc en Bool)

Voir le code de la classe Barre

Ensuite dans la form je vois une barre qui descent et d’autres placées, on peut négliger les barres placées qui seront seulement dans int blockMap[,].
Donc on creer laBarre une variable de l’instance Form1. Ensuite dans le Form1_Load : laBarre = new laBarre(rnd.Next(1,8)); en ayant pris soin d’initialiser rnd: Random rnd = new Random();

La Descente

Tout d’abord un petit timer: timer1

  • A chaque timer on va tester si la barre peut descendre ou pas.
    • Si elle descend pas on stop la barre, on met a jour blockMap et on crée une nouvelle barre.
    • Si elle descend on update juste le blockMap en incrementant laBarre.y.
  • Puis on remet à jour l’affichage avec drawMap

Autres Fonctionnalités

Pause (espace) Rotations des barres avec verifications d’interractions Musique (Tetris Techno remix :))

(SOURCES)

Pas encore de commentaires. Soyez le premier

Laisser une réponse