Здесь не нужно знать весь движок наизусть. Нужно понять три решения, которые принимает ваша команда, и оттачивать их, пока они не начнут приносить победы. Мы проведём вас от готового шаблона до первой победы над настоящим соперником.
Не нужно писать команду с нуля. Короткий путь такой: начните с того, что уже работает, и планомерно улучшайте, измеряя каждое изменение.
Она уже играет конкурентоспособно: пасует, бьёт по углам и прессингует свободные мячи. Это ваша отправная точка, а не чистый лист.
Меняйте только тактику или только игрока. Единственное изменение за раз — единственный способ понять, что помогает, а что вредит.
Сведите её с несколькими соперниками на множестве сидов и смотрите на win-rate и статистику. Так вас не обманет один везучий матч.
Загрузите команду на платформу и померяйтесь силами в лигах с рейтингом ELO или создайте свою. Код говорит сам за себя.
Ваша команда принимает решения на трёх уровнях. Ключевая идея: ИИ (если вы его используете) задаёт план в медленном темпе, а быстрый детерминированный слой исполняет его каждое мгновение. Так модели не приходится решать 20 раз в секунду. Настраивайте только интересный вам слой; остальное используйте повторно.
Читает счёт и время и задаёт установку: атаковать, баланс или обороняться. Решает редко, но задаёт тон. CoachBrain.decide(ctx)
Расставляет команду на поле четырьмя регуляторами: высота линии, ширина, прессинг и фланг. Почти всегда именно здесь выигрывают или проигрывают. TeamStrategy.plan(ctx)
Решает каждое мгновение: двигаться, пасовать, бить, спринтовать. Быстро и реактивно, по одному на игрока. PlayerBrain.decide(view)
Хотите узнать в деталях, что получает и что возвращает каждый слой? Это в Руководстве участника.
Вы не считаете позиции вручную. Вы выбираете четыре значения, и движок превращает их в расстановку каждого игрока. Их можно зафиксировать или менять по ходу матча (реактивная тактика).
Насколько высоко играет ваша команда. Низкая — отошедший назад надёжный блок; высокая — вы прессингуете впереди, но оставляете пространство за спиной.
Насколько широко расположена команда. Компактно закрывает центр; широко ищет фланги и растягивает соперника.
С какой интенсивностью вы идёте за мячом. Внимание: сегодня активный прессинг утомляет и не всегда отбирает мяч (см. «мета» ниже).
Куда вы смещаете игру. По умолчанию центр; сместите на фланг, чтобы атаковать оттуда или искать открывание своего нападающего.
Фиксированная тактика — это словарь регуляторов. Реактивная — функция, которая пересчитывает их, глядя на матч. Обе короткие.
# 1) ФИКСИРОВАННАЯ тактика: постоянный стиль
from aicup import TacticalStrategy
mi_estilo = TacticalStrategy("Mi estilo", {
"line_height": 0.35, # оттянутый, надёжный
"width": 0.45, # компактно по центру
"pressing": 0.30, # выжидаю, не бросаюсь вперёд
})
# 2) РЕАКТИВНАЯ тактика: меняется по ходу матча
from aicup.tactics import progress, possession
def mandos(ctx):
defendiendo = possession(ctx) == "theirs" or progress(ctx) < 0.45
if defendiendo:
return {"line_height": 0.30, "pressing": 0.35} # отхожу в оборону
return {"line_height": 0.74, "pressing": 0.50} # отобрав мяч, бросаюсь вперёд
mi_contra = TacticalStrategy("Mi contraataque", mandos)
Регулятор, который вы не зададите, использует значение по умолчанию. Полная галерея (tiki-taka, catenaccio, gegenpressing…) и то, как написать игрока и тренера, есть в документации по тактикам.
Советы, рождённые из сотен сыгранных матчей. Это не магия: это привычки, отличающие конкурентоспособную команду от той, что просто отбывает номер.
Один матч обманчив: везение весомо. Используйте спарринг на множестве сидов и решайте по win-rate, а не по ощущениям.
Сегодня компактный, оттянутый назад блок эффективнее высокого прессинга. Начните с надёжной обороны и развивайтесь оттуда.
Спринты и мощные удары утомляют. Приберегите спринты на концовку и прессингуйте выдохшегося соперника.
В своём игроке читайте view.plan: он подсказывает, где встать и кому идти на мяч. Не импровизируйте в одиночку.
Бить в центр — дарить мяч вратарю. Цельтесь в штанги и регулируйте силу: не всё решает максимальная мощь.
Сначала тактика (регуляторы), затем игрок (пасы, удары, опека) и в последнюю очередь тренер (когда рисковать).
Почти все спотыкаются здесь в начале. Если предвидеть их, сэкономите с полдюжины глупых поражений.
Вы ждёте отбора, а только устаёте. Решение: снизьте pressing и прессингуйте моментами, а не всё время.
GK вдали от своих ворот — это подаренные голы. Решение: не давайте ему отходить; посмотрите, как с ним обходится игрок из примера.
Вы поднимаете всех, и вас ловят за спиной. Решение: поднимайте полузащиту и нападающих сильнее, чем защиту, или опустите линию.
Обыгрываете одного и проигрываете всем. Решение: проверяйте против нескольких соперников и нескольких сидов, прежде чем считать что-то удачным.
Всегда на силу = остаётесь без выносливости и бьёте хуже в концовке. Решение: дозируйте kick_power.
Движок вас защищает, но игрок со сбоем застывает на месте, и вы теряете тики. Решение: тестируйте локально и проверяйте просмотрщик.
Честная деталь о нынешнем движке: компактные оборонительные тактики эффективнее высокого прессинга. Причина в том, что пока прессинг не «отбирает» мяч эффективно —владение «липкое», и чтобы его отнять, нужно подойти с большим запасом—. Поэтому стили вроде catenaccio обычно идут очень хорошо, а gegenpressing страдает.
Тактики из примеров — это отправные точки, а не оптимальные решения. Движок будет развиваться (дорожная карта предусматривает, что прессинг начнёт отбирать мяч), так что и «мета» изменится. Найти выигрышную комбинацию сейчас — ваше конкурентное преимущество.
Пройдитесь по этому быстрому списку. Если отметили всё — можно загружать команду и мериться силами с остальными.
Создайте аккаунт и соревнуйтесь онлайн за минуты — или клонируйте и работайте локально. В базовом режиме работает без API и настройки.