Блог пользователя stgatilov

Автор stgatilov, 11 лет назад, По-русски

На первом туре предлагалось написать AI для простой стратегии. Есть заводы, они строят роботов. Роботы могут стрелять друг в друга и захватывать заводы. Каждый робот управляется автономным скриптом на LUA и видит только некоторую свою окрестность. При инициализации можно заложить какую-нибудь инфу в робота (например, куда идти), потом робот работает сам по себе.

Все материалы и логи/истории всех игр лежат здесь: http://parallels.nsu.ru:8080/finaltesting/

Сначала напишу, как посмотреть что-либо с первого тура тем, кто в нём не участвовал. Берём комп с виндой, качаем glut-визуализатор и распаковываем в какую-то папку. Потом берём из Logs\ какую-нибудь историю, например вот эту. Качаем её в ту же папку. Запускаем run_history.bat из этой папки. Должно запуститься проигрывание истории игры.

SFX-архив материалов, который выдавался участникам. Пароль: "armvscore" (без кавычек). Условие задачи есть внутри.

Чтобы материалы работали, нужно: 1. Консоль винды (канонически используется Far). 2. Visual С++ 32bit (>=2005) должен быть прописан в путях/переменных окружения (use vcvarsall.bat, Luke!). 3. Переменная JAVA_HOME должна быть установлена в папку с JDK 32bit (если хочется джаву). 4. В путях должен быть fpc.exe (если хочется паскаль).

Архива вполне хватает, чтобы писать решения. Там же исходники игрового сервера и вшитый дистрибутив LUA 5.1.5, скрипты для сборки всего этого.

UPDATE: Выложил на сервер окончательные решения всех команд (здесь). Также положил таблицу суммарных очков по первому туру.. И решение жюри, с которым играли ваши решения в течение тура.

P.S. Если кому-то понравилось, то можно перейти на более серьёзную игру. Утверждается, что в опенсорсной стратегии Zero-K можно писать LUA-скрипты для юнитов вплоть до полноценного AI игрока. Как время свободное будет, непременно проверю=)

  • Проголосовать: нравится
  • +39
  • Проголосовать: не нравится

»
11 лет назад, # |
  Проголосовать: нравится +8 Проголосовать: не нравится

Не знаю, как всем, но по мне, игра — намного удачней любых других заданий, как в прошлые года, для первого дня :)

  • »
    »
    11 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    Да, особенно игры 1на1, хотя с тестированием во время контеста было не очень.

    • »
      »
      »
      11 лет назад, # ^ |
        Проголосовать: нравится +13 Проголосовать: не нравится

      В игровом сервере есть возможность запускать больше игроков=) Если я не ошибаюсь, достаточно увеличить MAX_PLAYERS.

      Кого-нибудь интересует?

»
11 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Интересуют следующее: 1) стоило ли когда-то не производить роботов? 2) реализовала ли какая-то команда стрельбу не по центрам врагов? 3) написал ли кто-то увороты?

  • »
    »
    11 лет назад, # ^ |
      Проголосовать: нравится +5 Проголосовать: не нравится

    "SPb SU Теперь банановый! точно написали стрельбу на опережение. Это очень круто при первом захвате фабрики посередине, когда роботы идут потоком с двух сторон.

    По-моему, увороты они не успели, но не уверен.

  • »
    »
    11 лет назад, # ^ |
      Проголосовать: нравится +5 Проголосовать: не нравится

    Мы реализовали увороты, но не самым лучшим образом. Мы, если в некоторой окрестности на робота летела пуля, двигали его перпендикулярно вектору скорости пули. К сожалению, это заметно замедляло процесс перемещения наших роботов рядом с врагами, так что в итоге мы даже выпилили эту фичу из финального решения.

  • »
    »
    11 лет назад, # ^ |
      Проголосовать: нравится +5 Проголосовать: не нравится

    Решение жюри рассчитывало минимального радиуса круг с центром в противнике, так чтобы гарантированно попасть в него. И стреляло рандомно в этот круг. Мне очень не хотелось мазать по противнику. Решение жюри выложено на сервер.

    Не производить роботов не стоит. Функция Strategy была введена для того, чтобы игрок выбирал, какого вида робота строить. Наверное, вы поняли, что предполагались роботы с самонаводящимися ракетами. Потом стало понятно, что это вызовет сложности с балансом, да и вообще времени уже нет. В результате функция Strategy осталась бессмысленной.

