Открытое соревнование по программированию искусственного интеллекта

Быстрый старт

Проект

Песочница

Раунд 1

Раунд 2

Финал

Песочница (на 15 декабря 2013 г.)

Последние комментарии

4 сентября 19:00: risi написал комментарий в посте Закрытие Russian AI Cup 2013
28 февраля 02:59: puk написал комментарий в посте Закрытие Russian AI Cup 2013
26 февраля 21:12: amurushkin написал комментарий в посте Закрытие Russian AI Cup 2013
26 февраля 13:17: alevlaber написал комментарий в посте Закрытие Russian AI Cup 2013
20 февраля 17:33: Megabyte написал комментарий в посте Закрытие Russian AI Cup 2013
20 февраля 10:10: mopdobopot написал комментарий в посте Закрытие Russian AI Cup 2013
20 февраля 09:28: aleex написал комментарий в посте Закрытие Russian AI Cup 2013
18 февраля 23:13: santa324 написал комментарий в посте Закрытие Russian AI Cup 2013
17 февраля 14:43: m16a написал комментарий в посте Закрытие Russian AI Cup 2013
17 февраля 06:26: PAX написал комментарий в посте Закрытие Russian AI Cup 2013

Группа ВКонтакте

 

Ниже мы расскажем, как присоединиться к CodeTroopers буквально за несколько минут. Кроме того будут освещены некоторые маленькие хитрости и тонкости правил.

Регистрируйтесь

Разумеется, для участия необходимо зарегистрироваться. Мы рекомендуем пользоваться авторизацией через социальные сети (поддерживаются Mail.Ru, Одноклассники, ВКонтакте, Google, Facebook, Twitter, OpenID и Яндекс). Также мы убедительно просим всех участников использовать достоверные и полные данные о себе. Загружайте аватарки — всем интересно знать противников в лицо.

Подтвердите свое участие

Через несколько минут после регистрации на указанный почтовый адрес придет ссылка, перейдите по ней для подтверждения своего участия. Если вы зарегистрировались через соц. сеть, то пароль вашего аккаунта Russian AI Cup не используется. В этом случае, чтобы заходить на сайт с использованием пароля, можно пройти процедуру восстановления пароля.

Скачайте языковой пакет

Скачайте пакет для любимого языка программирования со страницы языковые пакеты. Поддерживаются C++, Java, C#, Pascal, Python2 и Python3. Распакуйте ZIP-архив в удобное для вас место и откройте проект в любимой IDE. Для некоторых IDE мы уже подготовили проекты. Возможно, вам надо будет настроить некоторые пути.

Прочитайте документацию

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

Отошлите свою стратегию

Это можно сделать на странице отослать. Прежде, чем система примет вашу стратегию, она будет скомпилирована и протестирована в нескольких тестовых боях и, если в этих боях произойдет одна из ситуаций, описанных ниже в части “На что стоит обратить внимание”, то вы получите вердикт “Ошибка верификации”, и стратегия не будет принята. После первой принятой посылки вы начинаете участвовать в боях в песочнице. Количество попыток неограничено, но любые попытки дестабилизировать работу приведут к дисквалификации. Вы можете написать свою стратегию в произвольном количестве файлов, вам нужно будет лишь упаковать все необходимое в ZIP-архив и отослать его. Помните, что в стартовом пакете вы можете менять только файл MyStrategy.${ext} (${ext} — расширение используемого вами языка), и даже если вы измените какой-то другой файл и тоже приложите его в архив, то все равно при тестировании он будет заменен на стандартный.

Что может помочь вам

Специально для удобства разработки стратегий мы опубликовали утилиту Repeater. Эта утилита поможет вам локально на вашем компьютере воспроизвести бой, а значит, вы сможете отлаживать код, добавлять логгирование и прочее. Также у вас есть возможность запускать простые тестовые игры локально на своём компьютере. Подробнее об этом здесь.

На что стоит обратить внимание

  • запрещается взаимодействие с сетью, файловой системой и другими ресурсами, кроме оперативной памяти и текущего каталога, нарушители будут дисквалифицированы;
  • процессорное время работы вашей стратегии достаточно сильно ограничено (точные сведения вы можете найти в документации);
  • запускаемая стратегия не должна использовать более 256 мегабайт оперативной памяти (в это количество включается вся память, используемая запускаемым процессом);
  • если ваша стратегия превышает ограничение по времени или памяти, а также в случае ошибок исполнения (например, неожиданное падение), она перестает участвовать в этом бою, при этом как бы “замораживается”, то есть ваши очки не обнуляются;
  • каждая стратегия запускается в отдельном процессе, при этом для каждого бойца создается отдельный экземпляр класса MyStrategy, и поэтому для обмена информацией между бойцами вы можете использовать статические поля или глобальные переменные.

Напишем простую стратегию на C++

Самая простейшая стратегия ничего не делает, лишь пропускает ходы (в этом можно убедиться, отослав этот код в систему):

#include "MyStrategy.h"

#define _USE_MATH_DEFINES
#include <cmath>
#include <cstdlib>

using namespace model;

MyStrategy::MyStrategy() { }

void MyStrategy::move(const Trooper& self, const World& world, const Game& game, Move& move) {
}

Теперь заставим бойца перемещаться в случайном направлении до тех пор, пока у него есть достаточное количество очков действия. Согласно документации, нам необязательно проверять возможность перемещения и мы можем попытаться, например, переместиться в занятую клетку или за пределы карты. Однако в случае нехватки очков действия, данный ход будет считаться некорректным, а стратегия — упавшей. Метод move примет вид:

void MyStrategy::move(const Trooper& self, const World& world, const Game& game, Move& move) {
    if (self.getActionPoints() < game.getStandingMoveCost()) {
        return;
    }

    move.setAction(MOVE);

    if (rand() % 2 == 0) {
        move.setDirection(rand() % 2 == 0 ? NORTH : SOUTH);
    } else {
        move.setDirection(rand() % 2 == 0 ? WEST : EAST);
    }
}

Сперва мы проверяем, что у бойца достаточно очков действия для перемещения на одну клетку в положении стоя, и в случае неудачи завершаем ход. (Положение стоя является стойкой бойца по умолчанию, и мы его не меняем. В более сложной стратегии, возможно, будет необходимо написать вспомогательный метод, определяющий стоимость перемещения бойца в зависимости от его стойки.) Затем мы указываем, что хотим переместить бойца: “move.setAction(MOVE)”. И далее указываем одной из четырех направлений перемещения в зависимости от полученного случайного числа. Для перемещения всегда строго на север достаточно было просто написать “move.setDirection(NORTH)”. Вместо направления можно указывать точные координаты клетки назначения X и Y, однако нужно помнить, что перемещение за один ход можно совершать только в соседнюю (по вертикали или горизонтали, но не по диагонали) клетку, иначе ход будет воспринят как некорректный. Если в объекте “move” задать и направление, и точные координаты, то симулятор игры будет использовать направление.

Теперь напишем более сложный код. Пусть боец перебирает ближайших противников и стреляет в первого попавшегося.

#include "MyStrategy.h"

#define _USE_MATH_DEFINES
#include <cmath>
#include <cstdlib>

using namespace model;
using namespace std;

MyStrategy::MyStrategy() { }

void MyStrategy::move(const Trooper& self, const World& world, const Game& game, Move& move) {
    if (self.getActionPoints() >= self.getShootCost()) {                // Если достаточно очков действия
        vector<Trooper> troopers = world.getTroopers();                 // Получаем список всех видимых бойцов на поле боя

        for (size_t i = 0; i < troopers.size(); ++i) {                  // Перебираем всех видимых бойцов
            Trooper trooper = troopers.at(i);

            bool canShoot = world.isVisible(self.getShootingRange(),    // Проверяем, что цель не скрыта от бойца
                self.getX(), self.getY(), self.getStance(),             // каким-либо препятствием, а также находится
                trooper.getX(), trooper.getY(), trooper.getStance());   // в пределах его дальности стрельбы

            if (canShoot && !trooper.isTeammate()) {                    // Если можем стрелять и это не союзник
                move.setAction(SHOOT);                                  // Устанавливаем действие "выстрел"
                move.setX(trooper.getX());                              // Устанавливаем координаты цели X...
                move.setY(trooper.getY());                              // ...и Y
                return;                                                 // Завершаем ход
            }
        }
    }
}

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

#include "MyStrategy.h"

#define _USE_MATH_DEFINES
#include <cmath>
#include <cstdlib>

using namespace model;
using namespace std;

MyStrategy::MyStrategy() { }

void MyStrategy::move(const Trooper& self, const World& world, const Game& game, Move& move) {
    if (self.getActionPoints() >= game.getStandingMoveCost()) {         // Если достаточно очков действия
        vector<vector<CellType> > cells = world.getCells();             // Получаем карту препятствий на игровом поле

        int targetX = world.getWidth() / 2;                             // Вычисляем координаты цели X...
        int targetY = world.getHeight() / 2;                            // ...и Y

        int offsetX = self.getX() > targetX ? -1                        // Определяем смещение при движении по оси X
            : self.getX() < targetX ? 1
            : 0;

        int offsetY = self.getY() > targetY ? -1                        // Определяем смещение при движении по оси Y
            : self.getY() < targetY ? 1
            : 0;

        bool canMoveX = offsetX != 0                                    // Определяем необходимость и возможность движения
            && cells[self.getX() + offsetX][self.getY()] == FREE;       // по оси X

        bool canMoveY = offsetY != 0                                    // Определяем необходимость и возможность движения
            && cells[self.getX()][self.getY() + offsetY] == FREE;       // по оси Y

        if (canMoveX || canMoveY) {                                     // Если мы можем двигаться хотя бы в одном направлении
            move.setAction(MOVE);                                       // Устанавливаем действие "перемещение"

            if (canMoveX && canMoveY) {                                 // Если можем двигаться в двух направлениях
                if (rand() % 2 == 0) {                                  // Выбираем направление случайно
                    move.setX(self.getX() + offsetX);                   // Устанавливаем смещение по горизонтали
                    move.setY(self.getY());                             // Оставляем текущую координату Y
                } else {
                    move.setX(self.getX());                             // Оставляем текущую координату X
                    move.setY(self.getY() + offsetY);                   // Устанавливаем смещение по вертикали
                }
            } else if (canMoveX) {                                      // Если можем двигаться только по горизонтали
                move.setX(self.getX() + offsetX);                       // Устанавливаем смещение по горизонтали
                move.setY(self.getY());                                 // Оставляем текущую координату Y
            } else {                                                    // Остался только один вариант: движение по вертикали
                move.setX(self.getX());                                 // Оставляем текущую координату X
                move.setY(self.getY() + offsetY);                       // Устанавливаем смещение по вертикали
            }

            return;                                                     // Завершаем ход
        }
    }
}

Таким образом наш боец умеет перемещаться по полю и стрелять в первого попавшегося врага. Понятно, что это самая простая стратегия и шансов выиграть у нее немного, но это всего-лишь пример. Удачи!



GreenTea

GreenTea

ISDDesign

В документации сказано что территория проведения конкурса Российская Федерация, и ничего про доставку призов за рубеж. Значит ли это что иностранцы не могут учавствовать, и если и будут учавствовать, то не получат своих призов?

04.11.2013 1:40:00
Fanter

Fanter

Санкт-Петербург

EvAn

EvAn

КубГТУ

Так понимаю, что пока тестирование стратегий возможно, только отсылая их сюда? Будет ли LocalRunner?

LocalRunner в разделе Документация находится, запускается с java7

04.11.2013 1:44:21
EvAn

EvAn

КубГТУ

Fanter

Fanter

Санкт-Петербург

LocalRunner в разделе Документация находится, запускается с java7

Уже заметил: http://russianaicup.ru/p/localrunner (В Быстром старте об этом не написано.)

04.11.2013 1:49:28
SladeThe

SladeThe

Команда Russian AI Cup

А подскажите пожалуйста, у меня с главной куда-то пропала демо-версия боя, по ссылкам пощелкал тоже найти не могу… Где её искать?

Демо-бой скрывается, если зайти на сайт.

04.11.2013 2:05:38
SladeThe

SladeThe

Команда Russian AI Cup

Если вылогиниться, то демо на главной есть, а когда захожу то его нигде нет…

Предполагается, что демо-бой интересен только новичкам. Зарегистрированные пользователи могут создавать свои игры и смотреть их. Стратегия QuickStart есть в открытом доступе, вы можете её посабмитить.

04.11.2013 2:08:34
MikeMirzayanov

MikeMirzayanov

Команда Russian AI Cup

GreenTea

GreenTea

ISDDesign

В документации сказано что территория проведения конкурса Российская Федерация, и ничего про доставку призов за рубеж. Значит ли это что иностранцы не могут учавствовать, и если и будут учавствовать, то не получат своих призов?

К участию приглашаются не только граждане РФ. На получение призов гражданство не влияет. В прошлом году среди победителей были участники из Украины и Беларуси.

04.11.2013 2:21:02
GreenTea

GreenTea

ISDDesign

MikeMirzayanov

MikeMirzayanov

Команда Russian AI Cup

К участию приглашаются не только граждане РФ. На получение призов гражданство не влияет. В прошлом году среди победителей были участники из Украины и Беларуси.

Отлично! Лучше бы это только в документации отразить, чтобы потом не было вопросов.

04.11.2013 2:25:15
GreenTea

GreenTea

ISDDesign

GreenTea

GreenTea

ISDDesign

Отлично! Лучше бы это только в документации отразить, чтобы потом не было вопросов.

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

04.11.2013 2:30:02
amurushkin

amurushkin

ХНУРЭ (бывш. ХИРЭ, ХТУРЭ)

amurushkin

amurushkin

ХНУРЭ (бывш. ХИРЭ, ХТУРЭ)

Не могу нигде найти документацию по типам юнитов, их особенностям и так далее. в скачанном мною языковом пакете нет ни одного комментария в коде

Уже нашел, но искал очень долго. Советую добавить данный пункт в меню слева. Там первым делом ищут я думаю

04.11.2013 7:04:12
Mr.Smile

Mr.Smile

Москва

