Играйте в одиночку — и три замка из четырёх обороняет машина. Каждый компьютерный военачальник крутит один и тот же короткий цикл: найти мяч, которого стоит бояться, угадать, где он пересечёт твою стену, скользнуть ему навстречу, — а вся разница между тюфяком и угрозой сводится к четырём числам.
Написано и отредактировано на английском языке. Эта русская версия создана машинным переводом; там, где важна точность, авторитетным остаётся английский оригинал. Читать оригинал на английском →
Первое дело военачальника, сто двадцать раз в секунду, — сортировка. Когда по арене гуляет до двух мячей, ИИ должен решить, какой из них достоин его щита. Он оценивает каждый активный, никем не удерживаемый мяч по расстоянию до собственного короля, а затем вычитает постоянную скидку в 250 единиц у всякого мяча, который и вправду летит к углу: с мячом, уходящим прочь, обращаются так, будто он на 250 единиц дальше, чем на самом деле. 1 Наименьшая оценка получает внимание щита.
В итоге получается защитник, который не паникует из-за мяча, безобидно пролетающего мимо, но мгновенно цепляется за тот, что и ближе, и летит на него. Это грубая модель того, что человек делает не думая: следи за тем, что летит в тебя, не обращай внимания на то, что улетает. Всё суждение — одно скалярное произведение скорости мяча и направления на короля: положительное значит «нацелен на меня», и этого довольно.
Выбрав угрозу, военачальник должен решить, где именно быть на своём диагональном рельсе. Он не просчитывает весь путь отскоков — никакой трассировки отражений, никаких прогнозов от стен. Он берёт положение мяча, подталкивает его на короткий шаг вперёд вдоль текущей скорости (упреждение в 0,12 секунды) и проецирует эту будущую точку прямо на рельс, получая целевую долю между 0 и 1. 1
Это намеренно неглубокое предсказание, и именно поэтому ИИ можно обыграть. Поскольку он упреждает лишь на восьмую долю секунды и никогда не предвидит рикошета, мяч, который придёт через отскок от стены, его обманывает: он связывает себя тем, куда мяч смотрит сейчас. Человек, отбивающий броски от краёв арены, пользуется ровно этим слепым пятном. Машина реагирует на настоящее с волосок предвидения; она не планирует.
Компьютер не вычисляет будущее мяча. Он подаётся на восьмую долю секунды вперёд, наводит щит туда, где мяч оказался бы, если бы ничто не вмешалось, и позволяет всему, что вмешивается, стать вашей возможностью.
Все три сложности используют одно и то же тело кода. Между лёгкой, средней и сложной меняется лишь строка из четырёх настроечных чисел. 1 Дрожь добавляет к цели щита случайную погрешность, так что прицел лёгкого военачальника гуляет почти на пятую часть его рельса, а у сложного он почти точен. Дистанция реакции задаёт, насколько близко должен подойти мяч, прежде чем военачальник вообще станет его отслеживать: лёгкий не замечает ничего дальше 420 единиц от своего короля — чуть меньше половины ширины поля; сложный отслеживает мяч через всю арену. Шанс перехвата — вероятность того, что он поймает мяч, подошедший к его щиту достаточно близко, чтобы быть пойманным. А прицел по соперникам — единственный переключатель, решающий, играет ли военачальник в нападении вообще.
| Ручка | Лёгкий | Средний | Сложный |
|---|---|---|---|
| Дрожь прицела (доли рельса) | 0.18 | 0.07 | 0.015 |
| Дистанция реакции (единицы) | 420 | 700 | 2,000 |
| Шанс перехвата | 0% | 25% | 55% |
| Целится в соперников? | нет | нет | да |
Все четыре значения берутся из одной маленькой настроечной таблицы внутри игрового движка Bulwark — по строке на уровень. Дистанция реакции на сложном записана как удвоенная ширина арены, а арена — квадрат со стороной 1 000 единиц, так что 2 000 единиц означают «отслеживает всегда». 1
Лёгкий или средний военачальник никогда не ловит мяч с намерением ударить. Лёгкий не ловит его вовсе, а средний — лишь изредка, не имея никакого плана на то, что делать с мячом, когда тот у него окажется. Щёлкните переключателем прицела по соперникам — тем, что есть только у сложного уровня, — и ИИ перестаёт быть чисто реактивным. Удерживая мяч, он оглядывает поле, выбирает самого израненного соперника (того, у кого осталось меньше всего кирпичей) и целится туда. 1
Делает он это безо всякого поиска пути. Он перебирает одиннадцать возможных положений вдоль собственного рельса и для каждого воспроизводит расчёт выпуска, заложенный в движке, чтобы увидеть, в каком направлении полетел бы такой бросок, а затем оставляет то положение, чей исходящий вектор смотрит точнее всего на выбранную жертву. 1 Это перебор горстки вариантов, а не хитроумие, но перебор терпеливый: выбрав точку, военачальник удерживает мяч, пока щит и вправду туда не доедет, и отпускает лишь тогда, когда тот прибыл или когда удерживал так долго, что дальнейшее ожидание обойдётся дороже, чем стоит сам бросок. Умысел безошибочно стратегический — ровно то, что сделал бы человек, охотящийся за лёгкой добычей. Выбор цели по принципу «меньше всего кирпичей» наводит трёх независимых защитников на того, кто и так уже проигрывает.
Всё «случайное», что делает военачальник, — дрожь прицела, подбрасывание монетки насчёт перехвата — берётся из генератора с зерном, компактной процедуры, известной как mulberry32, которая превращает одно начальное число в длинный воспроизводимый поток псевдослучайных значений. 2 Дайте ей то же зерно — и она навсегда выдаст ту же последовательность. Живой матч берёт зерно из часов, так что никакие две партии не начинаются одинаково; но верните то же зерно — и матч пройдёт заново в точности так же: те же углы запуска, та же дрожь, те же перехваты.
Этот детерминизм — не косметическая подробность. Именно он делает игру проверяемой: её набор тестов играет целые матчи компьютера против компьютера от фиксированного зерна и ожидает всякий раз один и тот же результат. И именно он позволяет упаковать всю симуляцию — вместе с курсором генератора — в JSON и собрать заново, так что в сети ведущий может передавать своё состояние потоком, а каждый из остальных игроков восстанавливает у себя точно такое же поле. Военачальники кажутся живыми, потому что их ошибки выглядят человеческими; а под этим их «инстинкты» — короткая арифметическая рекуррента, которую кто угодно может отмотать к началу. Машине, стерегущей замок, как выясняется, нужно лишь несколько чисел и поток воспроизводимой удачи. 2