Как стать автором
Обновить

Russian AI Cup 2017 — отчет о бета-тесте, старт чемпионата. Хотели StarCraft, получили странный Total War

Время на прочтение 7 мин
Количество просмотров 15K
Всего голосов 44: ↑42 и ↓2 +40
Комментарии 91

Комментарии 91

Ожидается ли поддержка языкового пакета Go?
На очереди: Swift, Go, Rust, Nim.

Пропустил
Я уже неделю как написал и выложил на гитхаб клиент на основе клиента предыдущего года, сообщество желающих писать на го одобрило и уже пользуется, судя по активности на репозитории, каждый день интересуюсь у администрации о состоянии, но с той стороны «ни ответа ни привета».
Когда мы планировали будущие бои, мы представляли себе что-то вроде серии игр Total War, StarCraft, C&C и иже с ними — умную тактическую битву стройных рядов техники, отход-наступление и прочие красоты подобных игр.

Если бы в Total War, StarCraft, C&C и иже с ними юниты упирались в другие и никуда после этого не ехали, то там никаких красот тоже не было бы.

Это так. Не учли. Но исправили, на сколько смогли :)
Сейчас битвы вполне себе интересные

Теперь я знаю, про кого на баше цитата про ядерный удар :)

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

Спасибо напр добром слове :)
Для самообучения у нас, к сожалению, довольно скудный инструментарий. В следующей серии http://aicups.ru/ хотим это исправить — давно просится задачка специально под сетки

Тут бы хоть какой-то успеть написать! В языковом пакте 1-2 (м.б. больше) бага, про которые сообщали, но исправлять их не торопятся. Мануал — полный ребус, а на вопросы официальный сайт не отвечает. В прошлой теме сказали, что очень заняты. И я занят, и все время на разгадывание невнятных мануалов тратить не могу — у меня еще другие работы. Пока вижу, что элементарные действия выполнить очень не просто. Какое уж тут самообучение :(

А что именно вы имеете в виду? Дайте ссылочку или протицируйте, если вам не сложно — разберемся

1) См.:
«У вас косяк в пакете под паскаль в FacilityControl.pas Ругается на эту строчку constructor TFacility.Create(const facility: TFacility); overload; Я в принципе локально у себя поправил. Ранер успешно запускается и конектится к эмулятору, но не уверен будет ли работать оно у вас»

У меня та же штука в D-7. Стер Overload -работает. Но это не по правилам — править можно только свою стратегию.


2) См.:
“Теперь напишем более сложный код”. Этот 2й пример только на Яве :( ИМХО в руководстве он должен быть переведен на все поддерживаемые языковые пакеты, иначе они будут в неравных условиях


3) См.:
Как вообще на Паскале выделить 10 юнитов, нпр., танков и послать их в точку с заданными координатами? Пробовал по разному — не работает. Может баг? А можно 10 танков послать в 10 разных точек за 1 тик? Мануалу явно не хватает примеров таких элементарных действий. Описание API слишком формальное, много второстепенных методов и добраться до основных за ограниченное время представляется проблематичным.
PS Also Local runner:

4) См.:

Прикольно было бы легенду выводить со значками/цветами. Хотя наверное и к этому можно привыкнуть.


5) См.:
ОБЯЗАТЕЛЬНО! Нужна легенда: цвет танка, вертолета и т.д. игрока и противника и у каждого число — сколько осталось.


6) См.:
А цифры потерь можно сделать более крупным шрифтом? Трудно следить за боем когда на цифру елочка накладывается. Было бы лучше сделать отдельно информационное окошко и легенду там дать — какого цвета какие юниты и сколько их осталось.
456) Все виды техники имеют своё схематичное изображение. Понять тип техники относительно несложно. Разумеется, у каждого участника есть свой большой список хотелок, что и как должно быть изображено, но мы не можем включить всё это в официальный рендерер. Именно поэтому вместе с утилитой Local runner распространяется также и специальный плагин для отображения любой нужной вам информации поверх имеющейся картинки. Если по какой-то причине вам неудобно им пользоваться, есть также неофициальный рендерер, разработанный в сообществе участников AI Cup.
Все виды техники имеют своё схематичное изображение.
В Local runner виды техники обозначены маленькими кружками разного цвета. Но какой цвет какому виду соответствует — остается только гадать!
есть также неофициальный рендерер, разработанный в сообществе участников AI Cup.
А ссылку можно,pls?
Неофициальный рендерер github.com/kswaldemar/rewind-viewer