В C++ варианте опять те же проблемы, что и в прошлый раз: очень много копирований тяжелых контейнеров. Замените, пожалуйста, где можно, в аргументах функций и возвращаемых значениях, std::vector<SomeType> на const std::vector<SomeType> &, очень серьезный удар по производительности. Ну и

const std::vector<std::vector<std::vector<std::vector<std::vector<bool> > > > >& cell_visibilities_;

это просто шедевр, мне хочется это развидеть.

Еще в файлах model/Unit.cpp и model/World.cpp используется функция _hypot. Это нестандартное расширение M$, стоит убрать подчеркивание (просто hypot – это POSIX, C99 и C++11) или вообще избавиться от этой функции. Лучше сравнивать квадраты длин, тем более они будут целыми, не будет проблем с округлением.

04.11.2013 8:52:10
Angle

Angle

НИИ

Добавьте правила http://russianaicup.ru/p/rules в тексте или в pdf чтобы можно поиск по словам в файле делать.

04.11.2013 10:40:18
amurushkin

amurushkin

ХНУРЭ (бывш. ХИРЭ, ХТУРЭ)

shutwo

shutwo

ИрГУПС

Подскажите, в чем может быть проблема? В LocalRunner стратегия работает нормально, не отваливается, тестил сотню раз, а когда заливаю сюда, то пишет, что ошибка верификации.

Либо падает с другим количеством участников либо потребляет ресурсов больше чем разрешено. Это самые частые причины

04.11.2013 11:00:51
SladeThe

SladeThe

Команда Russian AI Cup

amurushkin

amurushkin

ХНУРЭ (бывш. ХИРЭ, ХТУРЭ)

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

Игра пошаговая. Читайте внимательно документацию. Там всё есть.

04.11.2013 13:21:41
SladeThe

SladeThe

Команда Russian AI Cup

malyshev.e.s

malyshev.e.s

ТОО "Аманат"

Что делать игрокам, чьи аккаунты заблокировали в прошлом году?

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

P.S. Разумеется, посылки, игры и другие данные прошлого AI Cup уже не будут привязаны к новой учётной записи.

04.11.2013 14:30:11
SladeThe

SladeThe

Команда Russian AI Cup

Mr.Smile

Mr.Smile

Москва

В C++ варианте опять те же проблемы, что и в прошлый раз: очень много копирований тяжелых контейнеров. Замените, пожалуйста, где можно, в аргументах функций и возвращаемых значениях, std::vector на const std::vector & , очень серьезный удар по производительности. Ну и const std::vector<std::vector<std::vector<std::vector<std::vector > > > >& cell_visibilities_; …

Мы внесём указанные вами исправления. Однако проблема явно преувеличена: оверхед на копирование векторов по 5-10 элементов (только видимые объекты) незначителен.

04.11.2013 14:33:32
SladeThe

SladeThe

Команда Russian AI Cup

Вот бы для local-runner параметр, который бы замедлял скорость боя, чтобы можно было адекватней управлять с клавиатуры.

Управлять скоростью воспроизведения в LocalRunner можно при помощи кнопок Вверх/Вниз. Мы добавим эту информацию в файл read.me.

04.11.2013 14:36:03
Locky

Locky

Киев

Locky

Locky

Киев

не очень понятно по бонусам может ли один юнит иметь 2 разных бонуса? например аптечку и гранату? или только 1 бонус может нести? спасибо

уже сам нашел в доке… по одному бонусу каждого вида

04.11.2013 15:43:58
steelart
SladeThe

SladeThe

Команда Russian AI Cup

Мы внесём указанные вами исправления. Однако проблема явно преувеличена: оверхед на копирование векторов по 5-10 элементов (только видимые объекты) незначителен.

Большие структуры тоже не хорошо передавать по значению, как это делается в void MyStrategy::Move(Trooper self, World world, Game game, model::Move& move). Гораздо лучше использовать константные ссылки: void MyStrategy::Move(const Trooper& self, const World& world, const Game& game, model::Move& move). От громоздкости прототипа можно избавиться с помощью typedef’ов.

04.11.2013 17:40:27
Locky

Locky

Киев

На питоне 2.7 не работает расчет видим враг или нет… Уже для отладки сделал такой код: a = [] for x in xrange(10): a.append(world.is_visible(7, 20, 15, 0, 20-x, 15-x, 0))

в итоге получаю список [False, False, False, False, False, False, False, False, False, False]

значение поля cell_visibilities у World в дебагере выглядит очень странновато…

04.11.2013 18:09:30
admin

admin

Команда Russian AI Cup

Locky

Locky

Киев

На питоне 2.7 не работает расчет видим враг или нет… Уже для отладки сделал такой код: a = [] for x in xrange(10): a.append(world.is_visible(7, 20, 15, 0, 20-x, 15-x, 0)) в итоге получаю список [False, False, False, False, False, False, False, False, False, False] значение поля cell_visibilities у World в дебагере выглядит очень странновато…

C Питоном будем разбираться, возможны issues.

04.11.2013 19:12:43
asdForever

asdForever

Kaspi Bank

Ubuntu 12.04. Не запускается local runner.

$ sh local-runner.sh local-runner.sh: 1: local-runner.sh: pushd: not found local-runner.sh: 3: local-runner.sh: popd: not found $ Exception in thread “main” java.lang.UnsupportedClassVersionError: LocalTestRunner : Unsupported major.minor version 51.0 at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:634) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) at java.net.URLClassLoader.defineClass(URLClassLoader.java:277) at java.net.URLClassLoader.access$000(URLClassLoader.java:73) at java.net.URLClassLoader$1.run(URLClassLoader.java:212) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:205) at java.lang.ClassLoader.loadClass(ClassLoader.java:321) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294) at java.lang.ClassLoader.loadClass(ClassLoader.java:266) Could not find the main class: LocalTestRunner. Program will exit.

04.11.2013 19:23:25
imbeat

imbeat

МИЭТ

Angle

Angle

НИИ

Добавьте правила http://russianaicup.ru/p/rules в тексте или в pdf чтобы можно поиск по словам в файле делать.

+1 Дайте нам, пожалуйста, обычную html-страничку с правилами (не PDF).

04.11.2013 19:39:05
admin

admin

Команда Russian AI Cup

asdForever

asdForever

Kaspi Bank

Ubuntu 12.04. Не запускается local runner. $ sh local-runner.sh local-runner.sh: 1: local-runner.sh: pushd: not found local-runner.sh: 3: local-runner.sh: popd: not found $ Exception in thread “main” java.lang.UnsupportedClassVersionError: LocalTestRunner : Unsupported major.minor version 51.0 at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:634) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) at java.net.URLClassLoader.defineClass(URLClassLoader.java:277) at java.net.URLClassLoader.access$000(URLClassLoader.java:73) at java.net.URLClassLoader$1.run(URLClassLoader.java:212) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:205) at java.lang.ClassLoader.loadClass(ClassLoader.java:321) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294) at java.lang.ClassLoader.loadClass(ClassLoader.java:266) Could not find the main class: LocalTestRunner. Program will exit.

Установите Java 7.

04.11.2013 19:47:14
SladeThe

SladeThe

Команда Russian AI Cup

Dimon_II

Dimon_II

ProFIX

Если задать перемещение по координатам - сделает ли “стандартный” алгоритм обход препятствия или упрется в барьер на кратчайшем пути?

За 1 ход можно перемещаться только в соседнюю клетку.

04.11.2013 20:32:00
ViktorM

ViktorM

NVidia

imbeat

imbeat

МИЭТ

+1 Дайте нам, пожалуйста, обычную html-страничку с правилами (не PDF).

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

04.11.2013 20:42:49
SladeThe

SladeThe

Команда Russian AI Cup

serlis

serlis

Харьковский НУ им. Каразина

опишите все типы действий в тестовой задаче, а то я не могу найти даже как менять стойку солдата? А документация такое ощущение что только для джавы.

Вы можете посмотреть файл ActionType.* в вашем клиенте (или перечисление ActionType в файле Move.h для C++). Документация сделана для Java, но все имена одинаковые в разных языках. Отличается только стиль именования.

04.11.2013 23:55:47
Gvoin

Gvoin

Не могу

Я взял ваш пример движения и сделал из него функцию, вот что вышло: [code]

void MoveTo(Trooper self, model::Move& move, int xxx,int yyy) { int target_x = xxx; // Вычисляем координаты цели X… int target_y = yyy; // …и Y

    int offset_x = self.x() > target_x ? -1                 // Определяем смещение при движении по оси X
        : self.x() < target_x ? 1
        : 0;

    int offset_y = self.y() > target_y ? -1                 // Определяем смещение при движении по оси Y
        : self.y() < target_y ? 1
        : 0;

    bool can_move_x = offset_x != 0                         // Определяем необходимость и возможность движения
        && cells[self.x() + offset_x][self.y()] == FREE;    // по оси X

    bool can_move_y = offset_y != 0                         // Определяем необходимость и возможность движения
        && cells[self.x()][self.y() + offset_y] == FREE;    // по оси Y

    if (can_move_x || can_move_y) {                         // Если мы можем двигаться хотя бы в одном направлении
        move.set_action(MOVE);                              // Устанавливаем действие "перемещение"

        if (can_move_x && can_move_y) {                     // Если можем двигаться в двух направлениях
            if (rand() % 2 == 0) {                          // Выбираем направление случайно
                move.set_x(self.x() + offset_x);            // Устанавливаем смещение по горизонтали
                move.set_y(self.y());                       // Оставляем текущую координату Y
            } else {
                move.set_x(self.x());                       // Оставляем текущую координату X
                move.set_y(self.y() + offset_y);            // Устанавливаем смещение по вертикали
            }
        } else if (can_move_x) {                            // Если можем двигаться только по горизонтали
            move.set_x(self.x() + offset_x);                // Устанавливаем смещение по горизонтали
            move.set_y(self.y());                           // Оставляем текущую координату Y
        } else {                                            // Остался только один вариант: движение по вертикали
            move.set_x(self.x());                           // Оставляем текущую координату X
            move.set_y(self.y() + offset_y);                // Устанавливаем смещение по вертикали
        }

        return;                                             // Завершаем ход
    }
}

[/code] Ставлю эту функцию над MyStrategy::Move , языковой пакет все компилирует без ошибок, а при попытке отправить стратегию на сервер получаю ошибку компиляции Сейчас добавлю скриншот ошибки.

05.11.2013 1:11:04
Gvoin

Gvoin

Не могу

Gvoin

Gvoin

Не могу

Я взял ваш пример движения и сделал из него функцию, вот что вышло: [code] void MoveTo(Trooper self, model::Move& move, int xxx,int yyy) { int target_x = xxx; // Вычисляем координаты цели X… int target_y = yyy; // …и Y int offset_x = self.x() > target_x ? -1 // Определяем смещение при движении по оси X : self.x() < target_x ? 1 : 0;

int offset_y = self.y() > target_y ? -1                 // Определяем смещение при движении по оси Y
    : self.y() < target_y ? 1
    : 0;

bool can_move_x = offset_x != 0                         // Определяем необходимость и возможность движения
    && cells[self.x() + offset_x][self.y()] == FREE;    // по оси X

bool can_move_y = offset_y != 0                         // Определяем необходимость и возможность движения
    && cells[self.x()][self.y() + offset_y] == FREE;    // по оси Y

if (can_move_x || can_move_y) {                         // Если мы можем двигаться хотя бы в одном направлении
    move.set_action(MOVE);                              // Устанавливаем действие "перемещение"

    if (can_move_x && can_move_y) {                     // Если можем двигаться в двух направлениях
        if (rand() % 2 == 0) {                          // Выбираем направление случайно
            move.set_x(self.x() + offset_x);            // Устанавливаем смещение по горизонтали
            move.set_y(self.y());                       // Оставляем текущую координату Y
        } else {
            move.set_x(self.x());                       // Оставляем текущую координату X
            move.set_y(self.y() + offset_y);            // Устанавливаем смещение по вертикали
        }
    } else if (can_move_x) {                            // Если можем двигаться только по горизонтали
        move.set_x(self.x() + offset_x);                // Устанавливаем смещение по горизонтали
        move.set_y(self.y());                           // Оставляем текущую координату Y
    } else {                                            // Остался только один вариант: движение по вертикали
        move.set_x(self.x());                           // Оставляем текущую координату X
        move.set_y(self.y() + offset_y);                // Устанавливаем смещение по вертикали
    }

    return;                                             // Завершаем ход
}

} …

ссылка на скрин
или так
http://fc14.spaces.ru/f/086186083245144172090066188163246079215041054076122025/1383599753/43947969/0/039379a95290f4c969a72e36a263672c/Bezymjannyj-spaces.ru.jpg

05.11.2013 1:14:33
SladeThe

SladeThe

Команда Russian AI Cup

Gvoin

Gvoin

Не могу

Я взял ваш пример движения и сделал из него функцию, вот что вышло: [code] void MoveTo(Trooper self, model::Move& move, int xxx,int yyy) { int target_x = xxx; // Вычисляем координаты цели X… int target_y = yyy; // …и Y int offset_x = self.x() > target_x ? -1 // Определяем смещение при движении по оси X : self.x() < target_x ? 1 : 0;

int offset_y = self.y() > target_y ? -1                 // Определяем смещение при движении по оси Y
    : self.y() < target_y ? 1
    : 0;

bool can_move_x = offset_x != 0                         // Определяем необходимость и возможность движения
    && cells[self.x() + offset_x][self.y()] == FREE;    // по оси X

bool can_move_y = offset_y != 0                         // Определяем необходимость и возможность движения
    && cells[self.x()][self.y() + offset_y] == FREE;    // по оси Y

if (can_move_x || can_move_y) {                         // Если мы можем двигаться хотя бы в одном направлении
    move.set_action(MOVE);                              // Устанавливаем действие "перемещение"

    if (can_move_x && can_move_y) {                     // Если можем двигаться в двух направлениях
        if (rand() % 2 == 0) {                          // Выбираем направление случайно
            move.set_x(self.x() + offset_x);            // Устанавливаем смещение по горизонтали
            move.set_y(self.y());                       // Оставляем текущую координату Y
        } else {
            move.set_x(self.x());                       // Оставляем текущую координату X
            move.set_y(self.y() + offset_y);            // Устанавливаем смещение по вертикали
        }
    } else if (can_move_x) {                            // Если можем двигаться только по горизонтали
        move.set_x(self.x() + offset_x);                // Устанавливаем смещение по горизонтали
        move.set_y(self.y());                           // Оставляем текущую координату Y
    } else {                                            // Остался только один вариант: движение по вертикали
        move.set_x(self.x());                           // Оставляем текущую координату X
        move.set_y(self.y() + offset_y);                // Устанавливаем смещение по вертикали
    }

    return;                                             // Завершаем ход
}

} …

