Etape 5: Programmation du jeu
Décrivant les formes
Il y a sept tetrominos, chacune avec 4 pixels et chacune avec quatre rotations possibles. Nous stockons tout cela dans un tableau multidimensionnel : la première dimension, consistant en sept formes, la deuxième dimension contenant les quatre rotations pour chaque forme, les descriptions de quatre pixels contenant troisième qui consistent en un X et Y coordonner.
Par exemple, cet article décrit la forme de « T » :
/* T */ {
/ * angle 0 * / {{0,1}, {1, 1}, {2, 1}, {1,2}},
/ * angle 90 * / {{1,0}, {1, 1}, {2, 1}, {1,2}},
/ * angle 180 * / {{1,0} {0,1}, {1, 1}, {2, 1}},
/ * angle 270 * / {{1,0} {0,1}, {1, 1}, {1,2}}
}
Suivi de la pièce Active
Pour garder une trace de l’ouvrage actuellement en jeu, le programme tient à jour une variable activePiece . Il s’agit de l’index de la forme active, le niveau le plus haut du tableau. Il maintient également une rotation variable contenant l’index de la rotation actuelle. Une aucune variable pistes jusqu’à gauche ou à droite (0-7) chaque pièce est et aucune traque dans quelle mesure (0-15) le Conseil, il est tombé. Pour dessiner la pièce active le programme ajoute que x et Y compenser les valeurs de coordonnées X et Y de chaque pixel, tiré de la rotation actuelle de la pièce sélectionnée.
Les pièces fixes de suivi
Le programme utilise un tableau de 16 octets pour suivre les pièces fixes, avec chaque octet représentant une ligne. Par exemple, le tableau ci-dessous représente une forme de L, assis au centre des deux lignes de fond (comme indiqué par les bits à 1 dans les deux derniers octets) :
sampleGrid Byte [16] ={
B00000000,
B00000000,
B00000000,
B00000000,
B00000000,
B00000000,
B00000000,
B00000000,
B00000000,
B00000000,
B00000000,
B00000000,
B00000000,
B00000000,
B00100000,
B00111000
};
Détection de collision
Lorsqu’une tentative est faite pour déplacer la pièce active, le programme vérifie d’abord la nouvelle position contre le tableau de pièces fixes. S’il n’y a aucune collision, le déménagement est accueilli et la matrice est redessinée. Si une collision est détectée lors de la tentative pour aller à gauche, à droite, ou de faire pivoter, l’action est interdite. Si une collision est détectée lors de la tentative de laisser tomber une pièce, la pièce devient fixe en position et est ajoutée à la matrice de pixels fixes.
Laisser tomber les morceaux automatiquement
Le rythme du jeu est contrôlé par les variables gravityTrigger et stepCounter . Chaque boucle du programme incrémente stepCounteret chaque fois stepCounter atteint le nombre stocké dans gravityTrigger, il abandonne le morceau active de niveau.
Comme le jeu progresse, gravityTrigger est réduite pour que la pièce active tombe plus fréquemment jusqu'à ce qu’enfin il est en baisse dans chaque boucle du programme.
Chaque fois qu’un élément d’actif est fixé à la grille, le programme vérifie d’octets/Lignes complètes (B11111111). S’il en trouve, il clignote eux marche trois fois, puis supprime et supprime les lignes ci-dessus pour combler le vide.
Dépannage
Si les pièces ne sont pas tomber de haut en bas, mais plutôt aller d’un côté à l’autre, changer la valeur passée dans les lignes « matrixTop.setRotation(1); » et/ou « matrixBottom.setRotation(1); » dans la boucle « setup() ».
Si les morceaux commencent dans la matrice mal, changer l’emplacement physique de chaque matrice ou inverser les adresses déclarées dans le « matrixTop.begin(0x70); » et « matrixBottom.begin(0x71); » les lignes de la boucle « setup() ».
Si certaines lignes ou des colonnes ne s’allume pas, agitez la matrice de LED minie dans les entêtes des femelles. Ils ne peuvent pas faire bon contact.