beomgg.
Back to Projects

Android Memory Game

Kotlin 기반으로 개발된 안드로이드 네이티브 단말기용 메모 게임 앱. 사용자의 기억력을 테스트할 수 있는 직관적인 카드 뒤집기 인터페이스 구현

AndroidKotlinMobile App

프로젝트 배경 및 목표

안드로이드 플랫폼에서 동작하는 직관적이고 몰입감 있는 동물 메모리 게임 앱입니다. 제한 시간 내에 타겟 동물 카드를 모두 찾아내는 것을 목표로 하며, 커스텀 뷰(Custom View)를 활용한 그래픽 처리와 상태 관리 능력을 향상시키기 위해 개발되었습니다.

  • 동적 카드 배치 및 게임 로직: 24장의 카드(정답 4장, 오답 18장, 폭탄 2장)를 랜덤하게 섞어 매번 새로운 경험 제공
  • 실시간 반응형 점수 시스템: 반응 시간에 따른 차등 보너스 점수 및 연속 정답 콤보 구현
  • 로컬 데이터 보존: SharedPreferences를 활용한 기기 내 최고 점수(High Score) 기록

시스템 아키텍처 및 기술 스택

Frontend & Core

  • Framework & Language: Android SDK, Java
  • UI & Graphics: Custom View (Canvas, Drawable API), XML Layouts

Data & Integration

  • Local Storage: SharedPreferences
  • Multimedia & Concurrency: MediaPlayer API, Handler, CountDownTimer, Background Thread

핵심 기술적 도전 및 해결 과정

Custom View를 활용한 동적 그리드 렌더링

  • Challenge: 안드로이드의 기본 Layout을 사용하지 않고, 4x6 배열의 카드를 다양한 화면 크기에 맞춰 비율이 깨지지 않게 렌더링해야 했습니다.
  • Solution: CustomView의 onDraw() 메서드를 오버라이드하여, 화면의 너비와 높이를 기반으로 카드 간격과 크기를 동적으로 연산해 Canvas에 카드를 직접 그리는 방식으로 해결했습니다.

게임 상태 동기화 및 터치 이벤트 제어

  • Challenge: 시작 시 4초간 전체 카드를 보여준 후 뒤집는 기능과, 의도치 않은 연속 터치(다중 터치)로 인한 로직 오류를 방지해야 했습니다.
  • Solution: Thread와 Handler.postDelayed()를 조합해 비동기 UI 업데이트를 구현하고, 터치 발생 시 1초 동안 추가 입력을 차단하는 플래그를 두어 버그를 방지했습니다.

프로젝트 성과 및 배운 점

  • Android 2D Graphics 렌더링 이해: 기본 위젯에 의존하지 않고 드로잉 사이클과 직접적인 터치 이벤트(onTouchEvent) 처리 방식을 깊이 이해하게 되었습니다.
  • 비동기 처리 및 스레드 통신: 게임 타이머와 UI 지연 처리를 통해 안드로이드의 메인 UI 스레드와 백그라운드 스레드 간의 안전한 통신 방법을 학습했습니다.