Пакет C++ был переработан. Смотрите изменения в посте.

Стартовый пример также был обновлён.

05.11.2013 1:22:02
altushift

altushift

Украина

Замените, пожалуйста, в классе Trooper методы int standing_damage(), int kneeling_damage() и int prone_damage() одним методом int damage(TrooperStance stance).

05.11.2013 1:33:29
Gvoin

Gvoin

Не могу

SladeThe

SladeThe

Команда Russian AI Cup

int offset_y = self.y() > target_y ? -1 // Определяем смещение при движении по оси Y : self.y() < target_y ? 1 : 0;

bool can_move_x = offset_x != 0 // Определяем необходимость и возможность движения && cells[self.x() + offset_x][self.y()] == FREE; // по оси X

bool can_move_y = offset_y != 0 // Определяем необходимость и возможность движения && cells[self.x()][self.y() + offset_y] == FREE; // по оси Y

if (can_move_x || can_move_y) { // Если мы можем двигаться хотя бы в одном направлении move.set_action(MOVE); // Устанавливаем действие “перемещение”

if (can_move_x && can_move_y) {                     // Если можем двигаться в двух направлениях
    if (rand() % 2 == 0) {                          // Выбираем направление случайно
        move.set_x(self.x() + offset_x);            // Устанавливаем смещение по горизонтали
        move.set_y(self.y());                       // Оставляем текущую координату Y
    } else {
        move.set_x(self.x());                       // Оставляем текущую координату X
        move.set_y(self.y() + offset_y);            // Устанавливаем смещение по вертикали
    }
} else if (can_move_x) {                            // Если можем двигаться только по горизонтали
    move.set_x(self.x() + offset_x);                // Устанавливаем смещение по горизонтали
    move.set_y(self.y());                           // Оставляем текущую координату Y
} else {                                            // Остался только один вариант: движение по вертикали
    move.set_x(self.x());                           // Оставляем текущую координату X
    move.set_y(self.y() + offset_y);                // Устанавливаем смещение по вертикали
}

return;                                             // Завершаем ход

} …

Так в чем же ошибка? Что нужно исправить? Ошибка компиляции на сервере так и осталась.

05.11.2013 2:07:46
andrewjust100gm

Значки не очень интуитивно понятные. Вот например бонусы: две палочки на зелёном фоне и молния на фиолетовом - подскажите, что из этого граната, а что доппаёк? :)

05.11.2013 2:14:46
Gvoin

Gvoin

Не могу

Значки не очень интуитивно понятные. Вот например бонусы: две палочки на зелёном фоне и молния на фиолетовом - подскажите, что из этого граната, а что доппаёк? :)

Молния - это доппаек.

05.11.2013 2:18:20
chianti

Какой-то рейтинг неадекватный: на текущее время 1) всего участников: 73 2) минимальный рейтинг: 1637 3) максимальный рейтинг: 3077 4) средний рейтинг: 2483.42 Как такое может быть? Средний рейтинг игроков только растет!

05.11.2013 10:11:42
imbeat

imbeat

МИЭТ

xelai

xelai

Когалым

А порядок хода у бойцов в группе всегда одинаковый или меняется?

Перед каждым боем порядок формируется случайным образом, но в течение боя выбранный порядок остается неизменным. (читайте правила)

05.11.2013 11:24:12
ViktorM

ViktorM

NVidia

altushift

altushift

Украина

Замените, пожалуйста, в классе Trooper методы int standing_damage() , int kneeling_damage() и int prone_damage() одним методом int damage(TrooperStance stance) .

+1

05.11.2013 12:12:20
Gvoin

Gvoin

Не могу

После обновления пакета для С++, вседа возникает ошибка

MyStrategy.cpp:17:78: error: no ‘void MyStrategy::Move(model::Trooper, model::World, model::Game, model::Move&)’ member function declared in class ‘MyStrategy’

05.11.2013 12:30:28
Gvoin

Gvoin

Не могу

Can't normalize html.

05.11.2013 13:05:48
amurushkin

amurushkin

ХНУРЭ (бывш. ХИРЭ, ХТУРЭ)

ViktorM

ViktorM

NVidia

+1

напишите его сами. минутное дело же.

05.11.2013 13:08:02
fefer.ivan

fefer.ivan

Команда Russian AI Cup

altushift

altushift

Украина

Замените, пожалуйста, в классе Trooper методы int standing_damage() , int kneeling_damage() и int prone_damage() одним методом int damage(TrooperStance stance) .

У объекта Trooper есть метод getDamage(), который возвращает урон солдата в текущей стойке.

05.11.2013 13:10:26
ViktorM

ViktorM

NVidia

fefer.ivan

fefer.ivan

Команда Russian AI Cup

У объекта Trooper есть метод getDamage(), который возвращает урон солдата в текущей стойке.

А если нужен не в текущей? Иметь 3 разных функции с длинными именами не очень удобно, это заметно увеличивает размер кода, да и не очень здорово с точки зрения проектирования.

05.11.2013 13:16:19
ViktorM

ViktorM

NVidia

amurushkin

amurushkin

ХНУРЭ (бывш. ХИРЭ, ХТУРЭ)

напишите его сами. минутное дело же.

Так нельзя менять файл труппер.

05.11.2013 13:18:13
fefer.ivan

fefer.ivan

Команда Russian AI Cup

ViktorM

ViktorM

NVidia

А если нужен не в текущей? Иметь 3 разных функции с длинными именами не очень удобно, это заметно увеличивает размер кода, да и не очень здорово с точки зрения проектирования.

Создайте класс TrooperUtils. В нем несколько статических методов: getDamage(Trooper trooper, TrooperStance stance), getMoveCost(Trooper trooper, TrooperStance stance). Так достаточно удобно.

05.11.2013 13:24:57
Gvoin

Gvoin

Не могу

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


Извините за стили, просто это очень важно для меня

05.11.2013 13:28:40
Gvoin

Gvoin

Не могу

fefer.ivan

fefer.ivan

Команда Russian AI Cup

Создайте класс TrooperUtils. В нем несколько статических методов: getDamage(Trooper trooper, TrooperStance stance), getMoveCost(Trooper trooper, TrooperStance stance). Так достаточно удобно.

Дайте, пожалуйста, рабочий пример создания функции в c++, очень важно.

05.11.2013 13:30:14
fefer.ivan

fefer.ivan

Команда Russian AI Cup

Gvoin

Gvoin

Не могу

Дайте, пожалуйста, рабочий пример создания функции в c++, очень важно.

Я не уверен в своих знаниях C++ касательно enum и оператора switch, но кажется что так

inline int getDamage(const Trooper& trooper, const TrooperStance& stance) {
	switch (stance) {
		case TrooperStance::PRONE:
			return trooper.getProneDamage();
		case TrooperStance::KNEELING:
			return trooper.getKneelingDamage();
		case TrooperStance::STANDING:
			return trooper.getStandingDamage();
	}
	throw "Unknown stance";
}

05.11.2013 13:45:40
Gvoin

Gvoin

Не могу

fefer.ivan

fefer.ivan

Команда Russian AI Cup

Я не уверен в своих знаниях C++ касательно enum и оператора switch, но кажется что так inline int getDamage(const Trooper& trooper, const TrooperStance& stance) { switch (stance) { case TrooperStance::PRONE: return trooper.getProneDamage(); case TrooperStance::KNEELING: return trooper.getKneelingDamage(); case TrooperStance::STANDING: return trooper.getStandingDamage(); } throw “Unknown stance”; }

А куда ее ложить? Сверху от MyStrategy::move или внутри?

05.11.2013 13:48:53
fefer.ivan

fefer.ivan

Команда Russian AI Cup

Gvoin

Gvoin

Не могу

А куда ее ложить? Сверху от MyStrategy::move или внутри?

  • Класть.

До MyStrategy::move. А еще лучше вынесли в отдельный .h файл.

05.11.2013 13:52:06
Gvoin

Gvoin

Не могу

fefer.ivan

fefer.ivan

Команда Russian AI Cup

  Класть.   До MyStrategy::move. А еще лучше вынесли в отдельный .h файл.

Пытаюсь, но не умею.(( Буду гуглить)

05.11.2013 13:55:24
Gvoin

Gvoin

Не могу

fefer.ivan

fefer.ivan

Команда Russian AI Cup

  Класть.   До MyStrategy::move. А еще лучше вынесли в отдельный .h файл.

а в какую папку этот .h файл класть?

05.11.2013 13:59:11
amurushkin

amurushkin

ХНУРЭ (бывш. ХИРЭ, ХТУРЭ)

ViktorM

ViktorM

NVidia

Так нельзя менять файл труппер.

ну я сделал метод в MyStrategy и передаю туда trooper. Результат тот же

05.11.2013 14:00:29
Gvoin

Gvoin

Не могу

вот ошибка


model/Unit.h: In function ‘void MoveTo(model::Trooper, model::Move&, int&, int&)’: model/Unit.h:10:13: error: ‘int model::Unit::x’ is private MyStrategy.cpp:20:27: error: within this context MyStrategy.cpp:20:29: error: ‘me.model::Trooper::.model::Unit::x’ cannot be used as a function

а вот этот участок кода

inline void MoveTo(model::Trooper me, model::Move& move, int xxx,int yyy) { int target_x = xxx;
int target_y = yyy;

    int offset_x = me.x() > target_x ? -1                 //В этой строке ошибка, вроде me.x() не работает, но почему?
        : me.x() < target_x ? 1
        : 0;


В чем проблема?

05.11.2013 14:12:53
imbeat

imbeat

МИЭТ

ViktorM

ViktorM

NVidia

Так нельзя менять файл труппер.

Напишите статик метод статик класса, который первым параметром принимает экземпляр класса Trooper (в C# таким образом работают, методы расширения, например).

05.11.2013 14:32:44
andrewjust100gm

В начале игры общий список юнитов всех игроков перемешивается случайным образом

Могут ли между вызовами юнитов одного игрока “вклиниться” вызовы юнитов другого игрока?

05.11.2013 16:07:13
imbeat

Могут ли между вызовами юнитов одного игрока “вклиниться” вызовы юнитов другого игрока?

Судя по документации, да.

05.11.2013 16:23:37
ViktorM

ViktorM

NVidia

imbeat

imbeat

МИЭТ

Напишите статик метод статик класса, который первым параметром принимает экземпляр класса Trooper (в C# таким образом работают, методы расширения, например).

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

05.11.2013 16:49:15
Gvoin

Gvoin

Не могу

Допустим мой игрок находится в клетке (5; 5) тогда что я увижу в world.cells[5,5] ?? FREE или self.stance() ??

05.11.2013 17:17:34
amurushkin

amurushkin

ХНУРЭ (бывш. ХИРЭ, ХТУРЭ)

Gvoin

Gvoin

Не могу

Допустим мой игрок находится в клетке (5; 5) тогда что я увижу в world.cells[5,5] ?? FREE или self.stance() ??

поддерживаю вопрос, я еще не проверял в дебагере но судя по поведению юнитов там наверное FREE

05.11.2013 18:32:46
shutwo

shutwo

ИрГУПС

amurushkin

amurushkin

ХНУРЭ (бывш. ХИРЭ, ХТУРЭ)

поддерживаю вопрос, я еще не проверял в дебагере но судя по поведению юнитов там наверное FREE

Будет FREE

05.11.2013 18:46:43
Evrimedont
asdForever

asdForever

Kaspi Bank

Ubuntu 12.04. Не запускается local runner. $ sh local-runner.sh local-runner.sh: 1: local-runner.sh: pushd: not found local-runner.sh: 3: local-runner.sh: popd: not found $ Exception in thread “main” java.lang.UnsupportedClassVersionError: LocalTestRunner : Unsupported major.minor version 51.0 at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:634) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) at java.net.URLClassLoader.defineClass(URLClassLoader.java:277) at java.net.URLClassLoader.access$000(URLClassLoader.java:73) at java.net.URLClassLoader$1.run(URLClassLoader.java:212) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:205) at java.lang.ClassLoader.loadClass(ClassLoader.java:321) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294) at java.lang.ClassLoader.loadClass(ClassLoader.java:266) Could not find the main class: LocalTestRunner. Program will exit.

У Вас скорей всего используется java 1.6. Нужна 1.7.

05.11.2013 21:29:15
admin

admin

Команда Russian AI Cup

Angle

Angle

НИИ

Добавьте правила http://russianaicup.ru/p/rules в тексте или в pdf чтобы можно поиск по словам в файле делать.

Улучшили процесс сборки PDF. Теперь работает поиск, улучшено качество шрифтов.

05.11.2013 21:32:53
imbeat

imbeat

МИЭТ

admin

admin

Команда Russian AI Cup

Улучшили процесс сборки PDF. Теперь работает поиск, улучшено качество шрифтов.

А зачем вообще PDF? Неужто в обычном HTML тяжело оформить правила?

05.11.2013 21:55:27
SladeThe

SladeThe

Команда Russian AI Cup

serlis

serlis

Харьковский НУ им. Каразина

http://russianaicup.ru/game/view/3152 а ктони-будь может обьяснить почему этот бой так рано закончился (11 тактов) ?

Длительность этого боя стандартные 50 ходов. Начиная с 12-го хода 2 оставшиеся стратегии ничего не делали, а только пропускали ходы.

05.11.2013 22:07:19
kipar

kipar

ООО Доминанта

Shatim

Shatim

Университет ИТМО

