Вы можете скачать подробные правила в формате PDF. В них изложен формат проведения турнира, дано описание игрового мира и технических характеристик объектов.
Кроме того правила доступны в официальном репозитории
Также, чтобы проверить аспекты игровой механики, вы можете попробовать поиграть.
Подскажите, как узнать размер тайтла или размер игрового поля?
Размер тайла - 1 юнит в игровом мира (я так понимаю это один пиксель в рендерере). Соответственно размер поля это:
width = game.level.tiles.size()
height = game.level.tiles[0].size()
Размер тайла - 1 юнит в игровом мира (я так понимаю это один пиксель в рендерере). Соответственно размер поля это: width = game.level.tiles.size() height = game.level.tiles[0].size()
Да вроде нет, если посмотреть на карту из локалраннера, там каждый тайтл это какой нибудь блок. width = game.level.tiles.size() Вот это выводит размер в 40 тайлов.
Да вроде нет, если посмотреть на карту из локалраннера, там каждый тайтл это какой нибудь блок. width = game.level.tiles.size() Вот это выводит размер в 40 тайлов.
И правда, в пикселях 1 тайл сюда по всему занимает больше места, но в игровом мире один тайл занимает один юнит. Т.е. тайл в позиции x=2, y=2 (или game.level.tiles[2][2]) занимает все место в мире в квадрате x=2,y=2-x=3,y=3.
Остальные объекты могут находиться на дробных координатах. Насколько я понимаю размер тайлов в пикселях не важен, т.к. в нем не ведется никаких расчетов.
И правда, в пикселях 1 тайл сюда по всему занимает больше места, но в игровом мире один тайл занимает один юнит. Т.е. тайл в позиции x=2, y=2 (или game.level.tiles[2][2]) занимает все место в мире в квадрате x=2,y=2-x=3,y=3. Остальные объекты могут находиться на дробных координатах. Насколько я понимаю размер тайлов в пикселях не важен, т.к. в нем не ведется никаких расчетов.
Теперь разобрался
Миасс
А классы в папке model можно будет изменять/отправлять на сервер вместе с решением, или это запрещено?
А классы в папке model можно будет изменять/отправлять на сервер вместе с решением, или это запрещено?
можно менять
Севастополь
Товарищи! Кто разобрался с прицеливанием? Что такое aim? В доке - очень скупо:
aim : V ec2⟨f loat64⟩ — направление прицеливания. Игнорируется если длина меньше 0.5 и все. Это явно не угол, а что? Что значит длина меньше 0,5 если Vec2 - это пара чисел. Что это? точка заданная абсолютными координатами.? Или точка заданная относительным смещением от моего юнита? Если так то откуда отсчет, пуля вылетает из центра юнта, а позиция юнита(position) задается серединой его основания.
Fesco
Почему у противника всегда состояние прыжка даже когда он стоит на месте ? в то время как для своего юнита это не так ? JumpState.Speed = 10
Почему у противника всегда состояние прыжка даже когда он стоит на месте ? в то время как для своего юнита это не так ? JumpState.Speed = 10
состояние прыжка у противника наступает в тот момент как он подбирает оружие.
состояние прыжка у противника наступает в тот момент как он подбирает оружие.
уточняю: конкретно когда противник начинает игру слева и подбирает ракетницу , то от сервера всегда приходит информация о том, что противник сейчас в прыжке хотя он не прыгает
И правда, в пикселях 1 тайл сюда по всему занимает больше места, но в игровом мире один тайл занимает один юнит. Т.е. тайл в позиции x=2, y=2 (или game.level.tiles[2][2]) занимает все место в мире в квадрате x=2,y=2-x=3,y=3. Остальные объекты могут находиться на дробных координатах. Насколько я понимаю размер тайлов в пикселях не важен, т.к. в нем не ведется никаких расчетов.
Судя по визуализатору. Размер юнита примерно 1.5-2 тайла в высоту
Судя по визуализатору. Размер юнита примерно 1.5-2 тайла в высоту
"unit_size": {
"x": 0.9,
"y": 1.8
}
Но нигде не написано какого размера тайл
Судя по коду быстрого старта, размер тайла 1.0 на 1.0 единиц.
Судя по коду быстрого старта, размер тайла 1.0 на 1.0 единиц.
А как вы из кода это поняли?
Fesco
LootBox . size не полный размер, а половинный размер (видно если отобразить квадраты) . исправьте правила или локалранер плз
А как вы из кода это поняли?
В коде Python-пакета есть такой кусок кода:
game.level.tiles[int(unit.position.x)][int(unit.position.y)]
Функция int() всегда округляет значение до целого в меньшую сторону. Отсюда получается, что координата unit.position.x
, удовлетворяющая условию 0.0 < unit.position.x < 1.0
относится к нулевому тайлу (учитывая, что unit.position.x
- это середина нижней стороны прямоугольника юнита).
Товарищи! Кто разобрался с прицеливанием? Что такое aim? В доке - очень скупо:
Это вектор. Его направление определяет направление прицеливания. Если длина этого вектора меньше 0.5 то он игнорируется и прицел не изменяется.
В коде Python-пакета есть такой кусок кода: game.level.tiles[int(unit.position.x)][int(unit.position.y)] Функция int() всегда округляет значение до целого в меньшую сторону. Отсюда получается, что координата unit.position.x , удовлетворяющая условию 0.0 < unit.position.x < 1.0 относится к нулевому тайлу (учитывая, что …
Пока буду основываться на ваши слова)
BB
Будут какие то ограничения на размер карты? типа не больше 1000 на 1000 тайлов
Будут какие то ограничения на размер карты? типа не больше 1000 на 1000 тайлов
насчет размеров не уверен, но кмк будут карты со сложным несимметричным лабиринтом и сложнодоступными местами
Санкт-Петербург
в документации явно не сказано: есть ли у пуль коллизия с другими пулями / взрывом / лутом? т.е. может ли пуля быть уничтожена другой пулей или взрывом?
насчет размеров не уверен, но кмк будут карты со сложным несимметричным лабиринтом и сложнодоступными местами
Я попробовал сделать карту больше чем в примере. И она создалась, но отображается только то что влезло)
Калининград
Здравствуйте. А вы не могли бы указать в документации единицы измерения для всех параметром? Например то что компоненты цвета задаются от 0 до 1, разброс измеряется в градусах или радианах, размеры и скорость - в тайлах, время - в секундах или миллисекундах и так далее.
можно менять
Я так понимаю можно менять и раннер… да в целом как бы и не обязательно что бы стратегия содержала метод GetAction
. Т.е. как бы в общем случае главное что бы стратегия отправила по TCP ActionMessage, так?
Калининград
Как определить на записи игры где свой?
У меня такое ощущение, что тот кто создал игру - стартует слева. А когда система создает остается только угадывать по результатам.
Fesco
Как определить на записи игры где свой?
можно костыль сделать: нарисовать по верх своего rect, а в текстовом виде выводить свои очки
можно костыль сделать: нарисовать по верх своего rect, а в текстовом виде выводить свои очки
туплю, вопрос был про запись, а не про отладку (
можно менять
Так они потом заменятся на стандартные файлы? Иначе говоря, если я переделаю CMakeLists.txt под свои нужды, то при отправке он заменится на нужный системе сборки?
постоянно пишет “отказ тестирования”. это норм?
Получилось решить проблему с отказом тестирования? А то сам столкнулся, пытаюсь архив с питоновскими файлами закинуть, пишет отказ тестирования, упихиваю все в один файл, все ок
Получилось решить проблему с отказом тестирования? А то сам столкнулся, пытаюсь архив с питоновскими файлами закинуть, пишет отказ тестирования, упихиваю все в один файл, все ок
структура твоего архива совпадает с структорой языкового пакета?
структура твоего архива совпадает с структорой языкового пакета?
У меня примерно такая структура
Совпадает все, кроме созданной мной папки mylibs и файлов находящихся в ней. Локально это все работает)
У меня примерно такая структура python_folder model mylibs myfile1.py myfile2.py my_strategy.py debug.py main.py stream_wrapper.py Совпадает все, кроме созданной мной папки mylibs и файлов находящихся в ней. Локально это все работает)
Если у тебя в корне архива папка, а в ней все остальное - это может быть проблемой
Если у тебя в корне архива папка, а в ней все остальное - это может быть проблемой
Чудеса творятся, крч попробовал отправить:
хз, че я до этого не так делал. Может быть какие-то файлы не выделял. Может быть PyCharm насрал какими-то файлами, которые я не увидел
Итог: разбрасывать файлы по папкам - можно)
Берлин
Я так понимаю, лестница не блокирует пули, а вот платформа блокирует? можно добавить, что блокирует пули, а что нет в документацию.
Я так понимаю, лестница не блокирует пули, а вот платформа блокирует? можно добавить, что блокирует пули, а что нет в документацию.
Платформа не блокирует пули
Пермь
Чуваки, используйте галочку “изменчивость рейтинга” при аплоаде предельно осторожно. Возможны неожиданные провалы в рейтинге.
Пермь
Подскажите, пожалуйста, можно ли рассчитывать на то, что для исполнения стратегии будет выделено больше одного вычислительного ядра машины? Иными словами, есть ли смысл делать многопоточный код?
Есть ли гарантия, что на каждой итерации будет вызываться getAction от того же экземпляра MyStrategy? Я хочу понять могу ли я сохранять данные между итерациями, хотел для этого расширить данный класс.
Есть ли гарантия, что на каждой итерации будет вызываться getAction от того же экземпляра MyStrategy? Я хочу понять могу ли я сохранять данные между итерациями, хотел для этого расширить данный класс.
В исходном коде языкового пакета так и есть - MyStrategy создается один раз
Подскажите, пожалуйста, можно ли рассчитывать на то, что для исполнения стратегии будет выделено больше одного вычислительного ядра машины? Иными словами, есть ли смысл делать многопоточный код?
При запуске вы ограничиваетесь использованием лишь 1 ядра
Москва
Читаю правила. Есть пробелы. 1) отменяет ли лестница состояние прыжка без “jump_down”? 2) включать прыжок можно только стоя на стене?
Москва
А также что значит “Если падение заблокировано чем либо, юнит меняет состояние на состояние прыжка.” – что юнит резиновый, и после падения снова взлетает? Или это только если он не прекращал слать прыжок все это время, пока падал?
Москва
“Последний угол” – “Во время первого тика после подбора оружия, это значение отсутствует.” А во время второго тика? Если я никуда не прицеливался.
Москва
По API: 1) почему размер лутбокса есть и у самого лутбокса, и в свойствах мира? они оверрайдятся? 2) как считаются очки за дамаг?
Новосибирск
Господа, видимо туплю, а может не по глазам. Где-то написан какой собственный playerId?
Москва
а есть ли способ узнать что поменялось в правилах, кроме как сравнить предыдущую и текущую редакции ?
IT Territory
а есть ли способ узнать что поменялось в правилах, кроме как сравнить предыдущую и текущую редакции ?
В git по коммитам
По API: 1) почему размер лутбокса есть и у самого лутбокса, и в свойствах мира? они оверрайдятся? 2) как считаются очки за дамаг?
Тебе это всё прям мешает написать норм стратегию?
Господа, видимо туплю, а может не по глазам. Где-то написан какой собственный playerId?
Я достаю свой id из unit.player_id в функции get_action. По умолчанию в get_action передаются только твои unit’ы В примере на твоем языке должно быть такое в функции get_action
Пермь
Касательно начисления очков, по моему скромному мнению, нужны следующие изменения: 1) Если оба противника погибли - это ничья. Просто ничья, неважно кто кому сколько успел навалять. За ничью никто не должен получать очков. Сейчас получается, что при обоюдной смерти проигрывает тот, кто лечился. 2) Если оба выжили - это тоже должна быть ничья, и за неё тоже никто не должен получать очки, а не так как сейчас: оба выживших считаются победителями. Это уж совсем странно: оба простояли в углу - и пошли очки делить.
ХНУРЭ (бывш. ХИРЭ, ХТУРЭ)
Касательно начисления очков, по моему скромному мнению, нужны следующие изменения: 1) Если оба противника погибли - это ничья. Просто ничья, неважно кто кому сколько успел навалять. За ничью никто не должен получать очков. Сейчас получается, что при обоюдной смерти проигрывает тот, кто лечился. 2) Если оба выжили - это тоже должна быть ничья, и за неё тоже никто не должен получать очки, а не так как сейчас: оба выживших считаются победителями. Это уж совсем странно: оба простояли в углу - и пошли очки делить.
кто чаще попадал тот получит больше очков. как по мне - все справедливо
Пермь
кто чаще попадал тот получит больше очков. как по мне - все справедливо
нееет! Для этого же бонус за убийство противника и поменяли с 100 на 1000. Но в случае обоюдного убийства система всё равно не работает. Раньше как было: тебе в процессе боя соперник нанес урона на 300, а ты подлечился на 250, но не умер. Потом ты его убил (снял 100 HP + бонус 100). И кто выиграл? Внезапно он! Это сейчас пофикшено, но не для случая, когда оба убили друг друга, так как бонус получают оба, и опять вылезает кривая система “нанес большше урона = победил”.
Тюмень
на вкладке играть можно активировать полноэкранный режим кнопкой F, работает
Индия
Hey I am new here. How are we going to come up with a strategy? Are we going to use our own brain (like we do in competitive programming) or are we going to use machine learning and train our model for best strategy?
Калининград
Hey I am new here. How are we going to come up with a strategy? Are we going to use our own brain (like we do in competitive programming) or are we going to use machine learning and train our model for best strategy?
Whatever suits you best I suppose.
БГУИР
нееет! Для этого же бонус за убийство противника и поменяли с 100 на 1000. Но в случае обоюдного убийства система всё равно не работает. Раньше как было: тебе в процессе боя соперник нанес урона на 300, а ты подлечился на 250, но не умер. Потом ты его убил (снял 100 HP + бонус 100). И кто выиграл? Внезапно он! Это сейчас пофикшено, но не для случая, когда оба убили друг друга, так как бонус получают оба, и опять вылезает кривая система “нанес большше урона = победил”.
Почему картина кривая то? нанес большше урона = победил - всё справедливо ведь. По сути тоже самое, если время вышло, а никто никого не убил - в этом случае тоже победит тот, кто больше урона нанёс.
Харьковский НУ им. Каразина
Кто-то может пожалуйста помочь мне найти константы игра. Где вообще искать урон от попадания базуки или пистолета? скорост снарядов? мне не нравится идея выводить все при запуске стратегии. Можно это найти где-то до запуска своей стратегии?
Москва
кто чаще попадал тот получит больше очков. как по мне - все справедливо
Не согласен. Мы же пишем ИИ, т.е. должны сделать как можно более смышленого игрока в эту стрелянку. Хороший игрок в arena shooters отличается от того, что хуже (и может выиграть против aimbot-а), как раз тем, что получит больше дамага за матч, но выигрывает, потому что лучше собирает предметы на карте, минимизируя количество своих смертей. Сам же дамаг – это лишь дополнительная метрика для того, чтоб матчи в симуляции на этом сайте не шли бесконечно, если боты не стреляют. Т.е. если оба выжили, победу я бы присудил тому, кто больше надамажил, а если оба умерли, то тому, кто больше получил урона, тобишь наоборот, но лучше вообще никому.
Пермь
Почему картина кривая то? нанес большше урона = победил - всё справедливо ведь. По сути тоже самое, если время вышло, а никто никого не убил - в этом случае тоже победит тот, кто больше урона нанёс.
Я считаю, что “нанес больше урона - победил”, но даже не это важно. Важно, что сейчас сломана целевая функция: если тебе удалось выжить и убить соперника - аптечки это хорошо. Если произошла ничья - аптечки, внезапно, в той же игре, оказывается привели тебя к поражению.
Пермь
Я считаю, что “нанес больше урона - победил”, но даже не это важно. Важно, что сейчас сломана целевая функция: если тебе удалось выжить и убить соперника - аптечки это хорошо. Если произошла ничья - аптечки, внезапно, в той же игре, оказывается привели тебя к поражению.
поправка: Я НЕ считаю, что “нанес больше урона - победил… (почему посты редактировать нельзя?)
Нижнекамск
Возможно туплю, но как получить координаты оружия конкретного вида на python.
ХНУРЭ (бывш. ХИРЭ, ХТУРЭ)
Возможно туплю, но как получить координаты оружия конкретного вида на python.
как вариант сделать как в стартере просто еще проверять тип оружия
Rubius
Многие справедливо заметили, что ситуация с несправедливым преимуществом для любителей пострелять из ракетницы в упор, вызывает большие вопросы. Разве не будет логично отнимать количество очков, равное урону, который игрок нанёс своим же юнитам? Хотя бы в тех случаях, когда урон нанесён и своему юниту, и юниту противника.
Финам
система перестала создавать игры со мной. Или увеличился период больше 3,5 часов теперь?
Rubius
система перестала создавать игры со мной. Или увеличился период больше 3,5 часов теперь?
Если это поможет выяснить причину, то игры со мной тоже перестали создаваться.
Калининград
система перестала создавать игры со мной. Или увеличился период больше 3,5 часов теперь?
Похоже останавливали рейтинговые игры всем. Может теперь оно пошустрее будет?
Korea Science Academy
Please change rule to make self inficted damage from rocket launcher count to enemy damage. There are too many ai that come near and suicide with you.
BarcelonaTech
Is machine learning allowed? Are there any libraries we can’t use?
Москва
Условия взаимодействия с платформой такие же как и для лестницы? Чем они тогда по механике отличаются?
BB
На какой высоте происходит пересечение с трамплином? или он чисто всю клетку занимает? и любое касание этой клетки это прыжок?
hands.ru
Не нажимается галка “увеличивать изменчивость стратегии”, хотя должна. За эти сутки я ее еще не нажимал, посылка не тестовая
ХНУРЭ (бывш. ХИРЭ, ХТУРЭ)
Не нажимается галка “увеличивать изменчивость стратегии”, хотя должна. За эти сутки я ее еще не нажимал, посылка не тестовая
может 24 часа не прошло еще?
ХНУРЭ (бывш. ХИРЭ, ХТУРЭ)
А когда ширина юнита изменилась до 0.9?…
когда правила писали
Подскажите, как узнать размер тайтла или размер игрового поля?
тайл размером в 1
Fesco
кто знает как не меняя Runner получить random seed ? и я так понимаю его можно менять смело если что ?
ХНУРЭ (бывш. ХИРЭ, ХТУРЭ)
кто знает как не меняя Runner получить random seed ? и я так понимаю его можно менять смело если что ?
задать можно в config.json а узнать пока никак. issue на эту тему создан, возможно сделают
Лицей №1
подскажите пожалуйста, как узнать тип текущего оружия у нас в руках В документации написано, что class Weapon содержит поле type, но при вызове print(unit.weapon.type) мы получаем ошибку: AttributeError: ‘Weapon’ object has no attribute ‘type’
Intellias
подскажите пожалуйста, как узнать тип текущего оружия у нас в руках В документации написано, что class Weapon содержит поле type, но при вызове print(unit.weapon.type) мы получаем ошибку: AttributeError: ‘Weapon’ object has no attribute ‘type’
А ты проверяешь, есть ли какое-нибудь оружие вообще?
подскажите пожалуйста, как узнать тип текущего оружия у нас в руках В документации написано, что class Weapon содержит поле type, но при вызове print(unit.weapon.type) мы получаем ошибку: AttributeError: ‘Weapon’ object has no attribute ‘type’
Ну правильно, потому что там “typ”, а не “type”.
Fesco
Я правильно понимаю что установленные мины видны для игрока только когда он “смотрит” на установленную мину ? т.е мину за спиной или через стену я не вижу ? но при этом мина при срабатывании дамажит через стену
задать можно в config.json а узнать пока никак. issue на эту тему создан, возможно сделают
объясните пожалуйста где должен лежать config.json? А то у меня никакой реакции на него.
ХНУРЭ (бывш. ХИРЭ, ХТУРЭ)
объясните пожалуйста где должен лежать config.json? А то у меня никакой реакции на него.
у меня лежит в папке с приложением. но если задавать полный путь может лежать где угодно
Москва
объясните пожалуйста где должен лежать config.json? А то у меня никакой реакции на него.
А в ключик –config случаем не забыли указать путь к config.json ?
А в ключик –config случаем не забыли указать путь к config.json ?
Ох, я даже ключ не использовал. Думал само подхватит. Спасибо, что подсказали.
насчет размеров не уверен, но кмк будут карты со сложным несимметричным лабиринтом и сложнодоступными местами
А всё же, каков максимальный размер уровня? Важно же, влияет даже на алгоритмы, которые собираешься использовать.
Я правильно понимаю что установленные мины видны для игрока только когда он “смотрит” на установленную мину ? т.е мину за спиной или через стену я не вижу ? но при этом мина при срабатывании дамажит через стену
Ракетница дамажит через стену
Ракетница дамажит через стену
эх подтвердил бы кто мою догадку, что установленные мины попадают в массив только когда угол зрения юнита направлен в их сторону, а значит нужно знать какой он этот угол зрения (в правилах нислова) и если моя теория не верна, то я нашел баг, у меня в этот массив не всегда попадают установленные мины и исчезают когда юнит отвернут в другую сторону и я могу начать выяснять более тщательно из за чего это происходит.
эх подтвердил бы кто мою догадку, что установленные мины попадают в массив только когда угол зрения юнита направлен в их сторону, а значит нужно знать какой он этот угол зрения (в правилах нислова) и если моя теория не верна, то я нашел баг, у меня в этот массив не всегда попадают установленные мины и исчезают когда юнит отвернут в другую сторону и я могу начать выяснять более тщательно из за чего это происходит.
более того мне для обхода этого бага пришлось создать класс где сохранять однажды увиденные мины и отслеживать их состояние
более того мне для обхода этого бага пришлось создать класс где сохранять однажды увиденные мины и отслеживать их состояние
Работать закончу и вечером проверю
Нижний Новгород
Какие тесты идут на верификации, можни ли их пускать локально? Я получаю “TIME LIMIT EXCEEDED”. Проходящая и непроходящая стратегии отличаются только комбинациией jump/jumpDown значений. У себя такого не могу поспроизвести (Windows, VS, плюсовый пакет).
Какие тесты идут на верификации, можни ли их пускать локально? Я получаю “TIME LIMIT EXCEEDED”. Проходящая и непроходящая стратегии отличаются только комбинациией jump/jumpDown значений. У себя такого не могу поспроизвести (Windows, VS, плюсовый пакет).
TIME LIMIT EXCEEDED — превышено максимальное время работы программы. Если впритык, то может как пройти так и не пройти
Can we work in a team on this?
As I understand - yes, but with only one representative in this challenge It is prohibited upload the same or even pretty much similar strategies by a different people. They will be banned
Берлин
Пожалуйста, унифицируйте правила. Про пулю написано, что у нее скорость в секунду, про юнита, сказано, что просто скорость (в тик или в секунду)? кажется что в секунду, но хотелось бы не дебагом это выяснять. Еще не понятно, для чего нужен параметр скорость прицеливания, и что он означает.
Москва
никто случаем не подскажет, что показывают unit.isStand() и unit.isWalkedRight() ?
Киев
скорости останутся такими, какими они есть сейчас, до конца соревнования? или возможны изменения?
АГУ
Подскажите, есть ли возможность проверить тип оружия, который лежит в лутбоксе?
Подскажите, есть ли возможность проверить тип оружия, который лежит в лутбоксе?
Да, проверяешь что в лутбоксе оружие. Потом берешь поле Item приводишь к типу weapon и проверяешь типа оружия
Да, проверяешь что в лутбоксе оружие. Потом берешь поле Item приводишь к типу weapon и проверяешь типа оружия
Спасибо, помогло, правда поле оказалось пришлось приводить к Item.Weapon, а не к просто Weapon
BB
А какие параметры сервера? а то может я локально то укладываюсь, а у вас там калькуляторы стоят)
Киев
кстати, да. Укажите, пожалуйста разрядность и тактовую частоту процессора сервера (или лимиты контейнера)