В Local runner это всё же не просто кружочки, если приблизить, то видно, что они по-разному нарисованы.
Именно поэтому вместе с утилитой Local runner распространяется также и специальный плагин для отображения любой нужной вам информации поверх имеющейся картинки.
Как зовут этот плагин? Как его подключать? Где про него написано?
Качается вместе с Local runner и находится в папке plugins. Нужно поправить код, чтобы рисовать то, что вам нужно и перекомпилировать его. Также в настройках Local runner'а включить плагины. У всех настроек есть комментарии, найти будет несложно.
Спасибо. Нечто «Качается вместе с Local runner и находится в папке plugins» — А как зовут это нечто?

Нужно поправить код,


Как? — Я не знаю Явы.

перекомпилировать его


Как?
1) Мы не обнаружили проблем с компиляцией пакета на Pascal. При локальном тестировании вы можете использовать любой компилятор, но мы можем гарантировать правильную работу только с версией, указанной в разделе сайта «Языковые пакеты».

2) Код на Java не имеет сложных конструкций и макросов, похож на другие популярные языки и поэтому легко читается всеми программистами. Переписывание «Быстрого старта» на другие языки займёт значительное время и скорее всего просто приведёт к сокращению списка языков, поддерживаемых из коробки.

3) В Песочнице чемпионата есть участники, пишущие стратегию на Pascal. Значит в нём нет какого-либо крупного бага, приводящего к частичной или полной неработоспособности стратегии. В мануале довольно подробно описаны возможные действия стратегии. Достаточно внимательно прочитать его и осмыслить. В любом случае, наше соревнование рассчитано на длительное участие, а сколько времени на него выделять, это уже ваше решение.
Мы не обнаружили проблем с компиляцией пакета на Pascal.
Как интересно! Два пользователя обнаружили, а Вы — нет! Под каким Pascal Вы компилировали?

Код на Java не имеет сложных конструкций и макросов, похож на другие популярные языки и поэтому легко читается всеми программистами.


А я вот Явы совсем не знаю и мне это на Pascal перевести сложно:
for (VehicleUpdate vehicleUpdate : world.getVehicleUpdates()) {
long vehicleId = vehicleUpdate.getId();

И это:
double x = streamVehicles(
Ownership.ALLY, vehicleType
).mapToDouble(Vehicle::getX).average().orElse(Double.NaN);

NaN — это Not-a-Number? А почему это как метод? В Pascal такого метода нет.

stream = stream.filter(vehicle -> vehicle.getPlayerId() == me.getId());
В D-7 есть разные stream, но как тут перевести?
А это как переводить — совсем непонятно:
private enum Ownership {
ANY,

ALLY,

ENEMY
}
}


В мануале довольно подробно описаны возможные действия стратегии.
Где? Укажите страницу, pls!

В любом случае, наше соревнование рассчитано на длительное участие, а сколько времени на него выделять, это уже ваше решение.
Т.е. если не знаю Яву, нужно как минимум времени, чтобы выучить Яву?
Если бы вы внимательно прочитали мой комментарий, то поняли, где можно посмотреть версию компилятора. Если бы вы внимательно читали правила, то сейчас не спрашивали у меня страницу. Для чтения приведённых вами участков кода достаточно иметь базовые навыки программирования, а также знать английский, вот и всё.

Обычно, когда человек заявляет, что он не понял ничего, значит он и не хотел разбираться. В таком случае я ничем не могу помочь.
Если бы вы внимательно прочитали мой комментарий, то поняли, где можно посмотреть версию компилятора.

Wow! Ребусы продолжаются!
Вы написали:
При локальном тестировании вы можете использовать любой компилятор, но мы можем гарантировать правильную работу только с версией, указанной в разделе сайта «Языковые пакеты».


Смотрим, что написано в разделе сайта «Языковые пакеты»:
Pascal Free Pascal 3.0+ [Delphi mode]


А Delphi mode какой версии?

Если бы вы внимательно читали правила, то сейчас не спрашивали у меня страницу.
Ну тупой я! Ну подскажите!

Для чтения приведённых вами участков кода достаточно иметь базовые навыки программирования, а также знать английский, вот и всё.
Что все?

