
먼저 잠든 고양이가 길을 막는다
냥잠 퍼즐은 한 번 밀면 깨어 있는 고양이들이 함께 미끄러지는 게임이다. 자기 침대에 닿은 고양이는 잠들고 그 자리에 남는다. 다른 고양이의 침대는 지나갈 수 있지만, 잠든 고양이는 길을 막는다. 가까운 침대부터 채우면 뒤에 남은 고양이가 갇힐 수도 있다. 이 작은 차이 때문에 움직일 방향만큼 잠드는 순서를 고민하게 됐다.
작은 방에서 잠깐 생각하고 쉬어 갈 수 있는 게임을 만들고 싶었다. 시간 제한이나 하트 대신 되돌리기를 열어 두고, 모두를 재우는 것을 한 판의 목표로 삼았다. 빨리 손을 움직이는 부담 없이 같은 방에서 다른 순서를 시도하는 쪽을 택했다.
처음 세 방은 직접 정했다
첫 방에는 고양이 한 마리와 같은 표시의 침대만 놓았다. 오른쪽으로 한 번 밀면 끝난다. 두 번째 방에서는 방향을 바꾸고, 세 번째 방에서는 벽에 멈춘 위치를 이용해 안쪽 침대에 들어간다. 긴 설명을 먼저 읽게 하기보다, 방 하나를 지날 때마다 움직임을 하나씩 익히도록 구성했다.
두 고양이가 등장하는 4~6번 방은 함께 움직이거나 서로에게 막히는 과정이 해법에 들어가도록 골랐다. 고양이 숫자만 늘리면 같은 일을 두 번 하는 방이 될 수 있다. 둘이 같은 방향으로 움직이면서도 서로의 위치를 이용해야 하는 장면을 초반에 넣고 싶었다.
풀 수 있는 방을 고르는 과정
처음 세 방 뒤에는 후보를 생성하고 해법을 찾아 채택하는 방식으로 방을 만들었다. 끝까지 풀 수 있는지, 정한 이동 수와 맞는지, 기존 방을 돌리거나 뒤집은 모양에 불과하지 않은지 확인했다. 이렇게 일반 방 48개를 네 챕터에 담았다. 최단 이동 수로 순서를 정하는 데 도움은 됐지만, 그 숫자만으로 사람이 느끼는 난이도까지 알 수는 없다.
오늘의 방은 별도로 준비한 120개 중 기기 날짜에 맞춰 고른다. 매번 즉석에서 새 문제를 만드는 방식이 아니라, 미리 해법을 확인한 방들을 순환한다. 인터넷에 연결하지 않아도 오늘 풀 방이 정해진다.
막힌 자리에서 다시 생각하기
힌트는 첫 화면의 정답을 그대로 보여주지 않고 현재 고양이 위치에서 길을 찾는다. 이미 막힌 상태라면 되돌리거나 처음부터 하라고 알려 준다. 아직 움직일 길이 있는 척 방향을 제시하지 않도록 했다. 되돌리기와 재시작에는 횟수 제한을 두지 않았고, 모든 방도 처음부터 열어 두었다.
진행 상황과 최고 기록은 SharedPreferences로 기기에 저장한다. 완료한 방을 지우지 않고 현재 방만 다시 시작할 수 있다. 저장한 기록은 앱을 지우면 함께 사라지는 로컬 기록이다.
Android 화면에 올리기까지
이번 게임은 Java로 만들고 Android Canvas로 방과 침대를 그렸다. 고양이 그림은 GPT Image로 생성했으며, 색뿐 아니라 동그라미·마름모·세모 표시로 침대를 구분했다. 짧은 화면이나 큰 글자 설정에서는 아래 버튼이 밀리지 않게 스크롤할 수 있도록 구현했다.
퍼즐 로직을 확인한 뒤에도 Android 화면을 얻는 과정에서 막혔다. 설치 기록이 가리키는 앱 파일이 사라져 보존한 APK를 다시 설치했고, 그제야 홈 화면을 캡처했다. 이 글의 첫 방 이미지는 9월 8일 서명된 1.0.0 버전에서 따로 확보한 실제 화면이다.
9월 8일 오전 11시 기준, Naptide 1.0.0은 Google Play에 제출이 접수돼 자동 확인을 기다리고 있었다. 공개 여부는 아직 확인되지 않았다. 다음에는 플레이한 사람이 어느 방에서 순서를 다시 생각했는지 듣고, 이동 수로만 짐작했던 난이도를 돌아보려 한다.
실제 프로젝트 직접 재현
검증일
검증 환경Naptide 1.0.0 · signed Android APK · release-owner capture and source records
제작 담당자가 남긴 실행 기록·서명된 1.0.0의 첫 방 캡처와 병합된 Java 소스를 대조했다. 글 작성자가 게임을 새로 실행하거나 전체 터치·저장·오디오 검사를 수행한 것은 아니다. 2026년 9월 8일 11시 제출 기록은 자동 확인 진행 상태이며 공개 완료를 뜻하지 않는다.