Egy Arduino által működtetett Tetris játékon dolgozom. Az elesett darabok nyomon követése és rögzülni fogok egy sor bájttal
byte theGrid[] = { B00000000, B00000000, B00000000, B00000000, B00000000, ...
Ez nagyszerűen működik, ha a kút csak 8 LED széles, de szükségem van rá, hogy 16 széles legyen. van rá mód, hogy bitenként műveleteket hajtsunk végre egy 16 bites számon, például röviden? Megpróbáltam a TheGrid-et rövidnek nyilvánítani, de ezt a hibát bármit is csinálom.
tetris:62: error: "B0000000000000000" was not declared in this scope
A bájt használatának oka az, hogy tudtam használni a bitreadot és a bitset. Tehát, ha egy L darab lejön és leszáll, akkor a megfelelő biteket meg tudom biketetni, mint ez
bitSet(theGrid[pixelY], 15-pixelX);
és a végén
B1000000000000000, B1110000000000000
Megjegyzések
- Ebben a kódban nincsenek bitenkénti műveletek.
- @ IgnacioVazquez-Abrams Szerkesztettem az OP-t
Válasz
A fő probléma, hogy bináris literálok nem léteznek a C ben; az Arduino könyvtárak ezt úgy kerülik meg, hogy minden bináris érték a 1-ből “b0 – 8″ b1111_1111 makróként definiálva a cores/arduino/binary.h
fájlban. A kézenfekvő megoldás az oktális, tizedes vagy hexadecimális literálok használata.
unsigned short theGrid[] = { 00, 0, 0x0, ... };
A bitenkénti műveletek a szokásos módon működnek.
theGrid[pixelY] |= _BV(15 - pixelX);
Megjegyzések
- Köszönöm, hasonló választ kaptam a stackoverflow -ra . Szerintem ez működni fog 🙂