ANY,
ALLY,
ENEMY


Переводчик гугл переводит:

ЛЮБЫЕ,
ЭЛЛИ,
ВРАГ


И как такое знание английского поможет перевести на Pascal? ;)
BTW А что значит ALLY? Гугл предлагает: союзник, помощник, пособник, но и
мраморный шарик.

И еще мне интересно: это конкурс на создание ИИ-стратегии или на знание языков (английского, явы)?

Вот ссылка на правила. Все действия стратегии описаны в пункте 2.6 Управление (страницы 12-13). Но в любом случае нужно минимум всю вторую главу прочитать для понимания правил игры.

1) Так какая версия Дельфи подходит? Я так и не получил ответа!

2)
Все действия стратегии описаны в пункте 2.6 Управление (страницы 12-13).

Читаю:
CLEAR_AND_SELECT. Стандартное выделение дружественных юнитов рамкой
Для такого выделения надо знать координаты каждого унита. Как мне их узнавать? А иное выделение возможно? (по номеру юнита)

3) что у Вас значит «ALLY»?
Компилятор «старается» быть максимально похожим на Delphi 7. Конечно, 100%-я совместимость не гарантируется.
Попробуйте compile-dpr.bat и получите фатальную ошибку в Delphi 7.

К сожалению или к счастью, но сейчас нет популярных языков программирования с русским синтаксисом, за исключением, наверное, 1С. Так что знание технического английского является обязательным требованием для любого программиста. А то, что Гугл странно переводит, давно известный факт.

У меня нет проблем с английским (и не только с техническим), но есть проблемы с некоторыми именами в API данной игры. В частности, что значит «ALLY»?
ANY, ALLY, ENEMY — любой, союзник, враг. Принадлежность юнита.

Это перечисление не является частью API игры и присутствует только в примере. В вашей стратегии его может не быть.
ANY, ALLY, ENEMY — любой, союзник, враг. Принадлежность юнита.
Спасибо. А кто союзник в данной игре? Или союзник=свой?
Если нет проблем с английским, то я не понимаю как можно не понять, что значит ALLY, тем более когда речь про войнушку и есть всего 3 значения — Любой, Враг и Ally.
Появились сомнения: ALLY это свой? Значений могло быть и больше: Любой, Свой, Чужой, Неизвестный, Пленник, Ранен и т.д.Некоторые из таких значений могли быть просто не перечислены. Свой = не Враг и т.д. В некоторых играх и не такое бывает.
А Delphi mode какой версии?

Не понял вопроса. Стратегия компилируется примерно вот так (вырезано из compile-fpc.bat, входящего в состав pascal-cgdk):


fpc.exe -Cs67107839 -Mdelphi -XS -vm3018 Runner.dpr -oMyStrategy.exe

Free Pascal указанной версии с ключиком Delphi.

вырезано из compile-fpc.bat, входящего в состав pascal-cgdk

А еще там есть compile-dpr.bat, в котором:

if "%DELPHI7_HOME%" == "" (
dcc32 -Q -cc Runner.dpr 1>compilation.log
) else (
"%DELPHI7_HOME%\Bin\dcc32" -Q "-U%DELPHI7_HOME%\Bin" "-I%DELPHI7_HOME%\Bin" -cc Runner.dpr 1>compilation.log
)

О! За вопросы по игре минусы дают! Если это делают организаторы, значит слишком много участников. А если делают участники, то это попытка убрать конкурентов? :)

Не спортивно!
НЛО прилетело и опубликовало эту надпись здесь
Для каждого элемента коллекции
Большое спасибо за Ваше желание помочь! Я слышал, что в Яве есть коллекции, но в Дельфи-7 их в таком виде нет.И как переводить?

Мне писали, что за пару часов возможно перевести. Предположим, что всего участников будет 1000, а из них на Яве 200, т.о. 800 будут переводить и каждый потратит 2 часа, получим 1600 часов. А если организаторы переведут на 9 языков, то потратят всего 18 часов.

5) Действие стратегии
Тут совсем непонятно.

