Je travaille sur un jeu Tetris alimenté par Arduino. Pour garder une trace des pièces qui sont tombées et devenir fixe Jai un tableau doctets
byte theGrid[] = { B00000000, B00000000, B00000000, B00000000, B00000000, ...
Cela fonctionne très bien quand le puits na que 8 LED de large, mais jai besoin quil soit de 16 de large. existe-t-il un moyen deffectuer des opérations au niveau du bit sur un nombre de 16 bits, comme un court? Jai essayé de déclarer theGrid comme un court, mais jobtiens cette erreur quoi que je fasse.
tetris:62: error: "B0000000000000000" was not declared in this scope
La raison pour laquelle jutilisais byte est que je pourrais utiliser bitread et bitset. Donc, si un morceau L descend et atterrit, je peux mettre en bits les bits appropriés comme ceci
bitSet(theGrid[pixelY], 15-pixelX);
et finir par
B1000000000000000, B1110000000000000
Commentaires
- Il ny a pas dopérations au niveau du bit dans ce code.
- @ IgnacioVazquez-Abrams Jai édité lOP
Réponse
Le principal problème que vous rencontrez est que les littéraux binaires nexistent pas en C ; les bibliothèques Arduino contournent ce problème en ayant chaque valeur binaire de 1 « b0 à 8″ b1111_1111 défini comme une macro dans cores/arduino/binary.h
. La solution évidente consiste à utiliser à la place des littéraux octaux, décimaux ou hexadécimaux.
unsigned short theGrid[] = { 00, 0, 0x0, ... };
Les opérations au niveau du bit fonctionnent normalement.
theGrid[pixelY] |= _BV(15 - pixelX);
Commentaires
- Merci, jai obtenu une réponse similaire sur stackoverflow . Je pense que cela fonctionnera 🙂