안녕하세요! 이번 글에서는 Flutter와 GitHub를 이용해 미니 테트리스 프로젝트를 진행하면서 겪었던 문제점과 이를 해결했던 방법을 공유하고, 앞으로의 추가 개발 계획에 대해 설명하려고 합니다. 프로젝트를 진행하면서 많은 시행착오가 있었지만, 이 과정을 통해 더 많은 것을 배울 수 있었습니다.
1. 개발 과정에서의 주요 문제점과 해결 방법
1-1. Flutter 레이아웃 및 반응형 디자인 문제
문제:
- 다양한 화면 크기(데스크톱, 모바일)에서 게임 보드와 UI 요소가 잘 맞지 않아 레이아웃이 깨지는 문제가 있었습니다.
- 모바일 화면에서는 블록 크기와 간격이 이상하게 표시되는 경우가 발생했습니다.
해결:
- Flutter의 MediaQuery와 LayoutBuilder를 활용하여 반응형 디자인을 적용했습니다.
- 화면 크기에 따라 블록 크기와 보드 크기를 동적으로 계산하도록 설정했습니다.
double blockSize(BuildContext context) { double screenWidth = MediaQuery.of(context).size.width; return screenWidth / 10; // 10칸 기준으로 블록 크기 계산 }
개선 결과:
- 다양한 화면 크기에서도 UI가 깨지지 않고 잘 동작하도록 수정되었습니다.
1-2. 블록 충돌 감지 로직의 오류
문제:
- 블록이 다른 블록과 겹치지 말아야 하는데, 충돌 감지가 제대로 작동하지 않아 블록이 서로 겹치는 문제가 발생했습니다.
해결:
- 충돌 감지 로직을 다시 작성하여 현재 블록의 좌표와 고정된 블록의 좌표를 정확히 비교하도록 수정했습니다.
bool checkCollision(List<List<int>> block) { for (var pos in block) { int row = pos[0]; int col = pos[1]; if (row >= 20 || col < 0 || col >= 10 || board[row][col] == 1) { return true; } } return false; }
개선 결과:
- 블록이 제대로 충돌을 감지하고 고정되는 동작이 안정적으로 구현되었습니다.
1-3. GitHub Pages 배포 시 로딩 속도 문제
문제:
- GitHub Pages에 배포 후, 웹 브라우저에서 초기 로딩 시간이 길다는 피드백이 있었습니다.
- 특히, Flutter의 기본 빌드 파일 크기가 커서 발생한 문제였습니다.
해결:
- 빌드 파일 최적화를 위해 다음과 같은 작업을 진행했습니다:
- Flutter의 –release 옵션을 사용하여 릴리스 빌드로 크기를 줄였습니다.
- 불필요한 리소스를 제거하고 경량화된 코드로 수정했습니다.
flutter build web --release
개선 결과:
- 초기 로딩 속도가 눈에 띄게 개선되었습니다.
1-4. 키 입력 처리와 모바일 터치 지원
문제:
- 데스크톱에서는 키보드 입력이 잘 동작했지만, 모바일 환경에서는 터치 컨트롤이 부자연스러웠습니다.
해결:
- GestureDetector 위젯을 사용하여 모바일 환경에서도 직관적인 터치 동작이 가능하도록 수정했습니다.
GestureDetector( onPanUpdate: (details) { if (details.delta.dx > 0) { moveBlock('right'); } else if (details.delta.dx < 0) { moveBlock('left'); } }, onTap: () { rotateBlock(); }, )
개선 결과:
- 모바일에서도 블록 이동과 회전이 매끄럽게 이루어졌습니다.
2. 추가 개발 예정 기능
2-1. 점수 랭킹 시스템 구현
- 구현 계획:
- Firebase Firestore를 활용하여 점수를 저장하고, 다른 사용자들과 점수를 비교할 수 있는 랭킹 시스템을 추가할 계획입니다.
- 게임 종료 시 사용자 점수를 Firebase에 저장하고, 랭킹 리스트를 실시간으로 불러오도록 구현할 예정입니다.
FirebaseFirestore.instance.collection('scores').add({ 'username': playerName, 'score': playerScore, 'timestamp': FieldValue.serverTimestamp(), });
- 기대 효과:
- 사용자에게 도전 의식을 주고, 더 흥미로운 게임 경험을 제공합니다.
2-2. 멀티플레이 기능 지원
- 구현 계획:
- WebSocket 또는 Firebase Realtime Database를 사용하여 실시간 멀티플레이 기능을 구현할 예정입니다.
- 두 명 이상의 사용자가 동시에 게임을 즐길 수 있도록 하며, 상대방의 진행 상황이 화면에 표시되도록 설정합니다.
- 기대 효과:
- 친구나 다른 사용자와 경쟁하며 더 재미있게 게임을 즐길 수 있습니다.
2-3. AI 대결 모드
- 구현 계획:
- 간단한 AI 알고리즘을 만들어 플레이어가 AI와 대결할 수 있는 모드를 추가할 계획입니다.
- AI는 블록을 최적의 위치에 배치하여 플레이어와 경쟁합니다.
- 기대 효과:
- 혼자 플레이하는 경우에도 도전 의식을 느끼며 게임을 즐길 수 있습니다.
3. 배운 점 및 느낀 점
이번 프로젝트를 통해 Flutter의 강력한 기능과 GitHub Pages를 활용한 배포 방법을 배울 수 있었습니다. 특히, 문제를 해결하며 Flutter에 대한 이해도가 많이 높아졌습니다. 앞으로 추가 기능들을 구현하며 프로젝트를 더욱 발전시킬 계획입니다.
4. 마무리
Flutter로 미니 테트리스를 개발하며 다양한 문제를 경험하고 이를 해결할 수 있었던 것은 큰 배움이었습니다. 점수 랭킹, 멀티플레이, AI 대결 모드 등 추가 기능들을 하나씩 구현하며 이 프로젝트를 더 완성도 높게 만들어 갈 예정입니다.
이 프로젝트는 단순한 학습용 프로젝트로 시작했지만, 앞으로는 Flutter의 다양한 가능성을 보여줄 수 있는 하나의 사례가 될 수 있기를 기대합니다.