private enum Ownership {
ANY,


ANY — это вызов функции? В Яве запятая м.б. разделителем меду операторами?

А enum что значит?
НЛО прилетело и опубликовало эту надпись здесь
enum — это перечисление, специальный класс, здесь класс Ownership, принадлежность. ANY, ALLY, ENEMY — его объекты, не функции.


В-о-о-о-т мы и уперлись в различные трактовки ООП в разных языках.
Согласно википедии:

Класс — абстрактный тип данных в объектно-ориентированном программировании, задающий общее поведение для группы объектов; модель объекта.


Объект — это экземпляр класса. А Вы говорите, что в классе enum уже есть объекты (ANY, ALLY, ENEMY). Это с ходу не понять.

Если другой класс имеет поле класса Ownership, его значением может быть только один из указанных здесь объектов.


Если я правильно понял это скалярный тип Виртовского Паскаля:

type Ownership=(ANY, ALLY, ENEMY);


По поводу коллекций — откройте стартовый пакет в Вашей IDE. Возможно, нужная функция возвращает массив, список, или другую структуру, которая есть в Вашем языке, и которую можно обойти циклом.


Вот видите как все не просто и неоднозначно! Одним из лучших классических мануалов когда-то считался Macintosh Inside. Он был двуязычный Паскаль и Си. Там удалось предусмотреть все несовпадения этих языков. А в нашем случае ребус.
Это по сути просто тип — множество неких значений. Кажется в паскале есть нечто подобное — SET.
На самом деле переводить этот код на свой язык не имеет большого смысла. Я сначала перевёл, потом всё снёс.
Реально полезная функция там — initializeTick. Она каждый тик актуализирует массив vehicleById, в котором хранится полная информация обо всех юнитах. Дальше уже с этим массивом можно работать как хочется.
Реально полезная функция там — initializeTick. Она каждый тик актуализирует массив vehicleById, в котором хранится полная информация обо всех юнитах.
Это одномерный массив-вектор? А какой интервал индекса этого массива? От нуля до? Он не сортирован? Все юниты (танки, вертолеты и т.д.) вперемешку? Если юнит гибнет из vehicleById он убирается?
Как реализовать этот массив зависит от языка. В примере это не массив, а HashMap, но можно сделать и обычный динамический массив.
Главное, что у вас есть метод world.getNewVehicles() и world.getVehicleUpdates()
Первый каждый тик даёт информацию о новых юнитах на карте, второй об изменившихся юнитах.
Совместив эти два «массива» можно получить полный список всех юнитов и дальше уже работать с ним — сортировать, фильтровать и тп.

В идеале в апи конечно должен был быть метод world.getVehicles() сразу возвращающий полный список всех юнитов, но так решили не делать, чтобы не грузить каждый тик полный список, чтобы всё работало быстрее.

Разбор примера
for (Vehicle vehicle : world.getNewVehicles()) { // Сначала цикл по всем новым юнитам
            vehicleById.put(vehicle.getId(), vehicle); // добавляем новый юнит (переменная vehicle) в массив
            updateTickByVehicleId.put(vehicle.getId(), world.getTickIndex()); // Это пока лишняя информация
        }