»
11 лет назад, # |
Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

Кому не лень — киньте свое решение, пожалуйста. http://ideone.com/MlEMfy http://ideone.com/RKVNnG

  • »
    »
    11 лет назад, # ^ |
    Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

    Наше решение кидать не буду, ибо у меня его сейчас нет и оно полностью (почти) основано на рандоме.
    Как я понял, ф-ия Pass у робота сделана, чтобы два дружественных робота не сталкивались и не толпились. У нас, когда робот достигал своей цели и больше никуда идти не собирался, он начинал "дрожать" (рандомно перемещаться в некотором направлении каждый такт, функциональность, подсмотренная у жюри). Так же он делал, когда видел, что после последнего такта его позиция не изменилась. Работало достаточно неплохо.

  • »
    »
    11 лет назад, # ^ |
      Проголосовать: нравится +5 Проголосовать: не нравится

    Я залил на сервер окончательные решения всех команд.

    Надеюсь, никто не против=)

»
11 лет назад, # |
  Проголосовать: нравится +13 Проголосовать: не нравится

Правильно ли я понимаю, что написание кода для роботов было сделано именно так, как было сделано, чтобы не давать различным экземплярам роботов "общаться" между собой (для этого их код запускался в разных экземплярах скрипта)?

  • »
    »
    11 лет назад, # ^ |
      Проголосовать: нравится +38 Проголосовать: не нравится

    Да.

    Исходная идея была в том, чтобы робот был абсолютно автономным после выхода с фабрики. Дальше возникли вопросы по поводу реализации.

    Процессы OS сильно тяжёлые: орды роботов не сделать, а "десять тараканов бегают по полю" звучало как-то скучно.

    Вызывать функцию Think много раз в C++/Java/Pas решении — это сильно небезопасно. Можно погрозить участникам кулаком, можно начать запрещать глобальные и статические переменные и пр. Однако в итоге писать будет жутко неудобно, каждый участник будет трястить над тем, как бы чего не нарушить, и в итоге всё равно придётся дисквалифицировать некоторых участников из-за их неосторожности. Я сам один раз участвовал в марафоне на TopCoder с подобными запретами.

    Тогда решили взять какой-нибудь скриптовый язык для программы роботов. Писать свой — сильно долго (и он неизбежно будет убогим). Сразу возникла мысль про LUA, недаром же его производители игр любят. LUA и впрямь оказался поразительно легковесным (полное состояние интерпретатора весит порядка 19Kb памяти). И притом, ещё и совершенно безопасным, так что его можно запускать прямо на сервере.

»
11 лет назад, # |
  Проголосовать: нравится +19 Проголосовать: не нравится

Спасибо организаторам за классную идею по проведению первого дня, было оч интересно! Давно хотелось что-то такое поделать. А тут буквально показали образец и заставили начать) К тому же, опять подтвердился факт, что никогда не знаешь, что выстрелит в игре. Долго вдвоем сидели над стретегией, пока не появилась одна единственная строка

MoveToPoint(pathX+math.cos(t)*a, pathY+math.sin(t)*a)

от UFTGs . На многие проблемы удалось забить + она увеличила шанс уклонения от плохой стрельбы (без упрежедения) и частично решила серьзную проблему, как выпускать новых юнитов с базы. Второй день тоже понравился) Но там все традиционно, как, собственно, и полагается.

PS заодно узнал способ тырить файлы с сайта

PPS andrewzta правда существует, теперь я точно уверен) А то лекции-то смотрел, но уверенности не было)