점심 메뉴가 안 정해질 때, 벌칙 받을 사람을 뽑을 때, 당첨자를 고를 때 돌림판 하나면 깔끔합니다. 항목만 적어 넣고 돌리면 됩니다. 특정 항목이 더 잘 나오게 가중치도 줄 수 있습니다.
룰렛 사용법
항목 칸에 후보를 적습니다(예: 한식·중식·일식). '돌리기'를 누르면 돌림판이 회전하다 멈추고, 위쪽 화살표가 가리키는 항목이 당첨입니다. 항목은 최대 12개까지 추가할 수 있습니다.
각 항목 옆 숫자는 가중치입니다. 기본은 모두 1로 공평하지만, 어떤 항목을 더 자주 나오게 하고 싶으면 숫자를 키우면 됩니다. 가중치가 2이면 1인 항목보다 두 배 자주 나옵니다.
회전은 연출, 당첨은 난수
돌림판이 도는 동안 결과가 정해지는 게 아닙니다. '돌리기'를 누른 순간 당첨 항목이 브라우저 난수로 확정되고, 회전은 그 항목 앞에 화살표가 오도록 멈추는 연출일 뿐입니다. 그래서 '한 바퀴만 더 돌면 바뀔까' 같은 여지는 없습니다.
가중치를 다르게 줬다면 그만큼 부채꼴 넓이가 달라집니다. 넓이와 확률이 정확히 비례하도록 계산하니, 화면에서 넓어 보이는 칸이 실제로도 그만큼 자주 걸립니다.
당첨 숫자는 어떻게 뽑히나
당첨을 정하는 숫자는 브라우저에 내장된 암호학적 난수 발생기(crypto.getRandomValues)에서 나옵니다. 흔히 쓰는 Math.random과 달리 앞뒤 값을 넘겨짚기 어렵게 설계돼 있어, 누가 언제 돌리든 특정 항목 쪽으로 결과가 쏠릴 틈이 없습니다.
뽑은 숫자를 항목 수로 곧장 나누면 앞쪽 칸이 아주 조금 더 자주 걸리는 치우침(모듈로 편향)이 남습니다. 이 룰렛은 편향이 생길 구간의 값을 버리고 다시 뽑아 그 미세한 차이까지 지웁니다. 가중치도 소수 대신 정수로 환산해 더하므로, 부채꼴 넓이와 실제 확률이 누적 오차 없이 맞아떨어집니다. 이 계산은 페이지와 함께 받는 공개 코드에 적혀 있어 직접 열어 확인할 수 있습니다.
이럴 때 돌리고, 이런 오해는 접어 두기
후보가 여럿인 점심·회식 메뉴, 벌칙이나 청소 당번, 소규모 경품처럼 '여럿 중 하나'를 골라야 할 때 어울립니다. 여러 사람이 한 화면을 보며 돌리면 결과를 다 같이 동시에 확인하니 시비가 줄어드는 것도 장점입니다.
가끔 '아까 그 메뉴가 또 나왔다'며 룰렛이 특정 항목에 치우친 것 아니냐 묻습니다. 하지만 매 회전은 앞선 결과와 무관하게 새로 뽑히기 때문에, 같은 항목이 연달아 나오는 것도 정상 범위입니다. 주사위를 굴려 6이 두 번 잇따라 나오는 것과 다르지 않습니다.