私はArduinoを搭載したテトリスゲームに取り組んでいます。落ちた部分を追跡するため固定されますバイトの配列があります
byte theGrid[] = { B00000000, B00000000, B00000000, B00000000, B00000000, ...
これは、ウェルの幅が8 LEDしかない場合にうまく機能しますが、16幅にする必要があります。ショートのように16ビット数でビット単位の操作を実行する方法はありますか?グリッドをショートとして宣言しようとしましたが、「何をしてもこのエラーが発生します。
tetris:62: error: "B0000000000000000" was not declared in this scope
バイトを使用した理由は、ビット読み取りとビットセットを使用できるようにするためです。したがって、Lピースがダウンして着地した場合、次のように適切なビットをビットセットできます
bitSet(theGrid[pixelY], 15-pixelX);
最終的に
B1000000000000000, B1110000000000000
コメント
- そのコードにはビット演算はありません。
- @ IgnacioVazquez-AbramsOPを編集しました
回答
あなたが抱えている主な問題は、バイナリリテラルが存在しないことです。 Cで; Arduinoライブラリは、 1からすべての単一のバイナリ値を使用することでこれを回避します。 「b0 から8」b1111_1111は、 cores/arduino/binary.h
でマクロとして定義されています。明らかな回避策は、代わりに8進数、10進数、または16進数のリテラルを使用することです。
unsigned short theGrid[] = { 00, 0, 0x0, ... };
ビット演算は通常どおり機能します。
theGrid[pixelY] |= _BV(15 - pixelX);
コメント
- ありがとうございます。スタックオーバーフローでも同様の回答がありました。 。これでうまくいくと思います:)