При написании на Паскале не получается использовать константу FREE, так как есть зарезервированное языком Free, они имеют разные типы(

можно писать WorldControl.FREE

06.11.2013 11:26:15
SladeThe

SladeThe

Команда Russian AI Cup

Где-то в правилах читал, что можно при отправки стратегии можно будет “сбрасывать рейтинг” до 1200, чтобы нивелировать эффекты длительного зависания в таблице при существенном изменении стратегии. Почему-то не нашел такой кнопки нигде.

Данная функциональность пока отключена. И ещё: до начального состояния сбрасывается изменчивость рейтинга, а не сам рейтинг. Рейтинг тоже упадёт (чем он больше, тем сильнее падение), но это не значит, что он станет ровно 1200.

06.11.2013 12:31:28
SladeThe

SladeThe

Команда Russian AI Cup

можно по конкретнее про работу с файловой системой она запрещена совсем или в своем каталоге можно создавать и писать в файлы???

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

06.11.2013 15:50:28
SladeThe

SladeThe

Команда Russian AI Cup

насчет скорости если чтение и запись будут проходить в конструкторе и деструкторе класса MyStrategy то занятое время вычтется из лимита?? я к тому что чтение и запись проводятся не во время хода

Есть время, которое даётся вашей стратегии, а вы его хоть где тратьте. Результат один.

06.11.2013 15:56:03
amurushkin

amurushkin

ХНУРЭ (бывш. ХИРЭ, ХТУРЭ)

Возможно еще было бы удобно в своих боях выбирать карту для его проведения.

06.11.2013 16:45:02
SladeThe

SladeThe

Команда Russian AI Cup

amurushkin

amurushkin

ХНУРЭ (бывш. ХИРЭ, ХТУРЭ)

Очень прошу сделать возможность отключать фон. На новой карте ники плохо читаются. И еще есть пожелание к анимации. Сделать ее немножко полавнее при выстрелах чтобы было понятнее кто куда стреляет. И никак не могу уловить разницу в картинке когда юнит стоит и когда сидит

Возможность отключения фона добавлена ещё вчера.

06.11.2013 17:06:26
amurushkin

amurushkin

ХНУРЭ (бывш. ХИРЭ, ХТУРЭ)

SladeThe

SladeThe

Команда Russian AI Cup

Возможность отключения фона добавлена ещё вчера.

спасибо большое. не догадался где искать сразу

06.11.2013 17:20:32
shutwo

shutwo

ИрГУПС

Добрый вечер, столкнулся с проблемой. Написал очередную стратегию, протестировал в LocalRunner (все работает), попробовал залить как тестовую стратегию на сервак. Сервак отругался, что “ошибка компиляции”, я нажал на сообщение об ошибке, появилось окнос номером строки, в которой ошибка, и самой строкой, проверил сотню раз, никакой синтаксической ошибки там нет, иначе бы у меня локально тоже не компилилась стратегия. Что делать?

06.11.2013 17:50:29
_JG_

_JG_

ТОО "Аманат"

Что произошло с определением ShotCost в C#, еще вчера все работало, локально тоже никаких ошибок?

error CS1061: Type Com.CodeGame.CodeTroopers2013.DevKit.CSharpCgdk.Model.Trooper' does not contain a definition forShotCost’ and no extension method ShotCost' of typeCom.CodeGame.CodeTroopers2013.DevKit.CSharpCgdk.Model.Trooper’ could be found (are you missing a using directive or an assembly reference?)

Model\Trooper.cs(5,25): (Location of the symbol related to previous error)

06.11.2013 19:44:29
admin

admin

Команда Russian AI Cup

_JG_

_JG_

ТОО "Аманат"

Что произошло с определением ShotCost в C#, еще вчера все работало, локально тоже никаких ошибок? error CS1061: Type Com.CodeGame.CodeTroopers2013.DevKit.CSharpCgdk.Model.Trooper’ does not contain a definition for ShotCost’ and no extension method ShotCost’ of type Com.CodeGame.CodeTroopers2013.DevKit.CSharpCgdk.Model.Trooper’ could be found (are you missing a using directive or an assembly reference?) …

Скачайте обновленный пакет.

06.11.2013 20:34:03
_JG_

_JG_

ТОО "Аманат"

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

06.11.2013 21:33:10
Frifon

Frifon

Mail.Ru

Можно что-нибудь сделать, чтобы можно было различать положения бойцов. Очень трудно отличить сидящего от стоящего, например.

06.11.2013 21:59:41
Gvoin

Gvoin

Не могу

как узнать есть ли у тебя какой-то бонус, например граната?

06.11.2013 22:08:42
Frifon

Frifon

Mail.Ru

Gvoin

Gvoin

Не могу

как узнать есть ли у тебя какой-то бонус, например граната?

Есть методы. Например isHoldingGrenade()

06.11.2013 22:19:21
GreenTea

GreenTea

ISDDesign

А не могут ли админы помочь выяснить в чем заключается “ошибка верификации”? Дело в том что я пощу впервые не самый тривиальный код. У меня в локал раннере отрабатывает нормально. Не падает, боты вроде не выкидываются из-за неправильных ходов. Из-за того что кода не мало и отправляется он впервые, трудно выяснить где же я накосячил.

06.11.2013 23:01:26
cheeser

cheeser

Glowbyte

GreenTea

GreenTea

ISDDesign

А не могут ли админы помочь выяснить в чем заключается “ошибка верификации”? Дело в том что я пощу впервые не самый тривиальный код. У меня в локал раннере отрабатывает нормально. Не падает, боты вроде не выкидываются из-за неправильных ходов. Из-за того что кода не мало и отправляется он впервые, трудно выяснить где же я накосячил.

Я тоже только что выложил первую версию, исправить ошибку мне помогло ctrl-h ShotCost => ShootCost :)

06.11.2013 23:32:12
GreenTea

GreenTea

ISDDesign

cheeser

cheeser

Glowbyte

Я тоже только что выложил первую версию, исправить ошибку мне помогло ctrl-h ShotCost => ShootCost :)

Та была бы наверно ошибка компиляции.. но попоробую :)

06.11.2013 23:36:08
GreenTea

GreenTea

ISDDesign

cheeser

cheeser

Glowbyte

Я тоже только что выложил первую версию, исправить ошибку мне помогло ctrl-h ShotCost => ShootCost :)

Ха! Принята :)

06.11.2013 23:37:47
GreenTea

GreenTea

ISDDesign

GreenTea

GreenTea

ISDDesign

Ха! Принята :)

Значит java пакет так и не обновили. Т.к. я недавно скачивал.

06.11.2013 23:38:49
SladeThe

SladeThe

Команда Russian AI Cup

GreenTea

GreenTea

ISDDesign

А не могут ли админы помочь выяснить в чем заключается “ошибка верификации”? Дело в том что я пощу впервые не самый тривиальный код. У меня в локал раннере отрабатывает нормально. Не падает, боты вроде не выкидываются из-за неправильных ходов. Из-за того что кода не мало и отправляется он впервые, трудно выяснить где же я накосячил.

Ошибка уже выявлена? Я вижу, что далее идут принятые стратегии.

06.11.2013 23:48:15
serlis

serlis

Харьковский НУ им. Каразина

что происходит если программа исчерпала лимит времени? в документации написано программа упадёт, а как это отразиться в бою не написано. Просто мне интересно почему все тестовые бои со мной заканчиваются до 12 тика (обычно в районе 4)?

07.11.2013 17:31:48
admin

admin

Команда Russian AI Cup

amurushkin

amurushkin

ХНУРЭ (бывш. ХИРЭ, ХТУРЭ)

Can’t verify Submission {id=4627, userId=2197, status=FAILED, protocol=’’} because of strategy crash [stacktrace=com.codegame.codetroopers2013.contester.service.SubmissionProcessor$VerificationUnsuccessfulException: Strategy failed while execution. at com.codegame.codetroopers2013.contester.service.SubmissionProcessor.verifySubmission(SubmissionProcessor.java:339) at com.codegame.codetroopers2013.contester.service.SubmissionProcessor.processSubmission(SubmissionProcessor.java:95) at com.codegame.codetroopers2013.contester.Contester.testSubmissionsAndGamesInLoop(Contester.java:253) at com.codegame.codetroopers2013.contester.Contester.access$1300(Contester.java:40) at com.codegame.codetroopers2013.contester.Contester$1$4.run(Contester.java:153) at java.lang.Thread.run(Thread.java:722)]. …

Мы работаем над функциональностью протаскиванию участнику подробной технической информации об ошибках верификации.

07.11.2013 19:54:18
GreenTea

GreenTea

ISDDesign

SladeThe

SladeThe

Команда Russian AI Cup

Ошибка уже выявлена? Я вижу, что далее идут принятые стратегии.

Да, помогло переименование ShotCost => ShootCost. Что очень странно т.к. должна быть ошибка компиляции а не верификации.

07.11.2013 20:07:29
SladeThe

SladeThe

Команда Russian AI Cup

amurushkin

amurushkin

ХНУРЭ (бывш. ХИРЭ, ХТУРЭ)

Can’t verify Submission {id=4627, userId=2197, status=FAILED, protocol=’’} because of strategy crash [stacktrace=com.codegame.codetroopers2013.contester.service.SubmissionProcessor$VerificationUnsuccessfulException: Strategy failed while execution. at com.codegame.codetroopers2013.contester.service.SubmissionProcessor.verifySubmission(SubmissionProcessor.java:339) at com.codegame.codetroopers2013.contester.service.SubmissionProcessor.processSubmission(SubmissionProcessor.java:95) at com.codegame.codetroopers2013.contester.Contester.testSubmissionsAndGamesInLoop(Contester.java:253) at com.codegame.codetroopers2013.contester.Contester.access$1300(Contester.java:40) at com.codegame.codetroopers2013.contester.Contester$1$4.run(Contester.java:153) at java.lang.Thread.run(Thread.java:722)]. …

Это сообщение означает лишь то, что стратегия упала, и не зависит от причины падения. В ближайшие дни сообщение будет переработано.

07.11.2013 20:07:47
GreenTea

GreenTea

ISDDesign

amurushkin

amurushkin

ХНУРЭ (бывш. ХИРЭ, ХТУРЭ)

Кто знает при использовании сухпайка надо указывать координаты или нет? Падает стратегия как только пытаюсь добавить код по использованию пайков. странно. Хотя в раннере все нормально

Я не указывал координаты. Вроде не падала..

07.11.2013 20:18:12
SladeThe

SladeThe

Команда Russian AI Cup

amurushkin

amurushkin

ХНУРЭ (бывш. ХИРЭ, ХТУРЭ)

Кто знает при использовании сухпайка надо указывать координаты или нет? Падает стратегия как только пытаюсь добавить код по использованию пайков. странно. Хотя в раннере все нормально

Паёк можно съесть только самому. Нельзя накормить кого-то. Координаты можно указывать (падать из-за этого не должно), но они игнорируются.

07.11.2013 20:23:38
imbeat

imbeat

МИЭТ

SladeThe

SladeThe

Команда Russian AI Cup

Ошибка уже выявлена? Я вижу, что далее идут принятые стратегии.

Ошибка верификации не у него одного. Сейчас по клику на “?” выводится стек который рассказывает исключитель об ошибках контекста песочницы сервера. То есть во всем стеке нет ни одного названия метода из моего кода. Можно ли выводить полезный разработчикам алгоритмов кусок стека?!

07.11.2013 21:54:54
SladeThe

SladeThe

Команда Russian AI Cup

imbeat

imbeat

МИЭТ

Ошибка верификации не у него одного. Сейчас по клику на “?” выводится стек который рассказывает исключитель об ошибках контекста песочницы сервера. То есть во всем стеке нет ни одного названия метода из моего кода. Можно ли выводить полезный разработчикам алгоритмов кусок стека?!

Функциональность добавлена в тестовом режиме и пока никакой пользы для участников не несёт. В ближайшие дни мы сделаем нормальное сообщение: вывод стратегии в stdout/stderr и вердикт от симулятора игры.

07.11.2013 22:01:05
chianti

“в сумме на всю игру процессу стратегии выделяется … и 200 × <длительность_игры_в_ходах> × <количество_бойцов_в_отряде> миллисекунд процессорного времени”. А вы не могли бы уточнить какой класс процессора используются при тестировании стратегий?

08.11.2013 1:29:48
amurushkin

amurushkin

ХНУРЭ (бывш. ХИРЭ, ХТУРЭ)

А почему создать копию игры можно только по тем играм которые сам создавал? Было бы неплохо иметь такую кнопку к каждому бою.

08.11.2013 3:45:41
admin

admin

Команда Russian AI Cup

amurushkin

amurushkin

ХНУРЭ (бывш. ХИРЭ, ХТУРЭ)

У меня примерно час назад перестал работать просмотр боев в браузере. браузер Google Chrome. показывает белый экран и все

Всё исправлено.

08.11.2013 15:40:54
Asmadei

Asmadei

Калининград

В примере сверху написано: bool canMoveX =cells[self.getX() + offsetX][self.getY()] == FREE; Почему, если написать так bool canMoveX =cells[self.getX() + 1][self.getY()] == FREE;
Т.е вместо offsetX поставить 1(хотя offsetX может принимать значения 1), вылетает с ошибкой?

08.11.2013 17:34:14
amurushkin

amurushkin

ХНУРЭ (бывш. ХИРЭ, ХТУРЭ)

Asmadei

Asmadei

Калининград

В примере сверху написано: bool canMoveX =cells[self.getX() + offsetX][self.getY()] == FREE; Почему, если написать так bool canMoveX =cells[self.getX() + 1][self.getY()] == FREE; Т.е вместо offsetX поставить 1(хотя offsetX может принимать значения 1), вылетает с ошибкой?

c какой ошибкой? может за границы поля выходит?

08.11.2013 18:07:30
Asmadei

Asmadei

Калининград

amurushkin

amurushkin

ХНУРЭ (бывш. ХИРЭ, ХТУРЭ)

c какой ошибкой? может за границы поля выходит?

Все, спасибо, нашел ошибку. У меня ещё вопрос, как работает стратегия, она проходит весь алгоритм и, если остаются очки действий, проходит ещё раз? или нет? Например, я написал: передвинуться на одну клетку вверх, далее проверить: есть ли противник, если есть, то стреляем в него.(естественно проверка на возможность совершения действия есть) Допустим у нас всегда есть противник в зоне видимости. Как в этом случае будет работать программа? Боец передвинется на одну клетку вверх, стрельнет один раз в противника и далее алгоритм будет работать сначала? Или передвинется на одну клетку вверх и будет стрелять в противника пока очки действий не закончатся?

