여섯 단계 튜토리얼과 요일별 DAILY 설계
규칙이 다섯 줄인 퍼즐이라도 처음 보는 사람에게는 "중력 별을 거쳐 휘어 잇는다"가 글만으로 잘 전달되지 않는다. STARLINK는 규칙 설명 화면 외에 직접 손으로 해 보는 6단계 튜토리얼을 두었고, 그 뒤에 하루 한 문제인 DAILY로 이어지게 했다. 두 기능 모두 실제 게임 엔진을 그대로 써서 만든 이유와 그 과정에서 정한 세부 사항을 적는다.
튜토리얼도 같은 규칙 엔진 위에서
튜토리얼 퍼즐은 손으로 배치한 별 6개다. 위쪽 한 줄에 별 셋(숫자 3, 2, 3), 아래에 별 둘(2, 2), 그리고 가운데 아래에 중력 별 하나(1)가 있다. 정답은 위쪽 세 별을 잇는 두 선, 양옆으로 내려가는 두 선, 아래 두 별을 잇는 선, 그리고 왼쪽 위와 오른쪽 위를 중력 별로 휘어 잇는 선까지 여섯 개다.
이 퍼즐을 별도 스크립트로 연출하지 않고 생성기와 같은 후보 계산 함수에 넣어 만들었다. 손으로 정한 정답 선이 실제 규칙상 후보가 아니면 퍼즐을 만드는 순간 오류를 던진다. 나중에 가림 반경이나 길이 제한 같은 수치를 바꿨을 때 튜토리얼이 조용히 규칙과 어긋나는 일을 막기 위해서다. 별의 숫자도 손으로 적지 않고 정답에서 차수를 세어 자동으로 채운다.
저장소의 풀이기로 이 퍼즐을 돌려 보면 후보 선 10개 중에서 해가 정확히 하나이고, 탐색 노드 3개 만에 끝난다. 다시 말해 숫자만 보고 전파 규칙을 따라가면 분기 없이 풀린다. 처음 하는 사람이 막힐 여지가 거의 없는 크기로 맞췄다.
여섯 단계의 순서
각 단계는 안내 문구, 반짝여 강조할 별 목록, 완료 조건 함수로 이뤄진다. 매번 선이 바뀔 때마다 완료 조건을 검사해서 충족하면 다음 단계로 넘어간다.
- 1단계: 숫자의 의미를 알려 주고 왼쪽 위 ★3을 탭하게 한다. 별을 선택하기만 하면 통과다.
- 2단계: 옆의 ★2를 탭해 첫 선을 잇는다.
- 3단계: 드래그로 다음 선을 그어 보게 한다. 탭-탭으로 이어도 통과시킨다.
- 4단계: 가려진 별은 직접 이을 수 없다는 것과 중력 별 사용법을 함께 알려 주고, ★3 → ◎ → ★3 순서로 탭하게 한다.
- 5단계: 교차 금지를 체험시킨다. 휘어진 선과 겹치는 선을 일부러 그어 보게 해서 "선이 겹쳐요" 오류를 직접 보게 한다.
- 6단계: 남은 세 선을 안내하고 완성시킨다.
순서를 정할 때 신경 쓴 것은 "실패도 학습 단계로 쓰기"였다. 5단계는 오류가 나는 것이 목표인 단계다. 완료 조건이 "마지막 오류가 교차일 것"이다. 다만 플레이어가 안내와 다르게 시도해 그 선이 실제로 놓였다면 그것도 통과로 처리한다. 튜토리얼에서 진행이 막혀 꼼짝 못 하는 상황은 어떤 경우에도 없어야 하기 때문이다. 1단계도 같은 원칙으로, 별을 선택만 해도 되고 이미 선을 이어 버렸어도 통과다.
튜토리얼에서는 타이머와 힌트 버튼을 숨긴다. 배우는 중에 시간이 흐르는 것은 부담만 주고, 힌트는 정답을 알려 주는 단계 안내와 역할이 겹친다. 완성하면 튜토리얼 완료 플래그가 저장되고, 타이틀에서 반짝이던 튜토리얼 버튼 대신 DAILY 버튼이 반짝인다. 건너뛰기 버튼도 같은 플래그를 세운다. 게임 중에는 언제든 ? 버튼으로 그림 카드 형태의 규칙 설명을 다시 볼 수 있고, 그 화면에서 튜토리얼로 바로 들어갈 수도 있다.

