테트리스
board을 그리는 방법
void board_init(cell_t board[BOARD_HEIGHT][BOARD_WIDTH]) {
for (int i = 0; i < BOARD_HEIGHT; i++) {
for (int j = 0; j < BOARD_WIDTH; j++) {
cell_init(&board[i][j], 0, 0, RED);
//board[i][j].point.x = j;
//board[i][j].point.y = i;
board[i][j].point.x = BOARD_START_X;
board[i][j].point.y = BOARD_START_Y;
//board[i][j].att = E;
board[i][j].att = board_data[i][j];
board[i][j].color = RED;
}
}
// (1) 이렇게 그려도 되지만, 너무 무식하다. for 루프로 돌리자.
//board[0][0].att = W;
//board[0][0].point.x += 0;
//board[0][0].point.y += 0;
// 보드의 오른쪽 인덱스 BOARD_WIDTH-1
//board[0][BOARD_WIDTH - 1].att = W;
//board[0][BOARD_WIDTH - 1].point.x += BOARD_WIDTH - 1;
//board[0][BOARD_WIDTH - 1].point.y += 0;
//board[1][0].att = W;
//board[1][0].point.x += 0;
//board[1][0].point.y += 1;
//board[1][BOARD_WIDTH - 1].att = W;
//board[1][BOARD_WIDTH - 1].point.x += BOARD_WIDTH - 1;
//board[1][BOARD_WIDTH - 1].point.y += 1;
// (2) 위의 방법보다 좀 낫긴 하지만, 여전히 불편하다.
// 배열 데이터를 이용해서 그려보자.
for (int i = 0; i < BOARD_WIDTH; i++) {
board[0][i].att = W;
board[0][i].point.x += BOARD_START_X + i;
board[0][i].point.y += BOARD_START_Y + 0;
}
for (int i = 0; i < BOARD_HEIGHT; i++) {
board[i][0].att = W;
board[i][0].point.x += 0;
board[i][0].point.y += i;
board[i][BOARD_WIDTH - 1].att = W;
board[i][BOARD_WIDTH - 1].point.x += BOARD_WIDTH - 1;
board[i][BOARD_WIDTH - 1].point.y += i;
}
for (int i = 0; i < BOARD_WIDTH+1; i++) {
board[BOARD_HEIGHT - 1][i].att = W;
board[BOARD_HEIGHT - 1][i].point.x += i-1;
board[BOARD_HEIGHT - 1][i].point.y += BOARD_HEIGHT-1;
//board[i][BOARD_HEIGHT-1].point.x += BOARD_WIDTH - 1;
//board[i][BOARD_HEIGHT-1].point.y += i;
}
};
보드를 이렇게 그려도 되는데
나중에 블럭 쌓기, 보드 충돌시 계산이 복잡해 진다.
이렇게 하지 말자.
STM 온라인 교육
https://content.st.com/19Jan2023Basic-stm32-tech-training.html
STM 교육 사례
https://www.st.com/ko/stm32/stm32/event.html
▼ 모자이크 처리를 1초 만에