08.11.2013 19:46:23
rattleback

rattleback

Петрозаводск

Asmadei

Asmadei

Калининград

Все, спасибо, нашел ошибку. У меня ещё вопрос, как работает стратегия, она проходит весь алгоритм и, если остаются очки действий, проходит ещё раз? или нет? Например, я написал: передвинуться на одну клетку вверх, далее проверить: есть ли противник, если есть, то стреляем в него.(естественно проверка на возможность совершения действия есть) Допустим у нас всегда есть противник в зоне видимости. Как в этом случае будет работать программа? Боец передвинется на одну клетку вверх, стрельнет один раз в противника и далее алгоритм будет работать сначала? Или передвинется на одну клетку вверх и будет стрелять в противника пока очки действий не закончатся?

move будет вызываться до тех пор пока не кончатся action point или передана команда END_TURN

08.11.2013 19:53:25
amurushkin

amurushkin

ХНУРЭ (бывш. ХИРЭ, ХТУРЭ)

Asmadei

Asmadei

Калининград

Все, спасибо, нашел ошибку. У меня ещё вопрос, как работает стратегия, она проходит весь алгоритм и, если остаются очки действий, проходит ещё раз? или нет? Например, я написал: передвинуться на одну клетку вверх, далее проверить: есть ли противник, если есть, то стреляем в него.(естественно проверка на возможность совершения действия есть) Допустим у нас всегда есть противник в зоне видимости. Как в этом случае будет работать программа? Боец передвинется на одну клетку вверх, стрельнет один раз в противника и далее алгоритм будет работать сначала? Или передвинется на одну клетку вверх и будет стрелять в противника пока очки действий не закончатся?

ни так и ни так. вызовется метод move. ваша стратегия вернет установленное поле действие. оно выполнится и будет вызван еще раз метод move. и будет вызываться пока есть очки действия или вы не установите команду конец хода.

08.11.2013 19:53:58
rs-plus

rs-plus

Россия

Доброго времени суток, как и у многих выходит “ошибка верификации”. Использовал обновленный пакет, нигде нет Shot. Ума не приложу в чем может быть ошибка, в локал раннере всё отлично, могут админы дать хоть наводку на ошибку?

08.11.2013 19:54:17
Asmadei

Asmadei

Калининград

rs-plus

rs-plus

Россия

Доброго времени суток, как и у многих выходит “ошибка верификации”. Использовал обновленный пакет, нигде нет Shot. Ума не приложу в чем может быть ошибка, в локал раннере всё отлично, могут админы дать хоть наводку на ошибку?

Попробуй Shoot

08.11.2013 19:56:00
rs-plus

rs-plus

Россия

Asmadei

Asmadei

Калининград

Попробуй Shoot

Использую, ошибка верификации не в этом:(

08.11.2013 20:03:59
amurushkin

amurushkin

ХНУРЭ (бывш. ХИРЭ, ХТУРЭ)

rs-plus

rs-plus

Россия

Доброго времени суток, как и у многих выходит “ошибка верификации”. Использовал обновленный пакет, нигде нет Shot. Ума не приложу в чем может быть ошибка, в локал раннере всё отлично, могут админы дать хоть наводку на ошибку?

возможно работает долго, либо неверно работает при количестве бойцов отличным от 3

08.11.2013 20:04:17
rs-plus

rs-plus

Россия

amurushkin

amurushkin

ХНУРЭ (бывш. ХИРЭ, ХТУРЭ)

возможно работает долго, либо неверно работает при количестве бойцов отличным от 3

Понимаю, но чтобы принять меры, нужно точно знать. Долго работать не должна, не сильно нагружена еще…

08.11.2013 20:12:39
rattleback

rattleback

Петрозаводск

У меня тоже ошибка верификации. Пытался локализовать ошибку, свёл программу к ничего не делающей (return в методе move), но это ни к чему не привело. Статических инициализаторов нигде нет, getShotCost везде исправил. Выкинул из MyStrategy вообще все кроме одной строки “ai = new MedicAI()”. в приватном методе (который вообще не вызывается). Ошибка исчезает только тогда, когда я заменяю эту строку на “new MedicAI()” (т.е. убрав присваивание). Что странно, ведь в любом случае этот класс не загружается.

08.11.2013 20:40:13
kipar

kipar

ООО Доминанта

Я победил ошибки верификации так - в самом начале проверяю Troopers, если нахожу кого-то с профессией >2 (скаут или снайпер), то сразу выхожу и ничего не делаю.

08.11.2013 20:45:00
rattleback

rattleback

Петрозаводск

rattleback

rattleback

Петрозаводск

У меня тоже ошибка верификации. Пытался локализовать ошибку, свёл программу к ничего не делающей (return в методе move), но это ни к чему не привело. Статических инициализаторов нигде нет, getShotCost везде исправил. Выкинул из MyStrategy вообще все кроме одной строки “ai = new MedicAI()”. в приватном методе (который вообще не вызывается). Ошибка исчезает только тогда, когда я заменяю эту строку на “new MedicAI()” (т.е. убрав присваивание). Что странно, ведь в любом случае этот класс не загружается.

Как это обычно и бывает: написал про проблему — и решение сразу нашлось. Мой препроцессор на sed’е удаляет все import’ы и переносит файлы из пакетов в корневой каталог. Ошибку вызвала пропавший перенос строки: “import ai.*; import model.Direction;”: Препроцессор съел и второй импорт. Странно, что ошибка возникала не на этапе компиляции.

Отсюда вопрос: нельзя ли разрешить вложенные папки?

08.11.2013 20:55:11
Hohol

Hohol

Maxifier

Если бот задумывается на n-ом ходу (к примеру, произошла остановка на брейкпойнте), local runner показывает состояние игры, получившееся после (n-2)-го хода. Это очень раздражает. Можно переделать, чтоб показывал текущее состояние? (состояние, получившееся после последнего сделанного, (n-1)-го хода)

08.11.2013 21:44:40
rs-plus

rs-plus

Россия

kipar

kipar

ООО Доминанта

Я победил ошибки верификации так - в самом начале проверяю Troopers, если нахожу кого-то с профессией >2 (скаут или снайпер), то сразу выхожу и ничего не делаю.

Кстати помогло, благодарю)

08.11.2013 21:48:03
Kitsu

Kitsu

спбгпу, ииту

Пожалуй на следующий год пора бы уже добавить туман войны

08.11.2013 23:58:43
vovo4ka

vovo4ka

Рязань

Kitsu

Kitsu

спбгпу, ииту

Пожалуй на следующий год пора бы уже добавить туман войны

Так туман войны уже есть. Он просто не рисуется при воспроизведении

09.11.2013 1:09:13
Kitsu

Kitsu

спбгпу, ииту

vovo4ka

vovo4ka

Рязань

Так туман войны уже есть. Он просто не рисуется при воспроизведении

Ах пардон, в документации дошел только до этого места

09.11.2013 1:10:35
rs-plus

rs-plus

Россия

Как то мало участников пока что=/

09.11.2013 12:51:08
alexanderk23

alexanderk23

КубГУ

rs-plus

rs-plus

Россия

Как то мало участников пока что=/

Так анонса вроде не было ещё? С понедельника набегут, я думаю :)

09.11.2013 12:57:04
SladeThe

SladeThe

Команда Russian AI Cup

erwins

erwins

Мегафон

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

Сделали анонс на главной.

09.11.2013 15:39:10
SladeThe

SladeThe

Команда Russian AI Cup

erwins

erwins

Мегафон

Если для броска гранаты не хватает очков действия, то стратегия игрока считается упавшей. Если боец не имеет гранаты, то стратегия игрока считается упавшей. Если указанная клетка находится за пределами игрового поля или находится за пределом дальности броска гранаты, то стратегия игрока считается упавшей. …

«Если я бросаю на клетку со стенкой?» То бросаете )

«Работает ли френдли файр?» Да, можно даже самого себя взорвать.

«Если да, то кому будут начисляться очки?» От ФФ? Никому.

«Можно ли стрелять в своего трупера (но не в самого себя?) Что в этом случае будет с очками?» Нанесёте урон, с очками — ничего.

«Упавшая стратегия сохраняет очки?» Да, и бойцы продолжают стоять на карте.

09.11.2013 15:41:40
SladeThe

SladeThe

Команда Russian AI Cup

erwins

erwins

Мегафон

Т.е. если только осталось 2 игрока, я(у меня больше очков) и кто-то еще и я перестреляю всех кроме одного и себя взорву гранатой, то я выйграл? Могу ли я все бои так сводить в ничью на карте 1*1?

Похоже, что так.

09.11.2013 16:22:16
SladeThe

SladeThe

Команда Russian AI Cup

SladeThe

SladeThe

Команда Russian AI Cup

Похоже, что так.

Да, это может быть проблемой в Финале. При формате 4x это не страшно.

Мы подумаем, как лучше исключить такие моменты.

09.11.2013 16:26:36
erwins

erwins

Мегафон

SladeThe

SladeThe

Команда Russian AI Cup

Да, это может быть проблемой в Финале. При формате 4x это не страшно. Мы подумаем, как лучше исключить такие моменты.

Т.е. при бое 4х я смело могу этим пользоваться?

09.11.2013 16:42:49
cNoNim

cNoNim

DataArt

SladeThe

SladeThe

Команда Russian AI Cup

Да, это может быть проблемой в Финале. При формате 4x это не страшно. Мы подумаем, как лучше исключить такие моменты.

если в 4x у тебя больше очков, и остался оди противник можно смело валить себя… я предлагаю за friendly fire начислять количество очков в соответствии с правилами всем выжившим игрокам

09.11.2013 17:32:01
SladeThe

SladeThe

Команда Russian AI Cup

cNoNim

cNoNim

DataArt

если в 4x у тебя больше очков, и остался оди противник можно смело валить себя… я предлагаю за friendly fire начислять количество очков в соответствии с правилами всем выжившим игрокам

А если доработать пункт 4 и давать 100 балов убившему последнего противника или последнему выжившему? Тогда можно будет совершать суицид, если набрал на 100+ баллов больше. Это решит проблему боёв 2x* и даст некоторую гибкость в боях 4x*.

09.11.2013 17:43:56
SladeThe

SladeThe

Команда Russian AI Cup

Кстати идея делить баллы между живыми игроками тоже хороша.

09.11.2013 17:44:38
sender-mobile

sender-mobile

Москва

SladeThe

SladeThe

Команда Russian AI Cup

А если доработать пункт 4 и давать 100 балов убившему последнего противника или последнему выжившему? Тогда можно будет совершать суицид, если набрал на 100+ баллов больше. Это решит проблему боёв 2x* и даст некоторую гибкость в боях 4x*.

Логичнее было-бы в боях 1 на 1 присуждать победу выжившему, а если оба живы - то по очкам

09.11.2013 17:47:50
sender-mobile

sender-mobile

Москва

SladeThe

SladeThe

Команда Russian AI Cup

Кстати идея делить баллы между живыми игроками тоже хороша.

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

09.11.2013 17:55:09
amurushkin

amurushkin

ХНУРЭ (бывш. ХИРЭ, ХТУРЭ)

Как вариант за ФФ просто снимать очки, а для боев в финале действительно отдавать победу выжившему более логично. Ну а если оба живы тогда по очкам, а если очков одинаково тогда по идее надо давать обоим по 1 очку, типа ничья

09.11.2013 18:04:54
cNoNim

cNoNim

DataArt

+1 за вычитать

09.11.2013 18:05:02
SladeThe

SladeThe

Команда Russian AI Cup

cNoNim

cNoNim

DataArt

+1 за вычитать

Не хочется ничего вычитать, чтобы избежать отрицательных значений.

09.11.2013 18:08:57
cNoNim

cNoNim

DataArt

SladeThe

SladeThe

Команда Russian AI Cup

Не хочется ничего вычитать, чтобы избежать отрицательных значений.

а чем эти отрицательные значения плохи?

09.11.2013 18:10:31
vovo4ka

vovo4ka

Рязань

SladeThe

SladeThe

Команда Russian AI Cup

Похоже, что так.

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

09.11.2013 20:08:18
andrewjust100gm

Что-то не могу найти дату, когда будет сброс Песочницы. Не подскажете?

09.11.2013 20:12:36
amurushkin

amurushkin

ХНУРЭ (бывш. ХИРЭ, ХТУРЭ)

vovo4ka

vovo4ka

Рязань

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

дело не в том чтобы умереть одновременно, а в том чтобы не дать сопернику набить на себе очков

09.11.2013 20:22:39
amurushkin

amurushkin

ХНУРЭ (бывш. ХИРЭ, ХТУРЭ)

Что-то не могу найти дату, когда будет сброс Песочницы. Не подскажете?

Вообще я думал что сегодня

09.11.2013 20:22:56
cheeser

cheeser

Glowbyte

amurushkin

amurushkin

ХНУРЭ (бывш. ХИРЭ, ХТУРЭ)

Вообще я думал что сегодня

Вот эта цитата из новости про Бета-тестирование: Мы начинаем открытое бета-тестирование новой игры CodeTroopers 2013, которое продлится до 23:59 10 ноября… После завершения бета-теста рейтинг всех участников будет сброшен к начальному состоянию. :)

09.11.2013 20:26:56
amurushkin

amurushkin

ХНУРЭ (бывш. ХИРЭ, ХТУРЭ)

cheeser

cheeser

Glowbyte

Вот эта цитата из новости про Бета-тестирование: Мы начинаем открытое бета-тестирование новой игры CodeTroopers 2013, которое продлится до 23:59 10 ноября… После завершения бета-теста рейтинг всех участников будет сброшен к начальному состоянию. :)

Понятно просто почему то результаты уже подвели на сутки раньше

09.11.2013 20:35:13
admin

admin

Команда Russian AI Cup

amurushkin

amurushkin

ХНУРЭ (бывш. ХИРЭ, ХТУРЭ)

Понятно просто почему то результаты уже подвели на сутки раньше

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

09.11.2013 20:48:46
amurushkin

amurushkin

ХНУРЭ (бывш. ХИРЭ, ХТУРЭ)

admin

admin

Команда Russian AI Cup

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

