STILL CODING / NOTES
Direct Play 개발 노트
게임을 고르고 링크로 초대하면 바로 시작되는 10개의 브라우저 게임
사진 퍼즐과 슬라이딩 퍼즐, 숫자 야구, 숫자합 퍼즐, 6×6 미니 스도쿠, 포켓 레이스, 스파이 게임, 그리고 작은 시야로 관찰하는 PINHOLE과 합 10을 잇는 SUM DROP, 모두 손을 고른 뒤 한 번에 공개하는 가위바위보까지. 공개방과 비밀방을 열어 게임에 따라 최대 12명이 설치 없이 함께합니다.
-
게임을 아홉 개로 늘려도 로비가 가벼운 이유 — Direct Play의 게임 모듈 구조
Direct Play가 게임 10개를 하나의 로비에서 다루기 위해 만든 카탈로그와 지연 로딩 레지스트리, 게임 모듈 계약, 순수 로직 분리를 설명합니다. 독립 앱 두 개를 같은 계약에 맞춰 옮긴 코드도 다룹니다.
-
6×6 미니 스도쿠: 해가 하나뿐인 문제를 비트마스크 솔버로 만들어 내기
Direct Play의 6×6 미니 스도쿠가 문제를 만드는 방법을 정리합니다. 6비트 후보 마스크, 후보가 가장 적은 칸부터 푸는 백트래킹, 해를 두 개까지만 세는 유일성 검사, 180도 대칭 제거를 코드로 보이고 난이도 평가의 한계도 적습니다.
-
게임마다 주소를 주면 생기는 일 — 문 하나짜리 서브도메인과 302 리다이렉트
spy-game.still-coding.cc처럼 게임마다 외우기 쉬운 주소를 주되, 실제 플레이는 한곳에서 하도록 만든 Direct Play의 게임 도메인 구조를 정리합니다. 리다이렉트 규칙, 저장소가 흩어지는 문제, 링크 하나가 방 하나를 쓰는 비용을 다룹니다.
-
숫자 야구: 판정은 스무 줄이고, 나머지는 입력을 막고 상태를 복원하는 일이었다
Direct Play 숫자 야구의 비밀 숫자 생성, 스트라이크·볼 판정, 중복 입력 차단, 세 상태 메모, 힌트, 새로고침 뒤 복원과 순위 정렬을 실제 코드로 정리합니다. 참가자가 정답을 볼 수 있다는 한계도 함께 적습니다.
-
사진 퍼즐: 제자리에 붙은 조각은 한 덩어리로 — Union-Find로 묶고 옮기기
Direct Play 사진퍼즐이 정답 옆에 놓인 조각을 하나의 그룹으로 묶어 함께 옮기는 방법을 설명합니다. Union-Find로 그룹을 찾고, 옮길 자리를 만들어 주는 이동 규칙, 세 단계 힌트, 멀티터치에서 보드가 잠기던 버그의 원인을 코드로 정리합니다.
-
PINHOLE: 본 만큼 점수가 깎이는 게임 — 128×72 격자로 '얼마나 봤는지' 재기
작은 원형 시야로 장면을 살피는 PINHOLE이 본 면적을 재는 방법과 점수 공식, 한국어 짧은 답을 판정하는 규칙을 코드로 설명합니다. 해커톤용 독립 앱에서 만든 게임을 Direct Play 모듈로 옮기면서 바뀐 것과 남은 한계도 정리합니다.
-
슬라이딩 사진퍼즐: 섞기는 거꾸로 걸어서, 풀이는 A*로 — 그리고 4×4부터 멈추는 풀이 버튼
Direct Play 슬라이딩 사진퍼즐이 풀 수 있는 배치만 만드는 방법, 한 줄을 통째로 미는 이동 규칙, 포기하면 보여 주는 정답 풀이(BFS·A*)를 코드로 설명합니다. 풀이가 3×3에서만 안정적이고 4×4부터 실패하는 것을 직접 재어 정리했습니다.
-
사진은 서버를 거치지 않는다 — Direct Play가 게임 자원을 P2P로 나눠 주는 법
사진퍼즐처럼 방장이 올린 사진이 게임의 재료인 앱에서, 서버에 사진을 저장하지 않고 참가자에게 전달하기 위해 Direct Play가 만든 자원 요청 라우팅, 16,000자 청크 전송, 해시 검증, 실패 처리를 정리합니다.
-
가위바위보 선택은 서버에만 보인다 — Durable Object로 만든 비공개 라운드
방장이 계산하는 대신 Durable Object가 참가자 등록, 비공개 선택, 승패 판정과 재접속 상태를 관리하는 Direct Play 가위바위보의 서버 권위 구조를 설명합니다.
-
방에도 수명이 있다 — 알람으로 청소하고 하루 500방으로 지키는 Direct Play의 서버 비용 설계
Direct Play는 설정 중 1시간 뒤 삭제, 활동 없이 3일 뒤 보관, 보관 후 7일 뒤 삭제를 예약합니다. Durable Object 알람으로 방을 정리하는 방법, 쓰기를 줄이는 장치, 하루 500방 한도를 전역 객체 하나로 세는 방법을 코드로 정리합니다.
-
포켓 레이스: 1분짜리 레이싱을 휴대폰 네 대로 — 방장이 계산하고 각자는 예측한다
브라우저끼리 최대 4명이 실시간으로 달리는 포켓 레이스의 네트워크 구조를 정리합니다. 방장 권위 시뮬레이션, 순서를 포기한 상태 채널과 신뢰할 수 있는 이벤트 채널, 초당 20번의 상태 전송, 내 차의 예측과 보정을 코드로 설명합니다.
-
스파이 게임의 진행 규칙 — 역할 확인, 투표, 마지막 추리
4~12명이 함께하는 Direct Play 스파이 게임의 투표와 결선, 마지막 추리 규칙을 설명합니다. 로컬 코드로 확인한 제한 시간 처리와 진행 상태 복원의 한계도 기록합니다.
-
사진 한 장으로 '여기가 어디게?' — EXIF GPS, 지도 임베드, 그리고 사진 만 장 중 한 장 고르기
Direct Play 사진퍼즐의 EXIF GPS 읽기, 지도 표시, 장소 이름 추천을 설명합니다. 공개 여부를 확인해야 하는 로컬 Flutter 사진첩 구현과 60초 타임아웃에 관한 커밋 기록도 다룹니다.
-
숫자합 퍼즐: 판을 거꾸로 만들면 시작하자마자 막히지 않는다
Direct Play 숫자합 퍼즐이 합이 목표인 조합을 먼저 만들고 판을 채우는 방식, 부분집합 합 DP로 종료를 판정하고 힌트를 찾는 방법, 그리고 완벽한 클리어가 보장되지 않는 이유를 코드로 설명합니다.
-
SUM DROP: 합 10을 지우는 낙하 퍼즐 — 시드 하나로 같은 판을 만들고, 연쇄를 한 단계씩 기록하기
Direct Play의 SUM DROP이 시드 문자열에서 같은 보드와 같은 블록 순서를 만드는 방법, 합이 목표인 줄을 찾는 매처, 연쇄를 단계별로 기록해 애니메이션과 분리한 구조, 20개 손으로 만든 스테이지를 코드로 설명합니다. 해커톤 앱의 서버 검증이 사라진 것도 적습니다.