На первом туре предлагалось написать 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 игрока. Как время свободное будет, непременно проверю=)
Не знаю, как всем, но по мне, игра — намного удачней любых других заданий, как в прошлые года, для первого дня :)
Да, особенно игры 1на1, хотя с тестированием во время контеста было не очень.
В игровом сервере есть возможность запускать больше игроков=) Если я не ошибаюсь, достаточно увеличить MAX_PLAYERS.
Кого-нибудь интересует?
Интересуют следующее: 1) стоило ли когда-то не производить роботов? 2) реализовала ли какая-то команда стрельбу не по центрам врагов? 3) написал ли кто-то увороты?
"SPb SU Теперь банановый! точно написали стрельбу на опережение. Это очень круто при первом захвате фабрики посередине, когда роботы идут потоком с двух сторон.
По-моему, увороты они не успели, но не уверен.
Мы реализовали увороты, но не самым лучшим образом. Мы, если в некоторой окрестности на робота летела пуля, двигали его перпендикулярно вектору скорости пули. К сожалению, это заметно замедляло процесс перемещения наших роботов рядом с врагами, так что в итоге мы даже выпилили эту фичу из финального решения.
Решение жюри рассчитывало минимального радиуса круг с центром в противнике, так чтобы гарантированно попасть в него. И стреляло рандомно в этот круг. Мне очень не хотелось мазать по противнику. Решение жюри выложено на сервер.
Не производить роботов не стоит. Функция Strategy была введена для того, чтобы игрок выбирал, какого вида робота строить. Наверное, вы поняли, что предполагались роботы с самонаводящимися ракетами. Потом стало понятно, что это вызовет сложности с балансом, да и вообще времени уже нет. В результате функция Strategy осталась бессмысленной.
Кому не лень — киньте свое решение, пожалуйста. http://ideone.com/MlEMfy http://ideone.com/RKVNnG
Наше решение кидать не буду, ибо у меня его сейчас нет и оно полностью (почти) основано на рандоме.
Как я понял, ф-ия Pass у робота сделана, чтобы два дружественных робота не сталкивались и не толпились. У нас, когда робот достигал своей цели и больше никуда идти не собирался, он начинал "дрожать" (рандомно перемещаться в некотором направлении каждый такт, функциональность, подсмотренная у жюри). Так же он делал, когда видел, что после последнего такта его позиция не изменилась. Работало достаточно неплохо.
Я залил на сервер окончательные решения всех команд.
Надеюсь, никто не против=)
Правильно ли я понимаю, что написание кода для роботов было сделано именно так, как было сделано, чтобы не давать различным экземплярам роботов "общаться" между собой (для этого их код запускался в разных экземплярах скрипта)?
Да.
Исходная идея была в том, чтобы робот был абсолютно автономным после выхода с фабрики. Дальше возникли вопросы по поводу реализации.
Процессы OS сильно тяжёлые: орды роботов не сделать, а "десять тараканов бегают по полю" звучало как-то скучно.
Вызывать функцию Think много раз в C++/Java/Pas решении — это сильно небезопасно. Можно погрозить участникам кулаком, можно начать запрещать глобальные и статические переменные и пр. Однако в итоге писать будет жутко неудобно, каждый участник будет трястить над тем, как бы чего не нарушить, и в итоге всё равно придётся дисквалифицировать некоторых участников из-за их неосторожности. Я сам один раз участвовал в марафоне на TopCoder с подобными запретами.
Тогда решили взять какой-нибудь скриптовый язык для программы роботов. Писать свой — сильно долго (и он неизбежно будет убогим). Сразу возникла мысль про LUA, недаром же его производители игр любят. LUA и впрямь оказался поразительно легковесным (полное состояние интерпретатора весит порядка 19Kb памяти). И притом, ещё и совершенно безопасным, так что его можно запускать прямо на сервере.
Спасибо организаторам за классную идею по проведению первого дня, было оч интересно! Давно хотелось что-то такое поделать. А тут буквально показали образец и заставили начать) К тому же, опять подтвердился факт, что никогда не знаешь, что выстрелит в игре. Долго вдвоем сидели над стретегией, пока не появилась одна единственная строка
от UFTGs . На многие проблемы удалось забить + она увеличила шанс уклонения от плохой стрельбы (без упрежедения) и частично решила серьзную проблему, как выпускать новых юнитов с базы. Второй день тоже понравился) Но там все традиционно, как, собственно, и полагается.
PS заодно узнал способ тырить файлы с сайта
PPS andrewzta правда существует, теперь я точно уверен) А то лекции-то смотрел, но уверенности не было)