Я надеюсь все новые карты появятся намного заранее от старта 1 раунда? не хотелось бы чтобы это было в последний день

09.11.2013 20:59:31
alladdin

alladdin

МФТИ (ГУ)

Кто-нибудь может подсказать, что означают оранжевые полосы в окне рейтинга в песочнице?

09.11.2013 22:04:51
Hohol

Hohol

Maxifier

alladdin

alladdin

МФТИ (ГУ)

Кто-нибудь может подсказать, что означают оранжевые полосы в окне рейтинга в песочнице?

Моменты посылок новых стратегий.

09.11.2013 22:06:35
alladdin

alladdin

МФТИ (ГУ)

Hohol

Hohol

Maxifier

Моменты посылок новых стратегий.

Спасибо!

09.11.2013 22:08:30
andrewjust100gm

А может, наоборот, сделаем карты-сюрпризы, которые мы увидим только после начала раунда?
Trollface

09.11.2013 22:13:07
SladeThe

SladeThe

Команда Russian AI Cup

А может, наоборот, сделаем карты-сюрпризы, которые мы увидим только после начала раунда?

Согласно правилам, администрация оставляет за собой право добавлять новые карты на протяжении всего соревнования, в том числе и непосредственно после начала какого-либо из раундов.

09.11.2013 22:47:30
SladeThe

SladeThe

Команда Russian AI Cup

Locky

Locky

Киев

«Если я бросаю на клетку со стенкой?» То бросаете ) прошу четкого ответа - при этом будет нанесено 60 дамаги соседним юнитам или граната просто пропадет? Т.к. я до этого проверял чтобы не кидать гранату в стенку, но всегда расчитыю на повреждение всоседнюю клетку. Сейчас я не могу понять - разрешив кидать в стенки я получу рассчитанный дамаг в -60 или нет?

Получите 60 урона.

09.11.2013 23:25:36
Locky

Locky

Киев

SladeThe

SladeThe

Команда Russian AI Cup

Получите 60 урона.

спасибо, т.к. єто важный момент. Я проводил аналогии с тем, что когда идешь в стенку, то АР тратятся, но эфекта нет. Еще один уточняющий вопрос. Допустим я стою а враг сидит, между нами стенка средней высоты, т.е. для стрельбы я его не вижу, если бы он стоял - я бы его видел. Соотвественно я могу туда кинуть гранату и он получит 80 дамаги, хотя вроде как клетка видима только если в ней стоят. Все правильно я понимаю?

09.11.2013 23:29:01
SladeThe

SladeThe

Команда Russian AI Cup

Locky

Locky

Киев

спасибо, т.к. єто важный момент. Я проводил аналогии с тем, что когда идешь в стенку, то АР тратятся, но эфекта нет. Еще один уточняющий вопрос. Допустим я стою а враг сидит, между нами стенка средней высоты, т.е. для стрельбы я его не вижу, если бы он стоял - я бы его видел. Соотвественно я могу туда кинуть гранату и он получит 80 дамаги, хотя вроде как клетка видима только если в ней стоят. Все правильно я понимаю?

Да

09.11.2013 23:31:09
SladeThe

SladeThe

Команда Russian AI Cup

Gvoin

Gvoin

Не могу

Можно ли как-то дебагать свою стратегию локально?? Интересно знать значение некоторых переменных. Но стратегия тестовая, не хочу отправлять на сервер и портить рейтинг.

Есть утилита Local runner. Также есть галочка «тестовая посылка».

09.11.2013 23:34:05
Gvoin

Gvoin

Не могу

Как именно дебагать, а не просто смотреть на результат? Я пишу код в CodeBlocks. При попытке скомпилировать стратегию там, вылезает куча ошибок, вроде D:\codetroopers\work\cpp-cgdk2\MyStrategy.o:MyStrategy.cpp|| undefined reference to model::World::getWidth() const'| D:\codetroopers\work\cpp-cgdk2\MyStrategy.o:MyStrategy.cpp|| undefined reference tomodel::World::getHeight() const’| D:\codetroopers\work\cpp-cgdk2\MyStrategy.o:MyStrategy.cpp|| undefined reference to model::World::getTroopers() const'| D:\codetroopers\work\cpp-cgdk2\MyStrategy.o:MyStrategy.cpp|| undefined reference tomodel::Trooper::isTeammate() const’| D:\codetroopers\work\cpp-cgdk2\MyStrategy.o:MyStrategy.cpp|| undefined reference to model::Trooper::getStance() const'| D:\codetroopers\work\cpp-cgdk2\MyStrategy.o:MyStrategy.cpp|| undefined reference tomodel::Unit::getY() const’| D:\codetroopers\work\cpp-cgdk2\MyStrategy.o:MyStrategy.cpp|| undefined reference to model::Unit::getX() const'| D:\codetroopers\work\cpp-cgdk2\MyStrategy.o:MyStrategy.cpp|| undefined reference tomodel::Unit::getY() const’| D:\codetroopers\work\cpp-cgdk2\MyStrategy.o:MyStrategy.cpp|| undefined reference to model::Unit::getX() const'| D:\codetroopers\work\cpp-cgdk2\MyStrategy.o:MyStrategy.cpp|| undefined reference tomodel::Trooper::getShootingRange() const’| D:\codetroopers\work\cpp-cgdk2\MyStrategy.o:MyStrategy.cpp|| undefined reference to model::World::isVisible(double, int, int, model::TrooperStance, int, int, model::TrooperStance) const'| D:\codetroopers\work\cpp-cgdk2\MyStrategy.o:MyStrategy.cpp|| undefined reference tomodel::World::getBonuses() const’| D:\codetroopers\work\cpp-cgdk2\MyStrategy.o:MyStrategy.cpp|| undefined reference to model::World::getCells() const'| D:\codetroopers\work\cpp-cgdk2\MyStrategy.o:MyStrategy.cpp|| undefined reference tomodel::World::getMoveIndex() const’| D:\codetroopers\work\cpp-cgdk2\MyStrategy.o:MyStrategy.cpp|| undefined reference to model::Trooper::isHoldingMedikit() const'| D:\codetroopers\work\cpp-cgdk2\MyStrategy.o:MyStrategy.cpp|| undefined reference tomodel::Trooper::getActionPoints() const’| D:\codetroopers\work\cpp-cgdk2\MyStrategy.o:MyStrategy.cpp|| undefined reference to model::Game::getMedikitUseCost() const'| D:\codetroopers\work\cpp-cgdk2\MyStrategy.o:MyStrategy.cpp|| undefined reference tomodel::Trooper::getHitpoints() const’| D:\codetroopers\work\cpp-cgdk2\MyStrategy.o:MyStrategy.cpp|| undefined reference to model::Game::getMedikitBonusHitpoints() const'| D:\codetroopers\work\cpp-cgdk2\MyStrategy.o:MyStrategy.cpp|| undefined reference tomodel::Trooper::getMaximalHitpoints() const’| D:\codetroopers\work\cpp-cgdk2\MyStrategy.o:MyStrategy.cpp|| undefined reference to model::Move::setAction(model::ActionType)'| D:\codetroopers\work\cpp-cgdk2\MyStrategy.o:MyStrategy.cpp|| undefined reference tomodel::Move::setDirection(model::Direction)‘| D:\codetroopers\work\cpp-cgdk2\MyStrategy.o:MyStrategy.cpp|| undefined reference to model::Trooper::getActionPoints() const'| D:\codetroopers\work\cpp-cgdk2\MyStrategy.o:MyStrategy.cpp|| undefined reference tomodel::Trooper::getShotCost() const’| D:\codetroopers\work\cpp-cgdk2\MyStrategy.o:MyStrategy.cpp|| undefined reference to model::Trooper::getStance() const'| D:\codetroopers\work\cpp-cgdk2\MyStrategy.o:MyStrategy.cpp|| undefined reference tomodel::Unit::getY() const’| D:\codetroopers\work\cpp-cgdk2\MyStrategy.o:MyStrategy.cpp|| undefined reference to model::Unit::getX() const'| D:\codetroopers\work\cpp-cgdk2\MyStrategy.o:MyStrategy.cpp|| undefined reference tomodel::Unit::getY() const’| D:\codetroopers\work\cpp-cgdk2\MyStrategy.o:MyStrategy.cpp|| undefined reference to model::Unit::getX() const'| D:\codetroopers\work\cpp-cgdk2\MyStrategy.o:MyStrategy.cpp|| undefined reference tomodel::Trooper::getShootingRange() const’| D:\codetroopers\work\cpp-cgdk2\MyStrategy.o:MyStrategy.cpp|| undefined reference to model::World::isVisible(double, int, int, model::TrooperStance, int, int, model::TrooperStance) const'| D:\codetroopers\work\cpp-cgdk2\MyStrategy.o:MyStrategy.cpp|| undefined reference tomodel::Trooper::getStance() const’| D:\codetroopers\work\cpp-cgdk2\MyStrategy.o:MyStrategy.cpp|| undefined reference to model::Unit::getY() const'| D:\codetroopers\work\cpp-cgdk2\MyStrategy.o:MyStrategy.cpp|| undefined reference tomodel::Unit::getX() const’| D:\codetroopers\work\cpp-cgdk2\MyStrategy.o:MyStrategy.cpp|| undefined reference to model::Unit::getY() const'| D:\codetroopers\work\cpp-cgdk2\MyStrategy.o:MyStrategy.cpp|| undefined reference tomodel::Unit::getX() const’| D:\codetroopers\work\cpp-cgdk2\MyStrategy.o:MyStrategy.cpp|| undefined reference to model::Trooper::getShootingRange() const'| D:\codetroopers\work\cpp-cgdk2\MyStrategy.o:MyStrategy.cpp|| undefined reference tomodel::World::isVisible(double, int, int, model::TrooperStance, int, int, model::TrooperStance) const’| D:\codetroopers\work\cpp-cgdk2\MyStrategy.o:MyStrategy.cpp|| undefined reference to model::Trooper::getStance() const'| D:\codetroopers\work\cpp-cgdk2\MyStrategy.o:MyStrategy.cpp|| undefined reference tomodel::Unit::getY() const’| D:\codetroopers\work\cpp-cgdk2\MyStrategy.o:MyStrategy.cpp|| undefined reference to model::Unit::getX() const'| D:\codetroopers\work\cpp-cgdk2\MyStrategy.o:MyStrategy.cpp|| undefined reference tomodel::Unit::getY() const’| D:\codetroopers\work\cpp-cgdk2\MyStrategy.o:MyStrategy.cpp|| undefined reference to model::Unit::getX() const'| D:\codetroopers\work\cpp-cgdk2\MyStrategy.o:MyStrategy.cpp|| undefined reference tomodel::Trooper::getShootingRange() const’| D:\codetroopers\work\cpp-cgdk2\MyStrategy.o:MyStrategy.cpp|| undefined reference to model::World::isVisible(double, int, int, model::TrooperStance, int, int, model::TrooperStance) const'| D:\codetroopers\work\cpp-cgdk2\MyStrategy.o:MyStrategy.cpp|| undefined reference tomodel::Trooper::getHitpoints() const’| D:\codetroopers\work\cpp-cgdk2\MyStrategy.o:MyStrategy.cpp|| undefined reference to model::Trooper::getHitpoints() const'| D:\codetroopers\work\cpp-cgdk2\MyStrategy.o:MyStrategy.cpp|| undefined reference tomodel::Unit::getId() const’| D:\codetroopers\work\cpp-cgdk2\MyStrategy.o:MyStrategy.cpp|| undefined reference to model::Unit::getId() const'| D:\codetroopers\work\cpp-cgdk2\MyStrategy.o:MyStrategy.cpp|| undefined reference tomodel::Trooper::getStance() const’| ||More errors follow but not being shown.| ||Edit the max errors limit in compiler options…| ||=== Build finished: 50 errors, 0 warnings (0 minutes, 3 seconds) ===|

10.11.2013 0:06:26
enot

enot

SPbSU

Пожалуйста! Сделайте возможность отмечать “друзей”, чтобы было удобнее следить за их результатами и создавать бои с ними.

10.11.2013 0:38:08
Hohol

Hohol

Maxifier

enot

enot

SPbSU

Пожалуйста! Сделайте возможность отмечать “друзей”, чтобы было удобнее следить за их результатами и создавать бои с ними.

Плюсую!

10.11.2013 9:15:29
rs-plus

rs-plus

Россия

enot

enot

SPbSU

Пожалуйста! Сделайте возможность отмечать “друзей”, чтобы было удобнее следить за их результатами и создавать бои с ними.

Я тоже за!

10.11.2013 10:30:24
danpetruk

А как выбрать игрока, которым будешь ходить?

А то при исполнении move() в MyStrategy какого игрока первым аргументом дадут, таким и ходить будешь

10.11.2013 11:04:55
amurushkin

amurushkin

ХНУРЭ (бывш. ХИРЭ, ХТУРЭ)

А как выбрать игрока, которым будешь ходить? А то при исполнении move() в MyStrategy какого игрока первым аргументом дадут, таким и ходить будешь

так и должно быть

10.11.2013 12:46:30
kalibr17

kalibr17

NEURON GRUP SRL

Привет всем, как установить с++? Какие программы для этого нужно? И если можно всё по пунктам, у меня win 7 64bit. Спасибо.

10.11.2013 13:26:11
erwins

erwins

Мегафон

Будут ли выложены все карты? для предварительно предпросчета расстояний? Можно ли получать имя карты?

10.11.2013 18:14:00
erwins

erwins

Мегафон

какое имя игрока передается? Можно в коде ориентироваться на имя игрока?

10.11.2013 18:15:56
BoxAtBox

BoxAtBox

Ростов-на-Дону

Лучше бы сделали генерируемые карты. А то на 90% победа будет зависеть от того насколько грамотно расставлены вейпоинты.

10.11.2013 18:32:15
iTest
kalibr17

kalibr17

NEURON GRUP SRL

Привет всем, как установить с++? Какие программы для этого нужно? И если можно всё по пунктам, у меня win 7 64bit. Спасибо.

Вот здесь много об этом.

10.11.2013 18:33:40
Snorch

Snorch

MIPT

Gvoin

Gvoin

Не могу

