Ich arbeite an einem Tetris-Spiel mit Arduino-Unterstützung, um die heruntergefallenen Teile im Auge zu behalten und werde fest Ich habe ein Array von Bytes
byte theGrid[] = { B00000000, B00000000, B00000000, B00000000, B00000000, ...
Dies funktioniert gut, wenn der Brunnen nur 8 LEDs breit ist, aber ich brauche, dass er 16 breit ist Es gibt eine Möglichkeit, bitweise Operationen an einer 16-Bit-Zahl durchzuführen, z. B. an einem Kurzschluss. Ich habe versucht, das Gitter nur als Kurzschluss zu deklarieren, aber ich erhalte diesen Fehler, egal was ich tue.
tetris:62: error: "B0000000000000000" was not declared in this scope
Der Grund, warum ich Byte verwendet habe, ist, dass ich Bitread und Bitset verwenden konnte. Wenn also ein L-Stück herunterkommt und landet, kann ich die entsprechenden Bits wie diese setzen
bitSet(theGrid[pixelY], 15-pixelX);
und am Ende
B1000000000000000, B1110000000000000
Kommentare
- Dieser Code enthält keine bitweisen Operationen.
- @ IgnacioVazquez-Abrams Ich habe das OP bearbeitet
Antwort
Das Hauptproblem, das Sie haben, ist, dass binäre Literale nicht existieren in C; Die Arduino-Bibliotheken umgehen dies, indem sie jeden einzelnen Binärwert von 1 haben „b0 bis 8″ b1111_1111 definiert als Makro in cores/arduino/binary.h
. Die naheliegende Problemumgehung besteht darin, stattdessen oktale, dezimale oder hexadezimale Literale zu verwenden.
unsigned short theGrid[] = { 00, 0, 0x0, ... };
Bitweise Operationen funktionieren wie gewohnt.
theGrid[pixelY] |= _BV(15 - pixelX);
Kommentare
- Danke, ich habe eine ähnliche Antwort auf stackoverflow erhalten . Ich denke das wird funktionieren 🙂