📘 기본 안내
- 서비스: 추첨 과정을 구슬 레이스처럼 보여주는 자동 추첨 도구입니다.
- 추첨자 목록: 한 줄에 한 명씩 입력하며 최대 100명까지 사용할 수 있습니다.
- 중복 추첨자: 같은 이름이 있으면 해당 이름들이 붉은색으로 표시되고 추첨을 시작할 수 없습니다.
- 당첨자 수: 1 이상의 정수만 허용되며 추첨자 수보다 크게 설정할 수 없습니다.
- 시간: 1분부터 5분까지 입력할 수 있고 0은 1, 5 초과 값은 5로 자동 보정됩니다.
- 시작: 게임판의 눌러서 시작 영역을 누르면 구슬이 자동으로 투입되고 추첨이 시작됩니다.
- 진행 방식: 서버가 물리를 계산하지 않고 브라우저에서 구슬 이동, 충돌, 점수, 장치 효과를 처리합니다.
🎯 추첨 규칙
- 점수: 구슬이 장치, 벽, 세이프바, 다른 구슬과 충돌할 때마다 1점씩 올라갑니다.
- 점수 쿨다운: 별도 쿨다운 없이 충돌이 많이 일어나는 구간에서는 점수가 빠르게 쌓일 수 있습니다.
- 탈락: 구슬이 게임판 최하단 테두리에 닿으면 탈락 처리됩니다.
- 목숨: 추첨자명 오른쪽에 `를 붙이면 그 개수만큼 추가 목숨이 생기며 탈락 시 위에서 재투입됩니다.
- 당첨 확정: 제한 시간이 끝나면 탈락하지 않은 구슬 중 점수 순으로 당첨자가 결정됩니다.
- 생존 확정: 생존 후보 수가 당첨자 수와 같아지면 시간이 남아도 즉시 종료되고 남은 후보가 당첨자로 확정됩니다.
- 단독 생존: 한 명만 남고 그 대상이 현재 1등이면 시간이 남아도 즉시 종료됩니다.
- 동점 처리: 점수가 같으면 더 오래 살아남은 순서와 이름 정렬을 함께 사용해 순위를 정합니다.
- 색상 배정: 빨강, 주황, 노랑, 초록, 청록, 파랑, 보라, 핑크, 은색, 갈색, 베이지 11색을 셔플백으로 섞어 한 세트를 다 쓸 때까지 중복 없이 배정합니다.
- 패턴 배정: 선, 점선, 이중점선, 혜성, 번개, 이중번개, 이중선, 이중혜성 8종을 별도 셔플백으로 섞어 한 세트를 모두 쓸 때까지 고르게 배정합니다.
- 이중선: 이중선 패턴도 본체 구슬은 단색이고 꼬리만 이중선으로 표시합니다.
⚙️ 장치 효과
- 세이프바: 게임판 하단에 붙어 움직이며 구슬을 튕겨 살려주는 자동 바입니다.
- 세이프바 속도: 기본속도는 구슬 속도와 같고, 세이프존 안에서 가장 높은 구슬 속도 보너스와 구슬 수마다 50%p 보너스를 추가로 받습니다.
- 세이프존: 하단 넓은 유리 영역이며 들어간 구슬은 속도 보너스를 받습니다.
- 세이프존 보너스: 세이프존 진입 즉시 보너스는 없고, 안에 머무는 0.5초마다 속도 보너스 10%가 누적됩니다.
- 세이프존 감쇠: 세이프존을 벗어나면 나가는 순간의 보너스가 0.5초마다 5%p씩 감소합니다.
- 자석: 중앙 자석은 주변 구슬을 강하게 끌어당기고 중심에 닿으면 위쪽으로 강하게 튕겨냅니다.
- 웜홀: 보라색 입구와 하늘색 출구가 연결되어 있으며 입구 주변은 끌어당기고 출구 주변은 밀어냅니다.
- 웜홀 이동: 입구에 닿은 구슬은 대응되는 출구에서 나오며 같은 색상의 워프 잔상이 표시됩니다.
- 스피너: 상단 좌우 회전 막대가 구슬을 쳐서 방향을 바꾸고 점수를 추가합니다.
- 난류 터빈: 중앙 상단 회전 장치가 주변 구슬에 회전 흐름과 상승 힘을 줍니다.
- 대형 범퍼: 좌우 대형 범퍼는 충돌한 구슬의 방향을 크게 바꿉니다.
- 소형 범퍼: 상단 소형 핀볼 영역의 9개 범퍼는 짧은 연속 충돌 구간을 만듭니다.
- 장치 순간 가속: 소형 범퍼는 다음 10프레임 20%, 대형 범퍼는 다음 10프레임 100%, 자석 중심 튕김은 다음 10프레임 50% 이동 보너스를 주며 꼬리 길이와 두께에도 반영됩니다.
- 하단 스프링: 최하단 좌우 스프링은 닿은 구슬을 최상단 방향으로 강하게 밀어 올립니다.
- 스위퍼: 하단 가로 이동 막대가 좌우로 움직이며 닿은 구슬을 밀어내고 점수를 추가합니다.
- 가이드 레일: 좌우 벽과 내부 레일은 실제 벽처럼 충돌하며 구슬의 진행 방향을 바꿉니다.
- 구슬 충돌: 구슬끼리도 물리 충돌을 하며 서로 밀려나고 충돌한 양쪽 모두 1점씩 얻습니다.
✨ 표시 효과
- 꼬리: 구슬이 지나간 길을 색상과 패턴이 섞인 꼬리로 표시합니다.
- 꼬리 두께: 속도 보너스가 높을수록 꼬리 두께만 커지고 기본 꼬리도 굵게 표시합니다.
- 꼬리 길이: 속도 보너스로 꼬리 길이는 늘어나지 않고 기록 프레임 수는 고정입니다.
- 충돌 파티클: 장치나 구슬과 부딪히면 충돌 위치에 짧은 빛 조각이 표시됩니다.
- 탈락 파괴: 탈락한 구슬은 큰 섬광, 충격파, 파편 효과로 표시됩니다.
- 모바일 햅틱: 모바일에서는 충돌 때 매우 짧게 진동하고 탈락 파괴 때 강한 진동 뒤 약한 여진을 주며 속도 보너스가 높을수록 진동 길이가 조금 늘어납니다.
- 점수판 구슬: 점수판의 각 추첨자 왼쪽에는 실제 구슬과 같은 색상의 표시가 붙습니다.
- 강조 표시: 점수판에서 대상을 누르면 해당 구슬이 게임판에서 강조되고 다시 누르면 해제됩니다.
- 당첨 표시: 게임 종료 후 당첨자는 점수판에서 녹색 테두리로 표시됩니다.
- 탈락 표시: 탈락자는 점수판에서 붉은 테두리로 표시됩니다.
- 타이머 막대: 게임판과 점수판 사이의 얇은 세로 막대가 남은 시간을 보여줍니다.
🎨 색상/꼬리 종류
🔁 기록과 공유
- 다시보기: 실제 추첨 중 기록한 프레임 데이터를 보간 재생해 같은 결과를 다시 볼 수 있습니다.
- 다시보기 재생: 로컬 다시보기와 공유 다시보기 모두 녹화 영상을 틀지 않고 게임 상태 프레임을 다시 그리는 방식으로 동작합니다.
- 다시보기 보존: 마지막 추첨의 프레임 기록은 현재 탭에서 마지막 결과용으로 유지되고 다음 게임을 시작하면 정리됩니다.
- 공유: 공유 버튼을 누르면 당첨 결과와 다시보기 프레임 데이터를 업로드하고 공유 링크를 복사합니다.
- 공유 데이터: 서버에는 당첨 결과 JSON과 압축된 다시보기 프레임 데이터가 저장됩니다.
- 공유 링크: 공유 주소는 MarbleLottery?share=식별자 형식으로 만들어집니다.
- 공유 보관: 공유 결과는 data 폴더에 저장되고 30일 동안 아무도 접근하지 않으면 삭제 대상이 됩니다.
- 방 생성: 방 링크는 당첨자 수, 시간, 맵을 기본값으로 이어받고 참가자 접수 후 방장이 추첨을 시작합니다.
- 방 보관: 방 데이터는 Z:\Temp\MarbleLottery\rooms 폴더에 저장되고 30일 동안 아무도 접근하지 않으면 삭제됩니다.
- 공유 접속: 공유 링크로 들어오면 새 추첨 시작이 아니라 공유된 결과 화면으로 열리고 다시보기가 자동 재생됩니다.
- 세션 저장: 추첨자 목록은 같은 탭을 새로고침해도 유지되고 탭을 닫으면 사라집니다.
- 시간 URL 저장: 시간 입력값은 URL의 time 값으로 저장됩니다.
60초