Pracuję nad grą Tetris opartą na Arduino. Aby śledzić upadłe elementy i zostanie naprawiony Mam tablicę bajtów
byte theGrid[] = { B00000000, B00000000, B00000000, B00000000, B00000000, ...
Działa to świetnie, gdy studnia ma tylko 8 diod LED szerokości, ale potrzebuję 16. istnieje sposób wykonywania operacji bitowych na 16-bitowych liczbach, takich jak short? Próbowałem po prostu zadeklarować theGrid jako krótki, ale otrzymuję ten błąd bez względu na to, co zrobię.
tetris:62: error: "B0000000000000000" was not declared in this scope
Powodem, dla którego używałem bajtu, jest to, że mogłem używać bitread i bitset. Więc jeśli element L opadnie i wyląduje, mogę ustawić odpowiednie bity w ten sposób
bitSet(theGrid[pixelY], 15-pixelX);
i otrzymać
B1000000000000000, B1110000000000000
Komentarze
- W tym kodzie nie ma operacji bitowych.
- @ IgnacioVazquez-Abrams Edytowałem OP
Odpowiedź
Głównym problemem, jaki masz, jest to, że literały binarne nie istnieją w C ; biblioteki Arduino omijają ten problem, mając każdą pojedynczą wartość binarną z 1 „b0 do 8” b1111_1111 zdefiniowane jako makro w cores/arduino/binary.h
. Oczywistym obejściem jest użycie zamiast tego literałów ósemkowych, dziesiętnych lub szesnastkowych.
unsigned short theGrid[] = { 00, 0, 0x0, ... };
Operacje bitowe działają normalnie.
theGrid[pixelY] |= _BV(15 - pixelX);
Komentarze
- Dzięki, mam podobną odpowiedź na stackoverflow . Myślę, że to zadziała 🙂