Jeg arbejder på et Arduino-drevet Tetris-spil. At holde styr på de brikker, der er faldet og bliver fikset Jeg har en række bytes
byte theGrid[] = { B00000000, B00000000, B00000000, B00000000, B00000000, ...
Dette fungerer godt, når brønden kun er 8 lysdioder bred, men jeg har brug for at være 16 bred. der er en måde at udføre bitvise operationer på et 16 bit nummer, som et kort? Jeg forsøgte bare at erklære theGrid som en kort, men jeg får denne fejl, uanset hvad jeg gør.
tetris:62: error: "B0000000000000000" was not declared in this scope
Årsagen til, at jeg brugte byte, var, at jeg kunne bruge bitread og bitset. Så hvis et L-stykke kommer ned og lander, kan jeg bitsæt de relevante bits som dette
bitSet(theGrid[pixelY], 15-pixelX);
og ende med
B1000000000000000, B1110000000000000
Kommentarer
- Der er ingen bitvise operationer i den kode.
- @ IgnacioVazquez-Abrams Jeg redigerede OP
Svar
Det største problem, du har, er, at binære bogstaver ikke findes i C ; Arduino-bibliotekerne omgår dette ved at have hver eneste binære værdi fra 1 “b0 til 8″ b1111_1111 defineret som en makro i cores/arduino/binary.h
. Den åbenlyse løsning er at bruge oktale, decimal- eller hexadecimale bogstaver i stedet.
unsigned short theGrid[] = { 00, 0, 0x0, ... };
Bitvise handlinger fungerer som normalt.
theGrid[pixelY] |= _BV(15 - pixelX);
Kommentarer
- Tak, jeg fik et lignende svar på stackoverflow . Jeg tror, dette vil fungere 🙂