숫자 합계를 맞추는 타이머 기반 게임입니다. 주어진 시간 내에 게임 보드에서 사각형 영역을 선택하여 목표 합계에 도달하세요.
- 타이머 기반 게임플레이: 60초 내에 최대한 많은 점수 획득
- 드래그 선택: 마우스로 게임 보드의 영역을 자유롭게 선택
- 동적 보드 생성: 게임마다 새로운 보드가 생성됨
- 개인 최고 기록: 로그인 시 개인 최고 기록 저장 및 추적
- 파티클 이펙트: 성공 선택에 대한 시각적 피드백
- 점수 팝업: 선택한 영역의 점수를 시각적으로 표시
- 실시간 대전: 다른 플레이어와 동시에 게임 플레이
- 게임 로비: 플레이어 매칭 및 게임 설정
- 카운트다운: 게임 시작 전 준비 시간
- 멀티플레이어 스코어보드: 실시간 순위 표시
- Supabase 인증: 이메일 기반 회원가입 및 로그인
- 프로필 관리: 사용자 프로필 정보 관리
- 점수 리더보드: 전체 플레이어 순위 조회
- React 18.3: UI 라이브러리
- TypeScript 5.5: 타입 안전성
- Vite 5.3: 빌드 도구
- Tailwind CSS 3.4: 스타일링
- Zustand 4.5: 경량 상태 관리
- 세 가지 주요 스토어:
gameStore: 싱글플레이 게임 상태authStore: 사용자 인증 및 프로필 상태multiStore: 멀티플레이 게임 상태
- Supabase: 인증, 실시간 데이터베이스, 스토리지
src/
├── components/ # React 컴포넌트
│ ├── GameBoard.tsx # 싱글플레이 게임 보드
│ ├── MultiGame.tsx # 멀티플레이 게임 인터페이스
│ ├── Header.tsx # 헤더 및 네비게이션
│ ├── AuthModal.tsx # 로그인/회원가입 모달
│ └── ... # 기타 UI 컴포넌트
├── hooks/ # 커스텀 React 훅
│ └── useDragSelect.ts # 드래그 선택 로직
├── store/ # Zustand 스토어
│ ├── gameStore.ts # 싱글플레이 게임 상태
│ ├── authStore.ts # 인증 상태
│ └── multiStore.ts # 멀티플레이 상태
├── utils/ # 유틸리티 함수
│ ├── gameLogic.ts # 게임 로직 (합계 계산, 영역 검증)
│ └── boardGenerator.ts # 게임 보드 생성
├── lib/ # 라이브러리
│ └── supabase.ts # Supabase 클라이언트 설정
├── types/ # TypeScript 타입 정의
│ └── game.ts # 게임 관련 타입
└── App.tsx # 메인 애플리케이션
- 저장소를 클론합니다:
git clone <repository-url>
cd AppleGame- 의존성을 설치합니다:
npm install- Supabase 설정:
- Supabase 프로젝트 생성
.env.local파일에 Supabase URL과 API 키 추가
npm run dev개발 서버는 http://localhost:5173에서 실행됩니다.
프로덕션 빌드를 생성합니다:
npm run build빌드된 파일은 dist/ 디렉토리에 생성됩니다.
빌드된 버전을 미리 봅니다:
npm run preview- 게임 시작 버튼을 누르면 게임이 시작됩니다
- 게임 보드에서 마우스로 영역을 드래그하여 선택합니다
- 선택한 영역의 합계가 목표 합계(100)에 도달하면 점수를 획득합니다
- 60초 내에 최대한 많은 점수를 모으세요
- 게임 종료 후 점수가 개인 최고 기록보다 높으면 저장됩니다
- 로비에서 다른 플레이어와 매칭됩니다
- 카운트다운 후 동시에 게임이 시작됩니다
- 실시간으로 다른 플레이어와 점수를 경쟁합니다
- 게임 종료 후 최종 순위를 확인합니다
- 선택한 영역의 합계가 정확히 목표값(100)을 만족하면 점수 획득
- 연속된 성공(콤보)은 더 많은 파티클 효과와 함께 보상
- Normal: 일반 선택 (3개 미만)
- Combo: 4개 이상의 셀 선택
- Big: 특별한 성과에 대한 특수 이펙트
강화학습(MaskablePPO) 기반 AI 에이전트가 게임을 자동으로 플레이합니다.
# 프로젝트 루트에서 실행
# 환경변수로 모델 지정
AI_MODEL_PATH=ai_solver/models/<run>/best/best_model.zip \
.venv/bin/uvicorn ai_solver.server:app --reload --port 8000
# Swagger API 문서: http://localhost:8000/docs# 정식 훈련 (5M steps)
.venv/bin/python -m ai_solver.train --tag reward_v2
# TensorBoard 모니터링 (별도 터미널)
.venv/bin/tensorboard --logdir ai_solver/runs --port 6006
# → http://localhost:6006자세한 내용은 ai_solver/README.md 참고
vite.config.ts: Vite 빌드 설정tailwind.config.js: Tailwind CSS 설정tsconfig.json: TypeScript 설정postcss.config.js: PostCSS 설정
[라이선스 정보 추가]
[개발자 정보 추가]
주의: 이 프로젝트는 개발 중입니다. 기능과 사용법이 변경될 수 있습니다.