Sto lavorando a un gioco Tetris con tecnologia Arduino. Per tenere traccia dei pezzi caduti e diventare fisso ho un array di byte
byte theGrid[] = { B00000000, B00000000, B00000000, B00000000, B00000000, ...
Funziona alla grande quando il pozzetto è largo solo 8 LED, ma ho bisogno che sia largo 16. È cè un modo per eseguire operazioni bit per bit su un numero a 16 bit, come uno short? Ho provato a dichiarare theGrid come short, ma ricevo questo errore indipendentemente da quello che faccio.
tetris:62: error: "B0000000000000000" was not declared in this scope
Il motivo per cui stavo usando byte è che potevo usare bitread e bitset. Quindi, se un pezzo L scende e atterra, posso impostare i bit appropriati in questo modo
bitSet(theGrid[pixelY], 15-pixelX);
e finire con
B1000000000000000, B1110000000000000
Commenti
- Non ci sono operazioni bit per bit in quel codice.
- @ IgnacioVazquez-Abrams Ho modificato lOP
Risposta
Il problema principale che stai riscontrando è che i letterali binari non esistono ” in C ; le librerie Arduino aggirano questo problema avendo ogni singolo valore binario da 1 “b0 a 8″ b1111_1111 definita come macro in cores/arduino/binary.h
. La soluzione ovvia consiste nellusare invece letterali ottali, decimali o esadecimali.
unsigned short theGrid[] = { 00, 0, 0x0, ... };
Le operazioni bit per bit funzionano normalmente.
theGrid[pixelY] |= _BV(15 - pixelX);
Commenti
- Grazie, ho ricevuto una risposta simile su stackoverflow . Penso che funzionerà 🙂