이 글은 Sandrop 시리즈의 2번째 기록입니다. (총 23개)

오늘 한 일

  • 프로젝트 셋업 — 빈 캔버스에 색 모래를 부어 픽셀아트를 완성하는 모바일 퍼즐(Sandrop) 레포 생성·작업 규칙 정리
    • 다른 프로젝트의 공통 작업 규칙(작업 원칙 14개 + 보안 검사)을 Flutter + Flame + Python 스택에 맞게 이식
      • 이유: Verify 기준을 스택에 맞춰야 함 — dart analyze + 규칙 엔진 단위 테스트 + Python 시뮬레이터 규칙 일치 검증
    • git 레포 초기화 + 리모트 연결 + .gitignore(Flutter 빌드 산출물·서명 파일 제외)
  • 아이템 3종 확정 — 매그넷 · 셔플 · 되돌리기
    • 강제 붓기를 되돌리기로 교체 (교체 이유는 아래 「막힌 부분」)
    • 매그넷 — 레일이 꽉 차면 사용 불가, 로프로 묶였거나 물음표(?) 상태인 바스켓엔 사용 불가
    • 셔플 — 색·기믹은 유지하고 위치만 재배열
    • 되돌리기 — 아이템 1개 = 직전 올리기 1수 취소, 보유 개수만큼 연속. 이미 다 부어 사라진 바스켓의 수는 되돌릴 수 없음
  • 이어하기 = 레일 비우기(사이드 버퍼)
    • 레일의 대기 바스켓을 전부 사이드 버퍼로 빼 레일을 비우고, 도달 가능해지면 자동으로 붓게 함 (모래 보존)
  • 설계 불변식 못박기 — 아이템·이어하기는 붓기 규칙(중력·도달)과 색별 총 모래량을 절대 바꾸지 않는다. 배치·순서·슬롯만 조작
  • 재화 초기값 — 이어하기 900코인만 확정, 나머지(되돌리기·매그넷·셔플·하트 충전·클리어 보상)는 placeholder로 GameConfig에 배치하고 밸런싱 단계에서 조정

막힌 부분

  • 강제 붓기 아이템이 중력 규칙과 충돌 — 도달 규칙을 무시하고 부으면 아래 칸이 빈 채로 위가 채워져 모래가 공중에 뜨고, 아래 빈칸은 다른 색이라 이 바스켓으로 대체할 수도 없다
    • 해결: 코어 비주얼 메타포를 깨는 아이템이라 폐기하고, 붓기 규칙을 안 건드리고 직전 상태로만 복원하는 되돌리기로 교체
  • 이어하기의 “대기 바스켓 제거”가 클리어를 불가능하게 만듦 — 100% 채우려면 색별 모래 총량이 픽셀 수와 정확히 맞아야 하는데, 바스켓을 없애면 그 색이 부족해져 영영 100%를 못 채운다
    • 해결: “삭제”가 아니라 대기 바스켓을 사이드 버퍼로 옮겨 레일만 비우고, 도달 가능해지면 자동으로 붓게 함(모래 보존). “슬롯 +1” 안은 새 슬롯이 또 차면 교착이 안 풀려 제외

다음에 할 일

  • M1 코어 프로토타입 — 순수 Dart 규칙 엔진(lib/logic/) + 단위 테스트 + 하드코딩 레벨 3개 + 컬럼 단위 채움 + 낙하 파티클 오버레이. 재미 검증이 최우선

Series: Sandrop


Suggested Posts