        for (VehicleUpdate vehicleUpdate : world.getVehicleUpdates()) { // Цикл по обновлённым юнитам, то есть юнитам, у которых изменились какие-то свойства.
            long vehicleId = vehicleUpdate.getId(); // getId() - возвращает уникальный ID юнита

            if (vehicleUpdate.getDurability() == 0) { // Если у юнита не осталось здоровья
                vehicleById.remove(vehicleId); // Удаляем его из массива
                updateTickByVehicleId.remove(vehicleId); // Пока лишняя инфа
            } else {
                vehicleById.put(vehicleId, new Vehicle(vehicleById.get(vehicleId), vehicleUpdate)); // Обновляем старый юнит.
                updateTickByVehicleId.put(vehicleId, world.getTickIndex()); // Лишнее
            }
        }



Таким образом мы имеем массив с информацией обо всех юнитах включая координаты, тип и тп.
// Сначала цикл по всем новым юнитам

На Паскале я могу написать цикл:

for i:=a to b do


Как мне определить a, b?
newVehicles := world.GetNewVehicles();
For i := 0 to Length(newVehicles) — 1 do Begin
vehicle := newVehicles[i];
DoMagic();
End;
Спасибо. Понял.
Кажется в паскале есть нечто подобное — SET.


Да:

type Ownership=(ANY, ALLY, ENEMY);
TSet = set of Ownership;

var i : Ownership; aSet : TSet;
begin
 aSet := [ALLY, ENEMY];
 for i:= ANY to ENEMY do
  if i in aSet then
    writeln (ord(i));


Это то самое?

На самом деле переводить этот код на свой язык не имеет большого смысла
Понятно, что практического смысла нет. Но как еще понять принципы организации элементарных действий, если в мануале об этом не сказано?
Была мысль потратить немного совего времени и поучаствовать. Рад, что не стал.
Делаешь ИИ, продумываешь, находишь годные решения… Только для того, чтобы организаторы изменили правила так, чтобы твои решения перестали работать.

Очень жаль! А что Вы имеете в виду?

Я уж слишком резко выразился. Понятно, что бета тест на то и бета тест, чтобы баланс поправить.
Но ведь судя по статье — все сильные решения, которые участники придумали организаторы исключили введя правки, которые сделали эти решения неудачными.
По факту, лучшее поведение участника во время бета теста — это молчать, если придумал выигрышную стратегию. А то её выпилят в релизе.
В итоге ваши участники по сути два раза участвуют в конкурсе. Сначала в его бета версии, потом второй раз в релизной.

P.S>
Пример: Вы говорите что ввели ядерную бомбу, потому что тупое «выделить кучу и послать» — рулило. Но потом сами же показываете варианты, когда правильные тактики(клещи), легко заруливают тупое выделение, без всякиз бомб. Но имбу в виде ядерной бомбы все равно ввели. Зачем?

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

Для человека, который вообще не участвует в конкурсе, вы слишком легко рассуждаете об игровом балансе. Это — имба, а эту тактику убили вот такой правкой.

Применение ядерного удара имеет свои ограничения и уж точно не является имбой. Да, это нововведение ускорит вымирание простых стратегий, но они в любом случае стали бы менее эффективны со временем. АОЕ стало дополнительным элементом геймплея, улучшило игровой баланс. С этим согласна не только команда разработчиков, но и большинство участников.

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

Для этого не нужно быть участником конкурса — вполне достаточно вдумчивого прочтения статьи.

они в любом случае стали бы менее эффективны со временем

Ну если в любом случае стали бы — зачем вообще вмешиваться?

улучшило игровой баланс

Камень-ножницы-бумага имеет идеальный игровой баланс. Но это же не повод регулировать баланс, пока он не станет похож на эту игру?

С этим согласна не только команда разработчиков, но и большинство участников.

В любом конкурсе есть согласные и не согласные. Но согласие не означает правильность. Впрочем, и моё мнение не является чем-то выделяющимся и также не влияет на правильность.

Камень-ножницы бумага имеет идеальный игровой баланс

...-ящерица-Спок!

Камень ножницы бумага ящерица Спок
Идеальный вариант… если нет особенностей местности и т д
В этой игре можно было бы с туманом войны обойтись только одним контактником(бойцом ближнего боя).

Стремление сделать разнообразие техники под «камень ножницы бумага» — плохая идея.

Например в старе балансны были комбинации первых 2х юнитов. Пулеметчики+огнеметчики вс герлинги+гидры вс зелоты+драгуны.
Что общего? радиус стрельбы+у всех мили+рандж.

А тут вы намутили. Ваш подход не плохой, но слишком шаблонный для карточных игр.
Я имел ввиду буквально камень-ножницы-бумагу.
Когда единственное что может сделать ИИ — выбрать случайное значение из трёх и всё.
Все в равных условиях, идеальный баланс. Но бред.
Потому что требуется, чтобы ИИ на что-то влиял. То есть по сути — задача разработчика найти идеальную стратегию и научит ею ИИ. Но, это противоречит концепции баланса! Потому что баланс — это когда идеальной стратегии просто нет!

Участники участвуют не два раза, если уж на то пошло, а каждый день, постоянно улучшая своё «решение». Некоторые успевают за время проведения отправить более 100 версий. А ещё в конкурсе три раунда по сути по разным правилам и очень мало кто пишет сразу стратегию подо все раунды сразу. Сначала задача пройти в 300 лучших в первом раунде. Тем, кто хорошо научился, управлять тупой кучей с этим практически уже справились, не смотря на бомбу. Так что у них в любом случае уже есть почти месяц, чтобы готовиться ко второму раунду.
Да это так, на правах «побухтеть».
Тем, кто хорошо научился, управлять тупой кучей

Я бы сказал: тем, кому удалось догадаться, что имел в виду автор мануала. И да, Вы правы — есть почти месяц, чтобы догадаться.

В любом случае возникает вопрос: управлять тупой кучей — это ИИ?
У меня не возникло проблем с пониманием мануала, особенно после просмотра кода готового бота.

Не ИИ, но Вы можете написать свой ИИ, который всех их уделает :)
Ok. Если у Вас нет проблем, то надеюсь Вас не затруднит написать мне строчку кода на Дельфи-7, которая выделит 10 танков и каждый пошлет по указанным координатам: (х1, у1), ..., (х10, у10). Заранее премного благодарен!
Вы имеете в виду каждый из танков направить по своим координатам?
Это плохая идея в данном случае. Тут надо оперировать группами.
Одной строчкой это сделать не получится конечно и весь код я не напишу…

