Ik werk aan een door Arduino aangedreven Tetris-spel. Om de gevallen bij te houden en word gerepareerd Ik heb een array van bytes
byte theGrid[] = { B00000000, B00000000, B00000000, B00000000, B00000000, ...
Dit werkt prima als de put slechts 8 LEDs breed is, maar ik moet 16 breed zijn. Is is er een manier om bitsgewijze bewerkingen uit te voeren op een 16-bits getal, zoals een short? Ik heb geprobeerd theGrid als een short te declareren, maar ik krijg deze foutmelding, wat ik ook doe.
tetris:62: error: "B0000000000000000" was not declared in this scope
De reden dat ik byte gebruikte, is dat ik bitread en bitset kon gebruiken. Dus als een L-stuk naar beneden komt en landt, kan ik de juiste bits als volgt instellen
bitSet(theGrid[pixelY], 15-pixelX);
en eindigen met
B1000000000000000, B1110000000000000
Reacties
- Er zijn geen bitsgewijze bewerkingen in die code.
- @ IgnacioVazquez-Abrams Ik heb het OP bewerkt
Antwoord
Het grootste probleem dat u ondervindt, is dat binaire literalen niet bestaan in C ; de Arduino-bibliotheken omzeilen dit door elke afzonderlijke binaire waarde van 1 te hebben “b0 tot 8″ b1111_1111 gedefinieerd als een macro in cores/arduino/binary.h
. De voor de hand liggende oplossing is om in plaats daarvan octale, decimale of hexadecimale literalen te gebruiken.
unsigned short theGrid[] = { 00, 0, 0x0, ... };
Bitsgewijze bewerkingen werken normaal.
theGrid[pixelY] |= _BV(15 - pixelX);
Reacties
- Bedankt, ik kreeg een soortgelijk antwoord op stackoverflow . Ik denk dat dit zal werken 🙂