Jag jobbar på ett Arduino-driven Tetris-spel. Att hålla reda på de bitar som har fallit och fixas har jag en rad byte
byte theGrid[] = { B00000000, B00000000, B00000000, B00000000, B00000000, ...
Detta fungerar bra när brunnen bara är 8 lysdioder bred, men jag behöver den vara 16 bred. finns det ett sätt att utföra bitvisa operationer på ett 16-bitars nummer, som en kort? Jag försökte bara förklara theGrid som en kort, men jag får det här felet oavsett vad jag gör.
tetris:62: error: "B0000000000000000" was not declared in this scope
Anledningen till att jag använde byte är att jag kunde använda bitread och bitset. Så om en L-bit kommer ner och landar kan jag bitset lämpliga bitar så här
bitSet(theGrid[pixelY], 15-pixelX);
och sluta med
B1000000000000000, B1110000000000000
Kommentarer
- Det finns inga bitvisa operationer i den koden.
- @ IgnacioVazquez-Abrams Jag redigerade OP
Svar
Huvudproblemet du har är att binära bokstäver inte finns i C ; Arduino-biblioteken kringgår detta genom att ha varje enskilt binärt värde från 1 ”b0 till 8″ b1111_1111 definierat som ett makro i cores/arduino/binary.h
. Den uppenbara lösningen är att använda oktala, decimal- eller hexadecimala bokstäver istället.
unsigned short theGrid[] = { 00, 0, 0x0, ... };
Bitvisa funktioner fungerar som vanligt.
theGrid[pixelY] |= _BV(15 - pixelX);
Kommentarer
- Tack, jag fick ett liknande svar på stackoverflow . Jag tror att det kommer att fungera 🙂