每個方塊佔據 4×4 格子,共 16 個位置,**每個位置只有「有方塊」或「無方塊」兩種狀態**,完美對應 16 位元的 0/1。
4x4 矩陣 位元位置 (bit 15 ~ bit 0) [0,0] [0,1] [0,2] [0,3] → bit15 bit14 bit13 bit12 [1,0] [1,1] [1,2] [1,3] → bit11 bit10 bit9 bit8 [2,0] [2,1] [2,2] [2,3] → bit7 bit6 bit5 bit4 [3,0] [3,1] [3,2] [3,3] → bit3 bit2 bit1 bit0
| 形狀 | 矩陣 | 二進制 | 十六進制 |
|---|---|---|---|
| I | 第 0 行全滿 | 1111 0000 0000 0000 | 0xF000 |
| O | 左上 2x2 | 1100 1100 0000 0000 | 0xCC00 |
| T | 第 0 行中間三格 + 第 1 行中間 | 0111 0100 0000 0000 | 0x7400 |
| L | 第 0 行第一格 + 第 1 行全滿 | 1000 1111 0000 0000 | 0x8F00 |
// 判斷某格是否有方塊
bool hasBlock(int shape, int row, int col) {
int bit = 15 - (row * 4 + col);
return (shape & (1 << bit)) != 0;
}
// 旋轉 90 度(矩陣轉置 + 翻轉)
int rotate90(int shape) {
int rotated = 0;
for (int r = 0; r < 4; r++)
for (int c = 0; c < 4; c++)
if (hasBlock(shape, r, c))
rotated |= 1 << (15 - (c * 4 + (3 - r)));
return rotated;
}
// 碰撞檢測:(shape & boardRowBits) != 0
uint16_t 存一個形狀狀態。這是遊戲開發中**位元組壓縮**與**位運算加速**的經典教科書級應用。