Työskentelen Arduino-moottoroidulla Tetris-pelillä. Seuraan pudonneita kappaleita ja kiinteytyä Minulla on joukko tavuja
byte theGrid[] = { B00000000, B00000000, B00000000, B00000000, B00000000, ...
Tämä toimii hyvin, kun kaivon leveys on vain 8 lediä, mutta tarvitsen sen olevan 16 leveää. onko tapaa suorittaa bittioperaatioita 16-bittisellä numerolla, kuten lyhyt? Yritin vain julistaa TheGrid lyhyeksi, mutta saan tämän virheen riippumatta siitä, mitä teen.
tetris:62: error: "B0000000000000000" was not declared in this scope
Syy, miksi käytin tavua, on, että voisin käyttää bitreadea ja bitsetia. Joten jos L-kappale putoaa alas ja laskeutuu, voin bitset tällaiset sopivat bitit
bitSet(theGrid[pixelY], 15-pixelX);
ja päädyin kohtaan
B1000000000000000, B1110000000000000
kommentit
- Koodissa ei ole bittioperaatioita.
- @ IgnacioVazquez-Abrams Muokkasin OP-ohjelmaa
vastaus
Suurin ongelma, joka sinulla on, on se, että binaarisia literaaleja ei ole olemassa C : ssä; Arduinon kirjastot kiertävät tämän siten, että niillä on jokainen yksittäinen binääri-arvo osoitteesta 1 ”b0 – 8″ b1111_1111 määritetty makroksi ryhmässä cores/arduino/binary.h
. On selvää, että kiertotapaa on käyttää sen sijaan oktaali-, desimaali- tai heksadesimaalilitraaleja.
unsigned short theGrid[] = { 00, 0, 0x0, ... };
Bittikohtaiset toiminnot toimivat normaalisti. ”>
kommentit
- kiitos, sain samanlaisen vastauksen pinoverflowiin . Luulen, että tämä toimii 🙂