혼자 플레이하면 네 개의 성 가운데 셋을 기계가 지킵니다. 컴퓨터 군벌은 저마다 똑같은 짧은 순환을 돌립니다. 두려워할 만한 공을 찾고, 그것이 자기 벽을 어디서 넘을지 짐작하고, 미끄러져 그 자리로 마중 나가는 것입니다. 그리고 만만한 상대와 위협적인 상대를 가르는 것은 결국 네 개의 숫자입니다.
영어로 집필하고 편집했습니다. 이 한국어 판은 기계 번역으로 만들어졌으며, 정확성이 중요한 경우에는 영어 원문이 기준이 됩니다. 영어 원문 읽기 →
군벌의 첫 번째 임무는 1초에 백스무 번씩 이루어지는 분류입니다. 아레나에는 공이 최대 두 개까지 돌아다닐 수 있고, AI는 그 가운데 어느 것이 자기 방패를 받을 자격이 있는지 정해야 합니다. AI는 아직 잡히지 않은 활성 상태의 공 하나하나에 자기 왕까지의 거리로 점수를 매긴 다음, 실제로 그 모서리를 향해 오고 있는 공에게서는 250단위라는 고정 보너스를 뺍니다. 멀어지고 있는 공은 실제보다 250단위만큼 더 멀리 있는 것처럼 취급되는 셈입니다. 1 점수가 가장 낮은 공이 방패의 주의를 얻습니다.
그 결과는 무해하게 스쳐 지나가는 공에 허둥대지 않으면서도, 더 가깝고 게다가 다가오고 있는 공에는 딱 달라붙는 수비수입니다. 이것은 사람이 생각하지 않고도 하는 일을 거칠게 본떠 놓은 모형입니다. 나에게 오는 것은 지켜보고, 떠나는 것은 무시하라. 이 판단 전체는 공의 속도와 왕을 향하는 방향 사이의 내적 하나이며, 값이 양수면 “나를 겨누고 있다”는 뜻이고, 그것으로 충분합니다.
위협을 골랐으면, 군벌은 자기 대각선 레일 위 어디에 있을지를 정해야 합니다. 군벌은 튕김 경로를 온전히 풀지 않습니다. 반사를 추적하지도, 벽에 맞고 어디로 갈지 예측하지도 않습니다. 군벌은 공의 위치를 가져와 현재 속도를 따라 짧은 한 걸음만큼(0.12초의 선행) 앞으로 밀어 보고, 그 미래의 점을 레일 위에 그대로 투영해 0과 1 사이의 목표 비율을 얻습니다. 1
이것은 의도적으로 얕은 예측이며, 그래서 AI는 이길 수 있는 상대입니다. 8분의 1초만 앞질러 볼 뿐 도탄을 결코 예상하지 않으므로, 벽에 한 번 튕겨 도착할 공은 군벌을 속여 넘깁니다. 군벌은 공이 지금 가리키고 있는 곳에 자신을 맡깁니다. 아레나 가장자리에 공을 튕겨 쏘는 사람은 바로 이 맹점을 파고드는 것입니다. 기계는 수염 한 올만큼의 예지력으로 현재에 반응할 뿐, 계획하지는 않습니다.
컴퓨터는 공의 미래를 계산하지 않습니다. 8분의 1초만큼 앞으로 몸을 기울여, 아무것도 끼어들지 않는다면 공이 있을 자리에 방패를 겨누고, 끼어드는 모든 것을 여러분의 기회로 남겨 둡니다.
세 가지 난이도는 완전히 똑같은 코드 본체를 공유합니다. 쉬움, 보통, 어려움 사이에서 달라지는 것은 네 개의 조정 숫자가 늘어선 한 줄뿐입니다. 1 흔들림은 방패의 목표에 무작위 오차를 더하므로, 쉬움 군벌의 조준은 자기 레일의 5분의 1에 가깝게 헤매는 반면 어려움 군벌은 거의 정확합니다. 반응 거리는 군벌이 공을 굳이 따라가기 시작하기까지 공이 얼마나 가까이 와야 하는지를 정합니다. 쉬움 군벌은 자기 왕에게서 420단위보다 멀리 있는 것은 무엇이든 무시하는데, 이는 보드 너비의 절반에 조금 못 미칩니다. 어려움 군벌은 아레나 전체를 가로질러 추적합니다. 포획 확률은 방패에 잡힐 만큼 가까이 온 공을 실제로 붙잡을 확률입니다. 그리고 경쟁자 조준은 군벌이 공격에 나서는지 여부를 결정하는 스위치 하나입니다.
| 다이얼 | 쉬움 | 보통 | 어려움 |
|---|---|---|---|
| 조준 흔들림(레일 비율) | 0.18 | 0.07 | 0.015 |
| 반응 거리(단위) | 420 | 700 | 2,000 |
| 포획 확률 | 0% | 25% | 55% |
| 경쟁자를 조준하는가? | 아니요 | 아니요 | 예 |
네 값은 모두 Bulwark 게임 엔진 안의 작은 조정 표 하나에서 나오며, 난이도 단계마다 한 줄씩입니다. 어려움의 반응 거리는 아레나 너비의 두 배로 적혀 있고 아레나는 한 변이 1,000단위인 정사각형이므로, 2,000단위란 “언제나 추적한다”는 뜻입니다. 1
쉬움이나 보통 군벌은 공격할 뜻을 품고 공을 잡는 법이 없습니다. 쉬움 군벌은 아예 공을 잡는 일이 없고, 보통 군벌은 이따금 잡을 뿐이며, 그나마도 일단 공을 손에 넣은 뒤 그 공으로 무엇을 할지에 대한 계획이 없습니다. 어려움 단계만이 켜는 그 경쟁자 조준 스위치를 올리면, AI는 순전히 반응만 하는 존재이기를 그만둡니다. 공을 쥐고 있을 때 AI는 보드 건너편을 살펴 가장 크게 다친 경쟁자, 곧 벽돌이 가장 적게 남은 상대를 고르고 그쪽을 겨눕니다. 1
AI는 이 일을 아무런 경로 탐색 없이 해냅니다. 자기 레일을 따라 열한 개의 후보 위치를 표본으로 삼고, 각각에 대해 엔진의 발사 계산을 그대로 재현해 그 위치에서 쏜 공이 어느 방향으로 날아갈지 확인한 다음, 나가는 벡터가 고른 희생자를 가장 곧게 가리키는 위치를 남깁니다. 1 영리함이라기보다 몇 안 되는 선택지에 대한 무차별 대입이지만, 그 일에 관해서는 끈기가 있습니다. 자리를 정한 군벌은 방패가 실제로 그 자리까지 미끄러져 갈 때까지 공을 쥐고 있다가, 도착했을 때 또는 더 기다리는 값이 그 한 발의 값어치보다 커질 만큼 오래 쥐고 있었을 때에야 놓아 줍니다. 그 의도는 누가 봐도 전략적이며, 손쉬운 사냥감을 노리는 사람이 할 법한 바로 그 행동입니다. “남은 벽돌이 가장 적은” 쪽으로 표적을 고른다는 것은, 이미 지고 있는 쪽으로 세 명의 독립적인 수비수가 한꺼번에 총구를 돌린다는 뜻입니다.
군벌이 하는 모든 “무작위”한 일, 곧 조준의 흔들림이든 붙잡을지 말지를 정하는 동전 던지기든, 모두 시드가 주어진 생성기에서 뽑혀 나옵니다. mulberry32라고 알려진 이 단출한 루틴은 시작 숫자 하나를 길고 되풀이 가능한 의사 난수의 흐름으로 바꿉니다. 2 같은 시드를 주면 언제까지나 같은 수열을 내놓습니다. 실시간 경기는 시드를 시계에서 가져오므로 어떤 두 판도 똑같이 시작하지 않지만, 같은 시드를 다시 건네주면 경기는 그대로 다시 흘러갑니다. 같은 발사 각도, 같은 떨림, 같은 포획이 재현됩니다.
이 결정론은 겉치레에 불과한 세부 사항이 아닙니다. 이것이 게임을 시험 가능하게 만들어 줍니다. 게임의 테스트 모음은 고정된 시드로 컴퓨터 대 컴퓨터의 경기를 통째로 플레이하고 매번 같은 결과를 기대합니다. 또한 이것 덕분에 생성기의 커서까지 포함한 시뮬레이션 전체를 JSON으로 꾸려 다시 세울 수 있으며, 그래서 온라인에서는 호스트가 자기 상태를 흘려보내고 다른 플레이어들이 저마다 똑같은 보드를 다시 세웁니다. 군벌들이 살아 있는 것처럼 느껴지는 까닭은 그들의 실수가 사람의 것처럼 보이기 때문이지만, 그 밑바탕에서 그들의 “본능”은 누구든 처음으로 되감을 수 있는 짧은 산술 점화식입니다. 성을 지키는 기계에게 필요한 것은, 알고 보니 몇 개의 숫자와 재현 가능한 운의 흐름뿐이었습니다. 2