Jeg jobber med et Arduino-drevet Tetris-spill. Å holde styr på brikkene som har falt og bli fikset Jeg har en rekke byte
byte theGrid[] = { B00000000, B00000000, B00000000, B00000000, B00000000, ...
Dette fungerer bra når brønnen bare er 8 lysdioder bred, men jeg trenger at den er 16 bred. det er en måte å utføre bitvise operasjoner på et 16-biters nummer, som en kort? Jeg prøvde bare å erklære theGrid som en kort, men jeg får denne feilen uansett hva jeg gjør.
tetris:62: error: "B0000000000000000" was not declared in this scope
Årsaken til at jeg brukte byte er at jeg kunne bruke bitread og bitset. Så hvis et L-stykke kommer ned og lander, kan jeg bitsett de aktuelle bitene som dette
bitSet(theGrid[pixelY], 15-pixelX);
og ende opp med
B1000000000000000, B1110000000000000
Kommentarer
- Det er ingen bitvise operasjoner i den koden.
- @ IgnacioVazquez-Abrams Jeg redigerte OP
Svar
Hovedproblemet du har er at binære bokstaver ikke eksisterer i C ; Arduino-bibliotekene kommer rundt dette ved å ha hver eneste binære verdi fra 1 «b0 til 8″ b1111_1111 definert som en makro i cores/arduino/binary.h
. Den åpenbare løsningen er å bruke oktale, desimal eller heksadesimale bokstaver i stedet.
unsigned short theGrid[] = { 00, 0, 0x0, ... };
Bitvis operasjoner fungerer som normalt.
theGrid[pixelY] |= _BV(15 - pixelX);
Kommentarer
- Takk, jeg fikk et lignende svar på stackoverflow . Jeg tror dette vil fungere 🙂