bool can_move_x = offset_x != 0 // Определяем необходимость и возможность движения && cells[self.x() + offset_x][self.y()] == FREE; // по оси X bool can_move_y = offset_y != 0 // Определяем необходимость и возможность движения && cells[self.x()][self.y() + offset_y] == FREE; // по оси Y if (can_move_x || can_move_y) { // Если мы можем двигаться хотя бы в одном направлении move.set_action(MOVE); // Устанавливаем действие “перемещение” …

Может ходите в неположенное место? вы же не один в поле=)

10.11.2013 19:11:53
Alchemist

Alchemist

НовГУ

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

10.11.2013 19:29:26
dmitriy.smirnov

dmitriy.smirnov

Wild Apricot

BoxAtBox

BoxAtBox

Ростов-на-Дону

Лучше бы сделали генерируемые карты. А то на 90% победа будет зависеть от того насколько грамотно расставлены вейпоинты.

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

10.11.2013 20:53:30
anarki

anarki

Иваново

как логгирование прикрутить?

10.11.2013 22:43:49
Orfest

Orfest

Google

Orfest

Orfest

Google

У объекта Trooper есть метод, возвращающий TrooperType?

Извиняюсь, уже нашёл. getType().

11.11.2013 0:13:54
rs-plus

rs-plus

Россия

А что если в локал раннер (можно и в плеер) добавить такую штуку, как “просмотр с туманом войны”, где ты можешь видеть только то, что видят твои солдаты? Очень поможет в отладке.

11.11.2013 19:49:17
GreenTea

GreenTea

ISDDesign

Еще бы неплохо, что-бы в локал ранере при наведению на клетку где то показывались ее коррдинаты!

11.11.2013 20:14:55
amurushkin

amurushkin

ХНУРЭ (бывш. ХИРЭ, ХТУРЭ)

А давайте еще питон через PyPy будем запускать? Так скажем скомпенсируем недостаток интерпретатора

11.11.2013 20:44:24
baobab

А поясните пожалуйста, объект world, принимаемый функцией mystrategy::move, что содержит? Полностью карту поля или только то, что видят трупер? Вектор со всеми труперами или только теми, что видны? Если с теми, что видны, зачем нужна функция isVisible? Если со всеми, могу ли я узнавать координаты невидимых юнитов? Что там вообще, есть ограничения по пользованию информацией об объекте world?

11.11.2013 22:36:48
MrDindows

MrDindows

Looksery

А поясните пожалуйста, объект world, принимаемый функцией mystrategy::move, что содержит? Полностью карту поля или только то, что видят трупер? Вектор со всеми труперами или только теми, что видны? Если с теми, что видны, зачем нужна функция isVisible? Если со всеми, могу ли я узнавать координаты невидимых юнитов? Что там вообще, есть ограничения по пользованию информацией об объекте world?

В документации всё написано. Только то, что видит текущий боец.

11.11.2013 22:48:33
cygwin

cygwin

Минск

GreenTea

GreenTea

ISDDesign

Еще бы неплохо, что-бы в локал ранере при наведению на клетку где то показывались ее коррдинаты!

Вот это обязательно! Да и вообще, чтобы локал раннер, в случае недопустимого действия выдавал четкое сообщение, как в тестовой посылке, ибо сейчас записывает как CRASHED и сиди да кури, где косяк.

11.11.2013 22:58:40
baobab
MrDindows

MrDindows

Looksery

В документации всё написано. Только то, что видит текущий боец.

Выходит, трупер не знает даже карту местности, если, как ты говоришь, ему передаётся world только с видимыми объектами?

11.11.2013 23:59:52
amurushkin

amurushkin

ХНУРЭ (бывш. ХИРЭ, ХТУРЭ)

Выходит, трупер не знает даже карту местности, если, как ты говоришь, ему передаётся world только с видимыми объектами?

Карту то как раз знает. Не знает где враги если их не видит.

12.11.2013 0:03:14
rs-plus

rs-plus

Россия

cygwin

cygwin

Минск

Вот это обязательно! Да и вообще, чтобы локал раннер, в случае недопустимого действия выдавал четкое сообщение, как в тестовой посылке, ибо сейчас записывает как CRASHED и сиди да кури, где косяк.

Помоему отладочная печать в таких случаях помогает.

12.11.2013 5:18:05
sasha.sochka

sasha.sochka

NTUU "KPI"

MikeMirzayanov

MikeMirzayanov

Команда Russian AI Cup

К участию приглашаются не только граждане РФ. На получение призов гражданство не влияет. В прошлом году среди победителей были участники из Украины и Беларуси.

Как я уже несколько раз писал в разных местах, к сожалению, никому из Украины (ну, как минимум 5 из 5 человек, с которыми я общался), кроме GreenTea (которому отдали футболку сразу, поскольку он выиграл один из главных призов), футболки не прислали.

13.11.2013 0:14:23
sasha.sochka

sasha.sochka

NTUU "KPI"

Исправьте меня, если это не так и вы ее все-же получили (в Украине).

13.11.2013 0:15:20
x-insane-x
asdForever

asdForever

Kaspi Bank

Ubuntu 12.04. Не запускается local runner. $ sh local-runner.sh local-runner.sh: 1: local-runner.sh: pushd: not found local-runner.sh: 3: local-runner.sh: popd: not found $ Exception in thread “main” java.lang.UnsupportedClassVersionError: LocalTestRunner : Unsupported major.minor version 51.0 at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:634) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) at java.net.URLClassLoader.defineClass(URLClassLoader.java:277) at java.net.URLClassLoader.access$000(URLClassLoader.java:73) at java.net.URLClassLoader$1.run(URLClassLoader.java:212) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:205) at java.lang.ClassLoader.loadClass(ClassLoader.java:321) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294) at java.lang.ClassLoader.loadClass(ClassLoader.java:266) Could not find the main class: LocalTestRunner. Program will exit.

Та же ОС. Все запускается с этой джавой http://www.webupd8.org/2012/01/install-oracle-java-jdk-7-in-ubuntu-via.html

13.11.2013 0:39:21
SladeThe

SladeThe

Команда Russian AI Cup

Та же ОС. Все запускается с этой джавой http://www.webupd8.org/2012/01/install-oracle-java-jdk-7-in-ubuntu-via.html

Видимо не этой.

java -version

13.11.2013 0:55:29
binary_cat

binary_cat

ООО "Визерра"

Мы можем получить список всех бойцов на карте при помощи world.getTroopers(). Какие из функций класса Unit и Trooper работают только для своих бойцов, какие только для видимых и какие для всех?

13.11.2013 15:37:26
rs-plus

rs-plus

Россия

binary_cat

binary_cat

ООО "Визерра"

Мы можем получить список всех бойцов на карте при помощи world.getTroopers(). Какие из функций класса Unit и Trooper работают только для своих бойцов, какие только для видимых и какие для всех?

worl.getTroopers() - только видимых (и своих и чужих). Для того чтобы определить своих можно использовать isTeammate().

13.11.2013 15:42:00
Bibr

Bibr

Майкоп

binary_cat

binary_cat

ООО "Визерра"

Мы можем получить список всех бойцов на карте при помощи world.getTroopers(). Какие из функций класса Unit и Trooper работают только для своих бойцов, какие только для видимых и какие для всех?

все функции работают)

13.11.2013 16:04:46
Megabyte

Megabyte

ООО Сибтел-крипто

Мистер смайл с нами? : )

13.11.2013 18:37:35
SladeThe

SladeThe

Команда Russian AI Cup

Ваши стратегии огорчают мистера Смайла :)

13.11.2013 20:23:23
-XraY-

-XraY-

СПбГУ

У меня возникла следующая проблема: при отправке решения выводится ТЛ во время второго хода. Но это же решение не получает подобных вердиктов при попытке отправить как тестовую посылку. Почему так? Как локально поймать эту ошибку?

13.11.2013 21:11:17
SillyAI

SillyAI

ВМК МГУ

Возникла проблема со сборкой проекта на MAC OS. Смог ли кто нибудь его собрать на маке? Похоже основные траблы с AF_PACKET

13.11.2013 21:27:08
SillyAI

SillyAI

ВМК МГУ

SillyAI

SillyAI

ВМК МГУ

Возникла проблема со сборкой проекта на MAC OS. Смог ли кто нибудь его собрать на маке? Похоже основные траблы с AF_PACKET

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

14.11.2013 11:04:38
SladeThe

SladeThe

Команда Russian AI Cup

SillyAI

SillyAI

ВМК МГУ

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

Шикарное описание проблемы. А язык пакета и другие подробности нам угадывать?

14.11.2013 11:15:15
SillyAI

SillyAI

ВМК МГУ

SladeThe

SladeThe

Команда Russian AI Cup

Шикарное описание проблемы. А язык пакета и другие подробности нам угадывать?

Язык пакета С/С++

Изначальные логи, если просто собирать без изменений

In file included from RemoteProcessClient.cpp:1: In file included from ./RemoteProcessClient.h:9: In file included from ./csimplesocket/ActiveSocket.h:46: ./csimplesocket/SimpleSocket.h:61:12: fatal error: ‘linux/if_packet.h’ file not found #include <linux/if_packet.h> ^ 1 error generated. In file included from Runner.cpp:1: In file included from ./Runner.h:8: In file included from ./RemoteProcessClient.h:9: In file included from ./csimplesocket/ActiveSocket.h:46: ./csimplesocket/SimpleSocket.h:61:12: fatal error: ‘linux/if_packet.h’ file not found #include <linux/if_packet.h> ^ 1 error generated. model/Trooper.cpp:104:13: error: use of undeclared identifier ‘exit’ exit(10030); ^ 1 error generated. In file included from csimplesocket/ActiveSocket.cpp:43: In file included from csimplesocket/ActiveSocket.h:46: csimplesocket/SimpleSocket.h:61:12: fatal error: ‘linux/if_packet.h’ file not found #include <linux/if_packet.h> ^ 1 error generated. In file included from csimplesocket/PassiveSocket.cpp:43: In file included from csimplesocket/PassiveSocket.h:45: In file included from csimplesocket/ActiveSocket.h:46: csimplesocket/SimpleSocket.h:61:12: fatal error: ‘linux/if_packet.h’ file not found #include <linux/if_packet.h> ^ 1 error generated. In file included from csimplesocket/SimpleSocket.cpp:43: csimplesocket/SimpleSocket.h:61:12: fatal error: ‘linux/if_packet.h’ file not found #include <linux/if_packet.h> ^ 1 error generated.

Т.е. проходит почему то по ifdef linux. Заменил linux на unix, добавил cstdlib для exit. Получаю следущие логи

csimplesocket/SimpleSocket.cpp:97:24: error: use of undeclared identifier ‘AF_PACKET’ m_nSocketDomain = AF_PACKET; ^ 1 error generated.

14.11.2013 11:20:54
cNoNim

cNoNim

DataArt

SladeThe

SladeThe

Команда Russian AI Cup

Шикарное описание проблемы. А язык пакета и другие подробности нам угадывать?

слушайте… раз уж я взялся поддерживать С++ пакет…

я знаю в чем проблема… предлагаю продолжить в переписке с admin

или как написать в личку вам

14.11.2013 11:30:49
cNoNim

cNoNim

DataArt

SillyAI

SillyAI

ВМК МГУ

Язык пакета С/С++ Изначальные логи, если просто собирать без изменений In file included from RemoteProcessClient.cpp:1: In file included from ./RemoteProcessClient.h:9: In file included from ./csimplesocket/ActiveSocket.h:46: ./csimplesocket/SimpleSocket.h:61:12: fatal error: ‘linux/if_packet.h’ file not found #include <linux/if_packet.h> ^ 1 error generated. In file included from Runner.cpp:1: In file included from ./Runner.h:8: In file included from ./RemoteProcessClient.h:9: In file included from ./csimplesocket/ActiveSocket.h:46: ./csimplesocket/SimpleSocket.h:61:12: fatal error: ‘linux/if_packet.h’ file not found #include <linux/if_packet.h> ^ 1 error generated. model/Trooper.cpp:104:13: error: use of undeclared identifier ‘exit’ exit(10030); ^ 1 error generated. In file included from csimplesocket/ActiveSocket.cpp:43: In file included from csimplesocket/ActiveSocket.h:46: csimplesocket/SimpleSocket.h:61:12: fatal error: ‘linux/if_packet.h’ file not found #include <linux/if_packet.h> ^ 1 error generated. In file included from csimplesocket/PassiveSocket.cpp:43: In file included from csimplesocket/PassiveSocket.h:45: In file included from csimplesocket/ActiveSocket.h:46: csimplesocket/SimpleSocket.h:61:12: fatal error: ‘linux/if_packet.h’ file not found #include <linux/if_packet.h> ^ 1 error generated. In file included from csimplesocket/SimpleSocket.cpp:43: csimplesocket/SimpleSocket.h:61:12: fatal error: ‘linux/if_packet.h’ file not found #include <linux/if_packet.h> ^ 1 error generated. …

В качестве временного решения

попробуйте в compile-g++11.sh вообще убрать флаг -D_LINUX

14.11.2013 11:35:18
SillyAI

SillyAI

ВМК МГУ

cNoNim

cNoNim

DataArt

В качестве временного решения попробуйте в compile-g++11.sh вообще убрать флаг -D_LINUX

Теперь компилится с таким логом

ld: warning: option -s is obsolete and being ignored ld: library not found for -lcrt0.o clang: error: linker command failed with exit code 1 (use -v to see invocation)

14.11.2013 11:55:51
cNoNim

cNoNim

DataArt

SillyAI

SillyAI

ВМК МГУ

Теперь компилится с таким логом ld: warning: option -s is obsolete and being ignored ld: library not found for -lcrt0.o clang: error: linker command failed with exit code 1 (use -v to see invocation)

хм… а вообще у вас hello world на MacOS компилируется?

на MacOS как и на прочих Unix походу уже дефолтным компилятором стоит clang… надо тогда еще и clang’ом отдельно тестить…

щас задам вопрос организатором… может они на сервере за одно на clang перейдут

14.11.2013 12:04:58
cNoNim

cNoNim

DataArt

SillyAI

SillyAI

ВМК МГУ

Теперь компилится с таким логом ld: warning: option -s is obsolete and being ignored ld: library not found for -lcrt0.o clang: error: linker command failed with exit code 1 (use -v to see invocation)