На первом тике необходимо выбрать нужные юниты.
Если эти юниты расположены в прямоугольнике с углами (x1, y1) и (x2, y2), то
move.Action := ACTION_CLEAR_AND_SELECT;
move.Left := X1;
move.Right := {X2};
move.Top := {Y1};
move.Bottom := {Y2};
move.VehicleType:= VEHICLE_TANK; // Эта строка выбирает только танки и не обязательна
На этом тике мы больше не можем ничего сделать. Только одно действие — в данном случае выделение группы.
На следующем тике (если мы ещё не уперлись) в лимит 12 действий за 60 тиков:
move.Action := ACTION_MOVE;
move.X := DX;
move.Y := DY;
В этом случае вся группа сместится на (DX, DY)
То есть отправить группу по указанным координатам напрямую нельзя. Для это надо сначала рассчитать на сколько мы хотим сдвинуть группу.
Ещё к этому стоит учесть, что если на пути группы например наземных юнитов окажется препятствие в виде других наземных юнитов, то они не пройдут сквозь и не станут обходить. Они просто упрутся и встанут. То есть перед отправкой надо ещё проверить свободна ли дорога.
Вы имеете в виду каждый из танков направить по своим координатам?
Это плохая идея в данном случае.

Почему плохая идея? Со стратегической точки зрения рассосредоточить танки м.б. оправдано, особенно после введения атомного удара.

move.Right := {X2};


Тут скобки случайно? На Паскале {X2} — комментарий.

То есть перед отправкой надо ещё проверить свободна ли дорога.
А как это сделать? По циклу задавать приращение пути на 1 и смотреть нет ли там юнитов? И каждый шаг — это тик?

Если эти юниты расположены в прямоугольнике с углами
А если я не знаю, координат моих танков? Могу я их по номерам или по id вызвать?
Плохая, потому что это оооочень долго. на 10 юнитов понадобится 100 тиков, чтобы отдать им команды. Потом они будут двигаться. Чтобы таким образом сдвинуть все 500 юнитов на 1 пиксель понадобится примерно 1/4 всей игры.
Чтобы рассредоточить юниты можно использовать action SCALE, который масштабирует формацию юнитов. Можно как растягивать так и скукоживать группу.

Скобки не нужны, да.

Чтобы получить все юниты на карте надо смотреть функцию initializeTick из примера.

Задачу, как проверить дорогу на отсутствие препятствий, уже каждый решает сам.
НЛО прилетело и опубликовало эту надпись здесь

Это верно для состоянии бета-версии (и организаторы явно указывали факт возможных изменений). Теперь правила стабильны, самое время начать.

Конкурс проводится на территории Российской Федерации.

А участникам обязательно находиться в России, постоянно проживать или достаточно быть гражданином России?
НЛО прилетело и опубликовало эту надпись здесь

Не обязательно. В случае выигрыша тоже не обязательно

Как жаль что после конкурса вы выключаете возможность сражений. Мне только на первом Ai Cup повезло тем что на момент старта было почти 5 свободных дней. Я бы на новогодних праздниках с удовольствием по сражался. А сейчас нет возможности выделить достаточно времени.

Поддерживаю, сделайте постояный сервер или после контеста выложите код сервера чтобы можно было спокойно поиграться

