놀이터 › 시계탑 수비대 › 시계탑 수비대 균형을 봇 900판으로 맞춘 이야기
시계탑 수비대 균형을 봇 900판으로 맞춘 이야기
디펜스 게임에서 제일 어려운 것은 그림도 조작도 아니라 균형입니다. 너무 쉬우면 금방 지겹고 너무 어려우면 두 번째 판이 없습니다. 눈으로 몇 판 해 보고 맞추면 내가 아는 방식에만 맞춰집니다. 그래서 전략이 다른 봇 셋을 만들어 300판씩 두게 했습니다. 결과는 12.7%부터 85.7%까지 벌어졌습니다.
규칙을 화면과 떼어 놓았습니다
게임 규칙 전체가 화면과 분리된 한 파일에 들어 있습니다. 그리는 코드가 한 줄도 섞여 있지 않습니다. 그래서 브라우저 없이도 그대로 돌릴 수 있습니다.
이 구조가 아니면 밸런스를 수백 판 돌려 재는 것이 불가능합니다. 화면을 띄워 놓고 실제 시간으로 11분짜리 판을 900번 하려면 165시간이 걸립니다. 그리지 않고 규칙만 돌리면 몇 분이면 끝납니다.
난수에는 씨앗을 넣었습니다. 같은 씨앗을 주면 같은 판이 다시 나옵니다. 그래서 "이 판에서 왜 졌는지"를 몇 번이고 다시 볼 수 있습니다.
봇 세 종류
| 이름 | 무엇을 먼저 놓나 |
|---|---|
| 경제우선형 | 삐약이 셋을 먼저 깔고 코인을 모은 뒤 공격을 세웁니다 |
| 균형형 | 삐약이 하나, 싹이 하나를 번갈아 놓으며 고르게 올립니다 |
| 방어우선형 | 단이부터 앞줄을 채우고 그 뒤에 공격을 붙입니다 |
봇은 사람이 아닙니다. 정해진 순서대로 놓고, 살 수 있는 것 중 목록 앞쪽을 삽니다. 비싼 것을 기다리다 아무것도 못 놓는 일이 없도록 후보 세 개 중 살 수 있는 첫 번째를 사게 했습니다. 카드도 정해진 선호 순서대로 고릅니다.
결과
| 전략 | 판 수 | 승률 | 이겼을 때 남은 체력 | 체력 5 이하로 이긴 비율 | 평균 시간 |
|---|---|---|---|---|---|
| 경제우선형 | 300판 | 85.7% | 5.5 | 43% | 12.5분 |
| 균형형 | 300판 | 68.7% | 5.2 | 47% | 11.2분 |
| 방어우선형 | 300판 | 12.7% | 4.9 | 53% | 4.5분 |
세 전략이 12.7%와 85.7%로 벌어졌습니다. 같은 게임을 같은 규칙으로 두는데 순서만 다릅니다. 이것이 뜻하는 것은 이 게임에 "먼저 무엇을 놓느냐"라는 실제 선택이 살아 있다는 것입니다. 어떻게 놓든 비슷하게 이기면 고를 이유가 없습니다.
방어우선형이 평균 4.5분인 것은 잘 지키다 늦게 진 것이 아니라 3~4파도에서 일찍 졌기 때문입니다. 300판 중 209판이 3파도와 4파도에서 끝났습니다.
이겨도 아슬아슬합니다
승률만 보면 경제우선형이 85.7%로 편해 보입니다. 그런데 이긴 판만 따로 보면 시계탑 체력 8 중에 평균 5.5가 남았고, 체력 5 이하로 간신히 이긴 판이 43%입니다.
절반 가까이가 마지막에 한두 번만 더 뚫렸으면 졌을 판이라는 뜻입니다. 이기기는 하는데 편하게 이기지는 않는 상태이고, 디펜스 게임에서는 이쯤이 괜찮은 자리라고 보고 여기서 멈췄습니다.
방어우선형은 이겼을 때 남은 체력이 4.9로 가장 낮고 아슬아슬하게 이긴 비율도 53%로 가장 높습니다. 승률이 낮은 전략이 이기는 경우는 거의 겨우 이기는 경우입니다.
균형 값은 한 곳에만 둡니다
시계탑 체력, 시작 코인, 파도 사이 시간, 체력 증가율, 코인 배율, 치명타 배수, 반격 비율, 감싸기 비율, 회복 비율, 굳기 시간과 재사용 시간이 전부 한 덩어리에 모여 있습니다.
여기저기 흩어져 있으면 하나를 고칠 때 다른 곳에 같은 숫자가 남아서 서로 어긋납니다. 한 곳에 모아 두면 값을 바꾸고 봇을 900판 돌려 승률이 어떻게 변했는지 바로 볼 수 있습니다.
| 값 | 지금 설정 |
|---|---|
| 시계탑 체력 | 8 |
| 시작 코인 | 150 |
| 파도 사이 쉬는 시간 | 6초 |
| 파도마다 적 체력 증가 | 1.3배씩 |
| 코인 배율 | 1.55배 |
| 치명타 배수 | 2.2배 |
| 단이 반격 비율 | 35% |
| 포근이 감싸기 | 피해 75%로 |
| 삐약이 회복 | 최대 체력의 12% |
| 굳기 지속 / 재사용 | 4초 / 14초 |
승률만 보면 놓치는 것
승률 하나만 재면 균형이 맞는지 알 수 없습니다. 승률 85%가 "쉬워서 85%"인지 "아슬아슬하게 이겨서 85%"인지가 전혀 다른 이야기인데, 승률 숫자는 그 둘을 구분하지 못합니다.
그래서 네 가지를 같이 잽니다.
| 재는 것 | 무엇을 알려 주나 |
|---|---|
| 승률 | 전체 난이도 |
| 이겼을 때 남은 체력 | 이기는 판이 편한지 아슬아슬한지 |
| 체력 5 이하로 이긴 비율 | 막판 긴장이 살아 있는지 |
| 진 파도 분포 | 고비가 어디에 몰려 있는지 |
| 평균 시간 | 지루해지는 길이인지 |
진 파도 분포가 가장 쓸모 있었습니다. 방어우선형의 패배 300판 중 209판이 3·4파도에 몰려 있다는 것을 보고 나서야, 문제가 "전체가 어렵다"가 아니라 "초반 코인 운용이 틀리면 거기서 끝난다"라는 것을 알았습니다.
평균 시간도 같이 봅니다. 11~12분이면 한 판 하기에 괜찮은 길이입니다. 이 숫자가 20분을 넘어가면 파도 수나 적 수를 줄여야 한다는 뜻입니다.
남은 것
봇 승률은 사람 승률이 아닙니다. 봇은 정해진 순서대로 놓을 뿐이고, 구름이 어느 열로 오는지 보고 대응하지 않습니다. 사람이 하면 이보다 높게 나올 것으로 보이지만 그것은 아직 재 보지 않았습니다.
지금 균형은 "봇 기준으로 가장 좋은 전략이 85.7%, 가장 나쁜 전략이 12.7%"인 상태입니다. 사람이 해 본 기록이 쌓이면 그걸 보고 다시 맞출 생각입니다.