저는 Arduino 기반 Tetris 게임을 작업 중입니다. 떨어진 조각을 추적하려면 그리고 고정됩니다 나는 바이트 배열을 가지고 있습니다.
byte theGrid[] = { B00000000, B00000000, B00000000, B00000000, B00000000, ...
이것은 우물의 너비가 LED가 8 개뿐 일 때 훌륭하게 작동하지만 16 너비가 필요합니다. 16 비트 숫자에 대해 비트 단위 연산을 수행 할 수있는 방법이 있습니까? theGrid를 short로 선언하려고했지만 “내가 무엇을하든이 오류가 발생합니다.
tetris:62: error: "B0000000000000000" was not declared in this scope
바이트를 사용하는 이유는 bitread와 bitset을 사용할 수 있기 때문입니다. 따라서 L 조각이 내려와 착륙하면 다음과 같이 적절한 비트를 비트 셋으로 설정하고
bitSet(theGrid[pixelY], 15-pixelX);
끝낼 수 있습니다
B1000000000000000, B1110000000000000
코멘트
- 해당 코드에는 비트 연산이 없습니다.
- @ IgnacioVazquez-Abrams OP를 편집했습니다.
답변
당신이 겪고있는 주요 문제는 바이너리 리터럴이 존재하지 않는다는 것입니다. 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);
댓글
- 감사합니다. stackoverflow 에서 비슷한 답변을 받았습니다. . 나는 이것이 효과가 있다고 생각한다 🙂