켜 두기만 해도 다 되면 오래 한 사람이 늘 이긴다 — 방치형 킹덤 자동 도약을 하루 10번으로 묶은 이야기
방치형 킹덤의 자동 성장과 자동 도약이 «그냥 두면 알아서 다 된다»는 지적을 받고, 시뮬레이션으로 빈틈을 재서 고친 기록입니다. 자동 도약을 하루 10번으로 묶고, 쉬는 중을 20분으로 줄이고, 가장 짧은 간격 3분을 뺐고, 탑 랭킹에 «이번 주» 판을 붙였습니다.
방치형 킹덤에는 자동 성장(금화를 저절로 쓴다)과 자동 도약(높이가 멈추면 저절로 뛴다)이 있습니다. 도약석으로 특성을 사면 열립니다. 열어 둔 사람이 자는 동안에도 판이 돌아가니 편한 기능이고, 편한 만큼 한 가지 걱정이 따라왔습니다. 그냥 두면 알아서 다 되는데, 그러면 나중에는 오래 켜 둔 사람이 무조건 이기는 게임이 되지 않느냐는 것입니다.
맞는 걱정이라 숫자부터 쟀습니다. 이 글은 무엇을 재서 무엇을 고쳤는지의 기록입니다.
먼저 잰 것 — 무엇이 빈틈이었나
두 기능을 따로 보았습니다.
- 자동 성장은 처음부터 «보통 손»이 쓰는 방식 그대로입니다. 금화를 가장 싼 것부터 쓰는 그 셈법이고, 이 게임의 층별 난이도 표가 바로 그 손으로 재서 만든 값입니다. 자동 성장이 있다고 표가 틀어지지 않습니다. 그래서 그대로 두었습니다.
- 빈틈은 쉬는 중에 있었습니다. 손을 안 대면 용사들이 쉬고 자동도 멈추는데, 그 기준이 1시간이었습니다. 한 시간에 한 번만 화면을 건드리면 하루 내내 자동이 돌 수 있었습니다.
네 가지를 고쳤습니다
- 자동 도약은 하루 10번까지. 그 뒤는 도약 탭에서 손으로 뜹니다. 손으로 뛴 것은 세지 않습니다. 게임 안에는 «오늘 자동 도약 n / 10»으로 보입니다.
- 쉬는 중을 20분으로. 20분 동안 손을 안 대면 자동 성장도 자동 도약도 멈춥니다.
- 자동 도약의 가장 짧은 간격 3분을 뺐습니다. 이제 5 · 10 · 20분 중에 고릅니다.
- 탑 랭킹에 «이번 주» 판을 붙였습니다. 아래에 따로 적습니다.
왜 10번이고, 3분은 왜 뺐나
하루 10번은 «켜 둔 한 시간에 도약 하나쯤»이라는 계산에서 나왔습니다. 하루에 네댓 시간 하는 사람은 거의 닿지 않고, 하루 내내 켜 두는 사람만 묶입니다.
3분은 시뮬레이션으로 정했습니다. 1,000층까지 오르는 데 걸리는 시간입니다(앞의 세 줄은 하루 몫 제한을 두지 않았을 때입니다).
| 도약하는 방식 | 1,000층까지 |
|---|---|
| 손으로 가장 잘 뛰는 손 | 74시간 |
| 자동 도약 3분 | 86시간 |
| 자동 도약 5분 | 97시간 |
| 자동 도약 5분 + 하루 10번 | 108시간 |
3분이면 가장 잘 뛰는 손과 14%밖에 차이가 안 납니다. 그러면 켜 두는 쪽이 손으로 하는 쪽을 거의 따라잡습니다. 5분으로 하면 차이가 24%로 벌어집니다. 손으로 하는 몫이 커집니다.
고친 뒤에 어떻게 달라졌나
하루에 몇 시간씩 하는 사람이 3,000층 고개를 넘는 날을 같은 시뮬레이션으로 다시 쟀습니다. 앞은 고치기 전, 뒤는 고친 뒤입니다.
| 하루 | 앞 | 뒤 |
|---|---|---|
| 2시간 | 339일 | 368일 |
| 4시간 | 186일 | 198일 |
| 8시간 | 96일 | 103일 |
| 12시간 | 65일 | 71일 |
늦어졌지만 차례는 그대로입니다. 오래 하는 쪽이 앞서는 것은 맞고, 앞서는 폭만 줄었습니다. 쉬지 않고 돌리는 경우는 1,000층에 95시간에서 119시간으로, 3,000층에 787시간에서 893시간으로 늦어졌습니다. 하루 2 ~ 4시간 하는 사람은 하루 몫 10번에 거의 닿지 않아서, 이 사람들이 늦어진 것은 거의 다 «3분 → 5분» 때문입니다.
오래 한 사람과 따로 다툴 판 — 탑 «이번 주»
시간을 묶는 것만으로는 부족하다고 보았습니다. 누적 랭킹은 먼저 시작한 사람이 계속 앞이고, 늦게 들어온 사람에게는 보이는 목표가 없습니다. 그래서 랭킹 탭의 탑 칸에 누적 · 이번 주 두 갈래를 두었습니다.
이번 주는 월요일부터 이번 주에 새로 올린 층 수로 줄을 세웁니다. 앞 층은 빨리 오르니, 예를 들어 1,000층인 사람이 한 주에 40층 오르는 것보다 갓 시작한 사람이 300층 오르는 쪽이 앞섭니다. 늦게 시작해도 1위를 다툴 수 있습니다. 한 층도 안 올랐으면 줄에 서지 않고, 지난주 칸은 따로 남기지 않습니다. 보상이나 칭호는 아직 붙이지 않았습니다.
며칠 쉬고 돌아온 첫 동기화에 실린 자리 비움의 몫은 그 주에 들지 않습니다. 돌아와서 오른 것부터 셉니다.
서버 쪽 한 가지
주간 판을 위해 새 표를 만들면, 최고 층이 오른 동기화마다 쓰기 한 줄이 늘어납니다. 이 게임이 쓰는 Cloudflare D1은 쓰기가 읽기보다 훨씬 비싸서(조회수 노트에 같은 D1 이야기가 있습니다), 표를 늘리지 않고 계정 줄에 칸 두 개를 더했습니다. 주마다 첫 동기화 때 그 주 출발 층을 한 번 적고, 순위는 읽을 때 «지금 최고 층 − 출발 층»으로 셉니다. 쓰기 줄 수는 그대로이고, 대신 순위를 읽을 때 그 주에 동기화한 계정을 훑어야 합니다. 그 읽기는 순위의 공통 부분을 1분 동안 담아 두는 것으로 덜었습니다.
짐작으로 둔 값
하루 10번과 쉬는 중 20분은 짐작으로 정한 값이지 정답이 아닙니다. 해 보고 답답하거나 느슨하면 고칩니다. 탑 «이번 주»에 보상을 붙일지도 아직 정하지 못했습니다. 붙이면 지난주 칸과 표가 같이 들기 때문입니다.
용사를 키우는 다섯 계단은 용사 하나를 세게 만드는 다섯 계단에, 전체 소개는 게임 소개에 탭으로 나눠 두었습니다.