DAILY: 날짜가 곧 퍼즐
DAILY 퍼즐은 기기의 로컬 날짜로 만든 시드 starlink-daily-YYYY-MM-DD에서 생성된다. 생성기가 결정적이라 같은 날짜면 모든 기기에서 같은 퍼즐이 나오고, 서버에 퍼즐을 올리거나 내려받을 필요가 없다. 번호는 2026년 10월 7일을 #1로 삼아 날짜 차이로 계산한다.
난이도는 요일로 정한다. 월·화·금은 NORMAL, 수·목은 HARD, 토·일은 EXPERT다. 한 주 안에서 주 중반에 한 번 올라가고, 금요일에 한 번 내려왔다가, 주말에 가장 어려운 문제가 나오는 흐름이다. EASY는 요일 순환에 들어 있지 않다. EASY는 별 7개에 중력 별이 없어서, DAILY는 매일 중력 별이 최소 하나 등장하는 NORMAL 이상으로만 구성된다.
진행 상태는 날짜별 키로 저장된다. 놓은 선 목록과 경과 시간, 남은 힌트 수, 완료 여부가 들어간다. 여기서 선은 좌표가 아닌 후보 선의 인덱스로 저장하는데, 이것이 가능한 것도 생성기가 결정적이기 때문이다. 같은 날짜로 다시 생성하면 후보 목록의 순서까지 똑같이 나오므로 인덱스가 그대로 맞는다. 혹시 모를 불일치에 대비해 후보 수보다 큰 인덱스는 불러올 때 버린다. 이미 완성한 날이면 다시 들어갔을 때 바로 완성 화면이 뜬다.
연속 기록과 공유
연속 일수는 마지막으로 푼 DAILY의 날짜만 기억해서 계산한다. 오늘 문제를 풀었을 때 마지막 날짜가 어제면 하나 늘리고, 아니면 1로 되돌린다. 같은 날 다시 풀어도 두 번 세지 않는다. 어제 날짜는 문자열을 직접 빼지 않고 로컬 날짜 객체로 하루를 빼서 만든다. 월말과 연말 경계를 따로 처리하지 않아도 되기 때문이다.
결과 공유는 텍스트 세 줄이다. 첫 줄에 "STARLINK #번호 · 난이도", 둘째 줄에 시간·사용한 힌트 수·놓은 선 수, 셋째 줄에 게임 주소가 들어간다. 기기의 공유 시트가 있으면 그것을 쓰고, 없으면 클립보드에 복사한다. 퍼즐 모양이나 선 배치를 넣지 않은 것은 의도적이다. 모두가 같은 문제를 푸는 DAILY에서 공유 텍스트가 답의 힌트가 되면 안 되기 때문이다.
기록은 모두 브라우저의 localStorage에만 남는다. 설정, 통계(푼 수, 데일리 푼 수, 연속 일수, 난이도별 최고 시간), 날짜별 진행 상태 세 종류다. 사이트의 개인정보처리방침이 서버 수집 없음을 전제로 하고 있어, 설계 문서도 "오늘 푼 사람 수"나 데일리 랭킹은 Workers와 D1을 쓰는 1.2.0 과제로 미뤄 두고 방침 갱신을 선행 조건으로 적어 두었다.
FREE PLAY는 반대로 매번 새로
FREE PLAY는 현재 시각과 무작위 값을 섞어 시드를 만든다. 결정성은 DAILY처럼 "모두에게 같은 문제"가 필요할 때만 의미가 있고, FREE PLAY는 오히려 매번 달라야 한다. 네 단계 난이도 중 하나를 고르면 완성 후 NEXT로 같은 난이도의 새 문제를 계속 받을 수 있다. 상단 HUD에는 그 퍼즐이 유일해인지 다중해인지 표시해서, 답이 여러 개일 수 있는 문제임을 미리 알 수 있게 했다.
정리
튜토리얼과 DAILY는 성격이 다른 기능이지만 같은 원칙 위에 있다. 튜토리얼은 실제 규칙 엔진에 손으로 만든 퍼즐을 넣고, 어떤 행동을 해도 진행이 막히지 않게 완료 조건을 너그럽게 잡았다. DAILY는 결정적 생성기 덕분에 서버 없이 같은 문제와 이어 풀기를 제공한다. 설계 문서의 다음 단계는 결과 이미지 카드와 통계 화면, 색약 모드(1.1.0)이고, 서버 기능은 그 뒤의 일이다.