О да!!! И для старых игр тоже было бы не плохо. Хочу в танчики.
Очень хочется попрактиковаться и сражаться с реальными людьми.
Вот здесь есть неплохие варианты.
www.codingame.com/multiplayer/bot-programming
За первое место макбук не дарят, но регулярно проходят соревнования с неплохими призами. И разнообразия там поболее…
SSCAIT Вам в помощь
Не очень… Уже тогда бы лучше сделали хоккей 2.0.
Планируется ли введение Unix серверов? Тот вариант свифта, который продвигается на форуме, по сути частная урезаная игрушка под виндовс с уже довольно не актуальной версией.
В этом году точно уже нет

Да я тоже слегка был огорчен. Но swift3.1 не сказать что сильно устаревший на текущий момент :)


С Unix тоже не все так просто — запустить не на ubuntu (я пробывал на CentOS) тоже почти нереально.

Еще непонятный вопрос. Во многих играх допустим метод S/L (save/load). Можно ли в данной игре сохранить состояние и вернуться, пусть м.б. и с потерей общего времени?
Лично мои замечания:
1) ЯО это ИМБА! сразу вспомнились Heroes 3 и их Некры(на больших картах чтобы выиграть надо играть либо некрами, либо чтобы у соперник был не некром — иначе шансы очень малы)
Вполне можно было сделать изящную стратегию из ЯО. А так в любом случае придётся учитывать и этот вид действий…
2) то что от раунда к раунду меняются(и довольно кардинально) правила (я про туман войны например) вносит неразбериху — можно написать очень хорошую стратегию(но без учёта тумана) и потом лихо пролететь в финале а можно наоборот(менее вероятно но всё же) бросить все силы на учёт тумана но не дойти до финала на «голой» карте…
3) я конечно понимаю что это соревы, борьба, жёсткий отбор и т.д. но всё же очень бы хотелось больше времени — думаю поучаствовали бы гораздо больше людей а стратегии были поинтересней!!! (Вот например, я узнал про конкурс только вчера вечером и получается у меня всего лишь одни выходные до первого раунда… Стоит ли вообще начинать?;-))
1) Да ну какая имба. Кулдаун высокий, наводчик сносится на раз. Посмотри игры топов, всё с ЯО нормально
2) Ну стратегия пишется же не одна на весь чемпионат. Ребята постоянно дорабатывают с учетом новых фичей
3) Я бы попробовал. Пройти во 2 раунд не так сложно. А это уже футболка )
Ау! Организаторы!

Я так и не получил ответа: dcc32 в compile-dpr.bat у вас на сервере будет работать?
SladeThe Макс, будет?
Эта информация есть на сайте Russian AI Cup, и я уже два раза писал здесь, что мы используем компилятор Free Pascal.
Очень забавная логика!: Дельфи (топ-10 в TIOBE) исключаем, а менее популярные ЯП добавляем.
Ну вряд ли они конечно специально что-то исключали)
Скорее просто не всё добавили…
Например с++14 при том что конкретно на новом стандарте пишут не так чтобы многие(уж точно не большинство). Казалось бы мелочь?.. Но… То что некоторые новые конструкции не совсем очевидны это ещё ладно, но вот у меня например вижла с компилятором не понимающим 14-й стандарт. Поэтому надо либо искать-скачивать-покупать новую вижлу, либо возиться-разбираться с консольно-блокнотными версиями.
Тоже есть неудобства.

Завезите Node.JS, пожалуйста.
А вообще странно, что не сделали просто работу через некое http API.

Вот это как раз совсем не странно.
Как тогда контролировать что все в одинкаковых условиях работают?
Ну и обязательно найдутся нехорошие люди, которые все испортят… из принципа нагадят.
Почему же, сделали бы через докер, как в хайлауд кап. У всех равные условия и пиши на чём хочешь.
Это в планах на aicups.ru, да
У меня вопрос по методу getVehicleUpdates в классе World. Вот его документация:
Возвращает значения изменяемых полей для каждой видимой техники, если хотя бы одно поле этой техники изменилось. Нулевая прочность означает, что техника была уничтожена либо ушла из зоны видимости.

Собственно вопрос: а как понять, что ты убил какого-то юнита? Т.е. сейчас если у юнита стало 0 hp, то это подразумевает два исхода (убит, спрятался). Зачем было так усложнять?
Зарегистрируйтесь на Хабре , чтобы оставить комментарий