아두이노 터치 브레이크아웃 게임: 2.4" TFT LCD로 클래식 아케이드 구현
부품 및 소모품
| 아두이노 우노 | 1개 |
| AZ-Delivery 2.4 TFT LCD 터치 디스플레이 아두이노 쉴드 | 1개 (ILI9341 드라이버, 8비트 병렬 통신, 240x320 해상도) |
앱 및 온라인 서비스
프로젝트 소개
아두이노 우노와 TFT LCD 화면(240x320, ILI9341 드라이버, 8비트 병렬 통신)으로 만든 클래식 브레이크아웃 게임의 소형 버전입니다.
게임 설명
최대 8행의 벽돌을 가진 여러 스테이지가 있으며, 두 행마다 다른 색상, 프로그래밍 가능한 패턴으로 벽돌 켜기/끄기 가능. 단일 공을 사용하며, 터치 패널로 패들을 좌우 이동해 벽과 패들로 공을 튕겨 벽돌을 제거합니다. 패들이 공을 놓치면 턴을 잃습니다.
행마다 점수가 다릅니다: uint8_t pointsForRow[] = {7, 7, 5, 5, 3, 3, 1, 1};
각 레벨마다 패들 크기와 공 크기 설정 가능. 공을 칠 때마다 속도 증가, 각 스테이지별 초기 속도 설정 가능. 패들 어느 부분에 맞느냐에 따라 수평 속도도 변화.
새 스테이지 정의 예시:
조작 방법
양손으로 기기를 잡고 엄지로 화면을 터치해 패들을 좌우로 이동.
새 스테이지 정의
다음 구조체로 새 스테이지 정의:
typedef struct game_type {
int ballsize, playerwidth, playerheight, exponent;
int top, rows, columns, brickGap, lives;
int wall[GAMES_NUMBER];
int initVelx, initVely;
} game_type;
배열에 추가:
game_type games[GAMES_NUMBER] = {
{ 10, 60, 8, 6, 40, 8, 8, 3, 3, {0x18, 0x66, 0xFF, 0xDB, 0xFF, 0x7E, 0x24, 0x3C}, 28, -28 },
// ... 더 많은 스테이지
};
벽 패턴
8x8 비트 배열로 정의. 예: {0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA}는 체커보드 패턴 생성 (좌우 대칭).
하드웨어
AZ-Delivery 2.4인치 TFT LCD, 저항식 4와이어 터치스크린, 내장 SD 카드 리더. 쉴드 형태라 아두이노 위에 꽂기만 하면 됩니다.
라이브러리
#include <Adafruit_GFX.h> // 핵심 그래픽 라이브러리
#include <Adafruit_TFTLCD.h>
#include <TouchScreen.h>
터치스크린 캘리브레이션
MCUFriend_kbv 라이브러리의 "TouchScreen_Calibr_native" 예제로 캘리브레이션. 시리얼 모니터로 결과 확인 후 "PORTRAIT CALIBRATION" 값 사용.
const int XP=8, XM=A2, YP=A3, YM=9; // 240x320 ID=0x9341
const int TS_LEFT=118, TS_RT=931, TS_TOP=72, TS_BOT=887;
// x = map(p.x, LEFT=118, RT=931, 0, 240)
// y = map(p.y, TOP=72, BOT=887, 0, 320)
애니메이션
정적 속도를 사용해 위치 업데이트: pos += vel * dt;
부동소수점 연산 회피
ILI9341 해상도 240x320으로 픽셀 참조에 9비트씩 필요. 16비트 정수 사용 시 6비트가 소수부로 남음 (바이너리 지수 6). 0.000~0.63 범위 표현 가능. 정수 연산만으로 처리:
state.ballx += state.velx;
state.bally += state.vely;
checkBallCollisions(..., state.ballx >> game->exponent, state.bally >> game->exponent);
데모 모드
#define DEMO_MODE 주석 해제하면 패들이 공을 자동 추적.
즐기세요!
새 패턴과 레벨을 만들어 공유하세요!
코드
- Arduino Breakout (아두이노) - 전체 게임 코드 포함
회로도