вот ответ на вопрос

http://stackoverflow.com/questions/3801011/ld-library-not-found-for-lcrt0-o-on-osx-10-6-with-gcc-clang-static-flag

в MacOS под clang не будет собираться с флагом -static

уберите еще и его

14.11.2013 12:09:49
SladeThe

SladeThe

Команда Russian AI Cup

cNoNim

cNoNim

DataArt

слушайте… раз уж я взялся поддерживать С++ пакет… я знаю в чем проблема… предлагаю продолжить в переписке с admin или как написать в личку вам

В личку никак. Пишите администрации, и я это увижу.

14.11.2013 12:45:50
SladeThe

SladeThe

Команда Russian AI Cup

cNoNim

cNoNim

DataArt

а то что я отвечаю admin’у видите?

Да.

14.11.2013 12:50:47
cygwin

cygwin

Минск

Как сменить поправку во времени на сайте (часовой пояс).. На сайте спешат на 1 час. Видимо стоит МСК. Может запилите?

14.11.2013 15:48:18
amurushkin

amurushkin

ХНУРЭ (бывш. ХИРЭ, ХТУРЭ)

cygwin

cygwin

Минск

Как сменить поправку во времени на сайте (часовой пояс).. На сайте спешат на 1 час. Видимо стоит МСК. Может запилите?

потом будут путаницы со временем старта раундов. в правилах написано что в 0 часов допустим а кто то будет это трактовать что это ноль часов в его временной зоне. думаю как есть сейчас вполне правильно.

14.11.2013 15:50:21
cygwin

cygwin

Минск

amurushkin

amurushkin

ХНУРЭ (бывш. ХИРЭ, ХТУРЭ)

потом будут путаницы со временем старта раундов. в правилах написано что в 0 часов допустим а кто то будет это трактовать что это ноль часов в его временной зоне. думаю как есть сейчас вполне правильно.

Ну так указать в правилах по МСК. Да и вообще опционально сделать - никаких проблем. Я, например, вечно путаюсь когда был бой. Думаю не я один. А если у кого-то +6 с МСК?

14.11.2013 16:00:57
amurushkin

amurushkin

ХНУРЭ (бывш. ХИРЭ, ХТУРЭ)

cygwin

cygwin

Минск

Ну так указать в правилах по МСК. Да и вообще опционально сделать - никаких проблем. Я, например, вечно путаюсь когда был бой. Думаю не я один. А если у кого-то +6 с МСК?

Ну я уже привык. У меня еще и на 2 минуты расходится, поэтому я и часы и минуты вычитаю ))

14.11.2013 16:03:00
cygwin

cygwin

Минск

amurushkin

amurushkin

ХНУРЭ (бывш. ХИРЭ, ХТУРЭ)

Ну я уже привык. У меня еще и на 2 минуты расходится, поэтому я и часы и минуты вычитаю ))

О да, точно, еще и по минутам не сходятся, если +1 час - терпимо, то минуты - бесят :)

14.11.2013 16:05:13
Remdev

Remdev

МГТУ Станкин

Почему участвовать можно лишь с 18 лет?

14.11.2013 16:32:01
amurushkin

amurushkin

ХНУРЭ (бывш. ХИРЭ, ХТУРЭ)

Remdev

Remdev

МГТУ Станкин

Почему участвовать можно лишь с 18 лет?

Потому что лицо не достигшее 18 лет не сможет получить приз в случае победы, думаю с этим связано

14.11.2013 16:39:25
Ramp

Ramp

Рыбинск

Как узнать в чем причина ошибки верификации?

14.11.2013 17:14:02
cygwin

cygwin

Минск

Ramp

Ramp

Рыбинск

Как узнать в чем причина ошибки верификации?

На вопросик нажми.

14.11.2013 17:31:16
kvoronov

kvoronov

ОНУ (бывш. ОГУ) им. Мечникова

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

14.11.2013 19:21:55
qwert

For I:=0 to xx do For J:=0 to yy do If map[i,j]=FREE_CELL then там можно ходить else нельзя ходить

не работает, почему?

14.11.2013 23:30:51
kipar

kipar

ООО Доминанта

For I:=0 to xx do For J:=0 to yy do If map[i,j]=FREE_CELL then там можно ходить else нельзя ходить не работает, почему?

во-первых от 0 до xx-1 (и от 0 до yy-1), во-вторых там не учитваются юниты (из массива world.GetTroopers), из-за которых на клетку тоже нельзя будет пойти.

15.11.2013 0:17:02
qwert

Объясните, как отлаживать мою программу. Я, можно сказать, пишу в слепую.

15.11.2013 14:30:07
albynos

albynos

Ростов-На-Дону

Объясните, как отлаживать мою программу. Я, можно сказать, пишу в слепую.

Используй localRunner, запущенный на машине со средой разработки, в среде в режиме отладки запускаешь проект из примера к своему языку. Потом допиливаешь. При каждом запуске локалраннер надо перезапускать. Если технически - локалраннер запускает сервер и ожидает соединения от клиента со стратегией.

15.11.2013 14:41:35
Selat

  1. Гарантируется ли возможность прохода бойцов одного игрока друг к другу?
  2. Гарантируется ли возможность прохода бойцов разных игроков друг к другу?
  3. getCells() - по координатам юнита/бонуса будет FREE?

15.11.2013 21:20:23
Nikita_Bozhkov

Подскажите пожалуйста, как увидеть ошибки компиляции программы при локальном запуске? Компилирую под Linux запуском скрипта compile-g++.sh. Никаких ошибок или предупреждений в терминале не выводит, но исполняемый файл не создается.

15.11.2013 22:11:26
Nikita_Bozhkov

Подскажите пожалуйста, как увидеть ошибки компиляции программы при локальном запуске? Компилирую под Linux запуском скрипта compile-g++.sh. Никаких ошибок или предупреждений в терминале не выводит, но исполняемый файл не создается.

Все, нашел. Не заметил файл, куда лог записывался. И правкой скрипта вернул вывод в терминал:)

15.11.2013 22:16:07
SladeThe

SladeThe

Команда Russian AI Cup

Гарантируется ли возможность прохода бойцов одного игрока друг к другу?     Гарантируется ли возможность прохода бойцов разных игроков друг к другу?     getCells() - по координатам юнита/бонуса будет FREE?  

Да, да, да.

16.11.2013 0:46:00
cNoNim

cNoNim

DataArt

iero

iero

Опенсофт

Можно ли как-то однозначно определить сколько у меня в команде живых бойцов? Можно через world.troopers и trooper.teammate но нет гарантии что юнит видет всех своих…

юнит всегда видит своих

16.11.2013 1:55:35
doubledeath

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

17.11.2013 5:41:01
spacistor

spacistor

Москва

doubledeath, они на кой то хрен для каждого бойца создают новый экзампляр класса MyStrategy. Единственный вариант - хранить общие данные в каком-то другом классе-синглтоне.

17.11.2013 8:41:22
Headmast

Headmast

Воронежский ГУ

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

Либо использовать статические переменные.

17.11.2013 10:27:35
Bibr

Bibr

Майкоп

Пробую отослать zip файл первый раз. До этого использовал только один файл MyStrategy.java в зипфайле 3файла: MyStrategy.java aaa.java bbb.java

В aaa и bbb простые перечисления (enum), которые использую в MyStrategy. не принимает с ошибкой компиляции. Хотя в локал раннере отрабатывает.

Что я делаю не так?

17.11.2013 16:48:01
manonedge

Всем привет! А как-то можно писать в лог, который идет отдельным окном? для отладки, например.

17.11.2013 19:30:07
Megabyte

Megabyte

ООО Сибтел-крипто

Всем привет! А как-то можно писать в лог, который идет отдельным окном? для отладки, например.

Пишив stdout. А можно создать окно и выводить в него отладочную инфу о карте, юнитах, в виде цветных клеток и цифр.

17.11.2013 20:11:27
skrytnaya

skrytnaya

TouchSoft

В Беларусь футболка дошла. :)

17.11.2013 23:53:31
skrytnaya

skrytnaya

TouchSoft

sasha.sochka

sasha.sochka

NTUU "KPI"

Как я уже несколько раз писал в разных местах, к сожалению, никому из Украины (ну, как минимум 5 из 5 человек, с которыми я общался), кроме GreenTea (которому отдали футболку сразу, поскольку он выиграл один из главных призов), футболки не прислали.

В Беларусь футболка дошла в прошлом году :)

17.11.2013 23:55:27
sasha.sochka

sasha.sochka

NTUU "KPI"

skrytnaya

skrytnaya

TouchSoft

В Беларусь футболка дошла в прошлом году :)

Как я знаю, в большом масштабе эта проблема касается только Украины.

18.11.2013 0:07:07
safoex

safoex

Долгопрудный

Откуда непонятные переполнения по памяти? с чем это может быть связано?

18.11.2013 2:44:48
safoex

safoex

Долгопрудный

safoex

safoex

Долгопрудный

Откуда непонятные переполнения по памяти? с чем это может быть связано?

C++11

18.11.2013 2:44:59
tankovod

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

world().getTroopers() возвращает копий обьектов. По теме http://russianaicup.ru/forum/index.php?topic=23.msg76#msg76

18.11.2013 9:15:05
Bibr

Bibr

Майкоп

Интересно бы добавить на странице пользователя рядом с графиком максимальное значение рейтинга и места.

18.11.2013 10:01:18
SladeThe

SladeThe

Команда Russian AI Cup

skrytnaya

skrytnaya

TouchSoft

В Беларусь футболка дошла. :)

Преимущества Таможенного союза :)

18.11.2013 12:11:39
Lord_F

Lord_F

Гимназия №1

cNoNim

cNoNim

DataArt

юнит всегда видит своих

А где это написано?
Просто это ж замечательно! Т.е. даже если союзник недосягаем, getTroopers его возвратит?

18.11.2013 12:32:44
cNoNim

cNoNim

DataArt

Lord_F

Lord_F

Гимназия №1

А где это написано? Просто это ж замечательно! Т.е. даже если союзник недосягаем, getTroopers его возвратит?

в правилах кажись

18.11.2013 12:36:17
Lord_F

Lord_F

Гимназия №1

cNoNim

cNoNim

DataArt

в правилах кажись

Ну да, видимо в правилах, но только не в описании метода getTroopers.

18.11.2013 12:42:49
alexandr1700

alexandr1700

Киев

как использовать isTeammate(); (Pascal) и вообще, какие типы данных надо использовать для каждого метода, где написано? (всё тот же Pascal)

18.11.2013 13:10:13
andrey.chernov

andrey.chernov

Сергиев Посад

“каждая стратегия запускается в отдельном процессе, при этом для каждого бойца создается отдельный экземпляр класса MyStrategy, и поэтому для обмена информацией между бойцами вы можете использовать статические поля или глобальные переменные” Это в каком месте нужно что-то объявить, что бы боец А знал то, что знает боец Б ?

using System; using Com.CodeGame.CodeTroopers2013.DevKit.CSharpCgdk.Model;

namespace Com.CodeGame.CodeTroopers2013.DevKit.CSharpCgdk {

public sealed class MyStrategy : IStrategy 

{ //я объявляю здесь и каждый боец помнит только свои действия }

18.11.2013 13:47:58
MrDindows

MrDindows

Looksery

andrey.chernov

andrey.chernov

Сергиев Посад

“каждая стратегия запускается в отдельном процессе, при этом для каждого бойца создается отдельный экземпляр класса MyStrategy, и поэтому для обмена информацией между бойцами вы можете использовать статические поля или глобальные переменные” Это в каком месте нужно что-то объявить, что бы боец А знал то, что знает боец Б ? …

юзай static

18.11.2013 14:05:24
iero

iero

Опенсофт

andrey.chernov

andrey.chernov

Сергиев Посад

“каждая стратегия запускается в отдельном процессе, при этом для каждого бойца создается отдельный экземпляр класса MyStrategy, и поэтому для обмена информацией между бойцами вы можете использовать статические поля или глобальные переменные” Это в каком месте нужно что-то объявить, что бы боец А знал то, что знает боец Б ? …

Как вариант заюзать синглтон

18.11.2013 14:21:52
cNoNim

cNoNim

DataArt

Lord_F

Lord_F

Гимназия №1

Ну да, видимо в правилах, но только не в описании метода getTroopers.

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

юнитами

18.11.2013 14:36:12
Lord_F

Lord_F

Гимназия №1

cNoNim

cNoNim

DataArt

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

А, только осознал, что всеми юнитами, спасибо. о_О

18.11.2013 15:03:56
andrey.chernov

andrey.chernov

Сергиев Посад

благодарю :)

18.11.2013 15:41:54
Blowy

Blowy

Полоцк

Доброе Время Суток . Подскажите как обращаться к значениям переменных из прошлого хода в текущем.

19.11.2013 23:07:48
Headmast

Headmast

Воронежский ГУ

Blowy

Blowy

Полоцк

Доброе Время Суток . Подскажите как обращаться к значениям переменных из прошлого хода в текущем.

Записывай их перед завершением хода в статический массив, в следующем ходе читай из массива.

19.11.2013 23:26:16
unconnected

unconnected

Санкт-Петербург

cNoNim

cNoNim

DataArt

юнит всегда видит своих

World.Troopers “видит” всех своих и всех чужих, находящихся в видимости своих.

20.11.2013 6:56:19
Hamster

Hamster

Мелитополь

Сделайте пожалуйста в просмотрщике боя информацию о версии бота. Когда сравниваешь новую версию стратегии со старой по Игрок(1) Игрок(2)… Игрок(4) ничего не понятно. Лучше б вместо номера игрока писалась версия стратегии

20.11.2013 14:17:44
nutic

nutic

Auctionata

Очень хотелось бы фильтрацию боев по номеру стратегии и возможности быстрого отката к предыдущей стратегии (сейчас руками выкачиваю прошлую версию и заливаю ее как следующую).

20.11.2013 14:35:37
Hamster

Hamster

Мелитополь

sasha.sochka

sasha.sochka

NTUU "KPI"

Как я знаю, в большом масштабе эта проблема касается только Украины.

Подтверждаю, мне (на Украину) в прошлом чемпионате не пришла.

21.11.2013 0:47:03