Estoy trabajando en un juego de Tetris con Arduino. Para realizar un seguimiento de las piezas que se han caído y se fija Tengo una matriz de bytes
byte theGrid[] = { B00000000, B00000000, B00000000, B00000000, B00000000, ...
Esto funciona muy bien cuando el pozo tiene solo 8 LED de ancho, pero necesito que tenga 16 de ancho. ¿Hay alguna manera de realizar operaciones bit a bit en un número de 16 bits, como un short? Intenté declarar theGrid como un short, pero «obtengo este error sin importar lo que haga.
tetris:62: error: "B0000000000000000" was not declared in this scope
La razón por la que estaba usando byte es para poder usar bitread y bitset. Entonces, si una pieza L baja y aterriza, puedo bitset los bits apropiados como este
bitSet(theGrid[pixelY], 15-pixelX);
y terminar con
B1000000000000000, B1110000000000000
Comentarios
- No hay operaciones bit a bit en ese código.
- @ IgnacioVazquez-Abrams Edité el OP
Respuesta
El principal problema que tiene es que literales binarios no existen en C ; las bibliotecas de Arduino evitan esto al tener cada valor binario de 1 «b0 a 8″ b1111_1111 definido como una macro en cores/arduino/binary.h
. La solución obvia es utilizar literales octales, decimales o hexadecimales.
unsigned short theGrid[] = { 00, 0, 0x0, ... };
Las operaciones bit a bit funcionan normalmente.
theGrid[pixelY] |= _BV(15 - pixelX);
Comentarios
- Gracias, obtuve una respuesta similar en stackoverflow . Creo que esto funcionará 🙂