Open AI Championship

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

Project

Sandbox

Round 1

Round 2

Finals

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

Recent comments

4 september 19:00: risi wrote comment on post Закрытие Russian AI Cup 2013
28 february 02:59: puk wrote comment on post Закрытие Russian AI Cup 2013
26 february 21:12: amurushkin wrote comment on post Закрытие Russian AI Cup 2013
26 february 13:17: alevlaber wrote comment on post Закрытие Russian AI Cup 2013
20 february 17:33: Megabyte wrote comment on post Закрытие Russian AI Cup 2013
20 february 10:10: plomovtsev wrote comment on post Закрытие Russian AI Cup 2013
20 february 09:28: aleex wrote comment on post Закрытие Russian AI Cup 2013
18 february 23:13: santa324 wrote comment on post Закрытие Russian AI Cup 2013
17 february 14:43: m16a wrote comment on post Закрытие Russian AI Cup 2013
17 february 06:26: PAX wrote comment on post Закрытие Russian AI Cup 2013

VK Group

 

Ниже мы расскажем, как присоединиться к 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

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

Nov 4, 2013 1:40:00 AM
Fanter

Fanter

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

EvAn

EvAn

КубГТУ

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

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

Nov 4, 2013 1:44:21 AM
EvAn

EvAn

КубГТУ

Fanter

Fanter

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

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

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

Nov 4, 2013 1:49:28 AM
SladeThe

SladeThe

Команда Russian AI Cup

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

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

Nov 4, 2013 2:05:38 AM
SladeThe

SladeThe

Команда Russian AI Cup

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

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

Nov 4, 2013 2:08:34 AM
MikeMirzayanov

MikeMirzayanov

Команда Russian AI Cup

GreenTea

GreenTea

ISDDesign

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

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

Nov 4, 2013 2:21:02 AM
GreenTea

GreenTea

ISDDesign

MikeMirzayanov

MikeMirzayanov

Команда Russian AI Cup

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

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

Nov 4, 2013 2:25:15 AM
GreenTea

GreenTea

ISDDesign

GreenTea

GreenTea

ISDDesign

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

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

Nov 4, 2013 2:30:02 AM
amurushkin

amurushkin

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

amurushkin

amurushkin

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

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

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

Nov 4, 2013 7:04:12 AM
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) или вообще избавиться от этой функции. Лучше сравнивать квадраты длин, тем более они будут целыми, не будет проблем с округлением.

Nov 4, 2013 8:52:10 AM
Angle

Angle

НИИ

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

Nov 4, 2013 10:40:18 AM
amurushkin

amurushkin

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

shutwo

shutwo

ИрГУПС

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

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

Nov 4, 2013 11:00:51 AM
SladeThe

SladeThe

Команда Russian AI Cup

amurushkin

amurushkin

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

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

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

Nov 4, 2013 1:21:41 PM
SladeThe

SladeThe

Команда Russian AI Cup

malyshev.e.s

malyshev.e.s

ТОО "Аманат"

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

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

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

Nov 4, 2013 2:30:11 PM
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 элементов (только видимые объекты) незначителен.

Nov 4, 2013 2:33:32 PM
SladeThe

SladeThe

Команда Russian AI Cup

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

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

Nov 4, 2013 2:36:03 PM
Locky

Locky

Киев

Locky

Locky

Киев

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

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

Nov 4, 2013 3:43:58 PM
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’ов.

Nov 4, 2013 5:40:27 PM
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 в дебагере выглядит очень странновато…

Nov 4, 2013 6:09:30 PM
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.

Nov 4, 2013 7:12:43 PM
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.

Nov 4, 2013 7:23:25 PM
imbeat

imbeat

МИЭТ

Angle

Angle

НИИ

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

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

Nov 4, 2013 7:39:05 PM
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.

Nov 4, 2013 7:47:14 PM
SladeThe

SladeThe

Команда Russian AI Cup

Dimon_II

Dimon_II

ProFIX

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

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

Nov 4, 2013 8:32:00 PM
ViktorM

ViktorM

NVidia

imbeat

imbeat

МИЭТ

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

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

Nov 4, 2013 8:42:49 PM
SladeThe

SladeThe

Команда Russian AI Cup

serlis

serlis

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

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

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

Nov 4, 2013 11:55:47 PM
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 , языковой пакет все компилирует без ошибок, а при попытке отправить стратегию на сервер получаю ошибку компиляции Сейчас добавлю скриншот ошибки.

Nov 5, 2013 1:11:04 AM
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

Nov 5, 2013 1:14:33 AM
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++ был переработан. Смотрите изменения в посте.

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

Nov 5, 2013 1:22:02 AM
altushift

altushift

Украина

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

Nov 5, 2013 1:33:29 AM
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;                                             // Завершаем ход

} …

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

Nov 5, 2013 2:07:46 AM
andrewjust100gm

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

Nov 5, 2013 2:14:46 AM
Gvoin

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

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

Nov 5, 2013 2:18:20 AM
chianti

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

Nov 5, 2013 10:11:42 AM
imbeat

imbeat

МИЭТ

xelai

xelai

Когалым

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

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

Nov 5, 2013 11:24:12 AM
ViktorM

ViktorM

NVidia

altushift

altushift

Украина

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

+1

Nov 5, 2013 12:12:20 PM
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’

Nov 5, 2013 12:30:28 PM
Gvoin

Gvoin

Киев

Can't normalize html.

Nov 5, 2013 1:05:48 PM
amurushkin

amurushkin

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

ViktorM

ViktorM

NVidia

+1

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

Nov 5, 2013 1:08:02 PM
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(), который возвращает урон солдата в текущей стойке.

Nov 5, 2013 1:10:26 PM
ViktorM

ViktorM

NVidia

fefer.ivan

fefer.ivan

Команда Russian AI Cup

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

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

Nov 5, 2013 1:16:19 PM
ViktorM

ViktorM

NVidia

amurushkin

amurushkin

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

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

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

Nov 5, 2013 1:18:13 PM
fefer.ivan

fefer.ivan

Команда Russian AI Cup

ViktorM

ViktorM

NVidia

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

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

Nov 5, 2013 1:24:57 PM
Gvoin

Gvoin

Киев

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


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

Nov 5, 2013 1:28:40 PM
Gvoin

Gvoin

Киев

fefer.ivan

fefer.ivan

Команда Russian AI Cup

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

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

Nov 5, 2013 1:30:14 PM
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";
}

Nov 5, 2013 1:45:40 PM
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 или внутри?

Nov 5, 2013 1:48:53 PM
fefer.ivan

fefer.ivan

Команда Russian AI Cup

Gvoin

Gvoin

Киев

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

  • Класть.

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

Nov 5, 2013 1:52:06 PM
Gvoin

Gvoin

Киев

fefer.ivan

fefer.ivan

Команда Russian AI Cup

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

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

Nov 5, 2013 1:55:24 PM
Gvoin

Gvoin

Киев

fefer.ivan

fefer.ivan

Команда Russian AI Cup

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

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

Nov 5, 2013 1:59:11 PM
amurushkin

amurushkin

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

ViktorM

ViktorM

NVidia

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

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

Nov 5, 2013 2:00:29 PM
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;


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

Nov 5, 2013 2:12:53 PM
imbeat

imbeat

МИЭТ

ViktorM

ViktorM

NVidia

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

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

Nov 5, 2013 2:32:44 PM
andrewjust100gm

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

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

Nov 5, 2013 4:07:13 PM
imbeat

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

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

Nov 5, 2013 4:23:37 PM
ViktorM

ViktorM

NVidia

imbeat

imbeat

МИЭТ

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

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

Nov 5, 2013 4:49:15 PM
Gvoin

Gvoin

Киев

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

Nov 5, 2013 5:17:34 PM
amurushkin

amurushkin

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

Gvoin

Gvoin

Киев

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

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

Nov 5, 2013 6:32:46 PM
shutwo

shutwo

ИрГУПС

amurushkin

amurushkin

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

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

Будет FREE

Nov 5, 2013 6:46:43 PM
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.

Nov 5, 2013 9:29:15 PM
admin

admin

Команда Russian AI Cup

Angle

Angle

НИИ

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

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

Nov 5, 2013 9:32:53 PM
imbeat

imbeat

МИЭТ

admin

admin

Команда Russian AI Cup

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

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

Nov 5, 2013 9:55:27 PM
SladeThe

SladeThe

Команда Russian AI Cup

serlis

serlis

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

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

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

Nov 5, 2013 10:07:19 PM
kipar

kipar

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

Shatim

Shatim

Devexperts

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

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

Nov 6, 2013 11:26:15 AM
SladeThe

SladeThe

Команда Russian AI Cup

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

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

Nov 6, 2013 12:31:28 PM
SladeThe

SladeThe

Команда Russian AI Cup

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

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

Nov 6, 2013 3:50:28 PM
SladeThe

SladeThe

Команда Russian AI Cup

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

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

Nov 6, 2013 3:56:03 PM
amurushkin

amurushkin

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

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

Nov 6, 2013 4:45:02 PM
SladeThe

SladeThe

Команда Russian AI Cup

amurushkin

amurushkin

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

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

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

Nov 6, 2013 5:06:26 PM
amurushkin

amurushkin

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

SladeThe

SladeThe

Команда Russian AI Cup

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

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

Nov 6, 2013 5:20:32 PM
shutwo

shutwo

ИрГУПС

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

Nov 6, 2013 5:50:29 PM
_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)

Nov 6, 2013 7:44:29 PM
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?) …

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

Nov 6, 2013 8:34:03 PM
_JG_

_JG_

ТОО "Аманат"

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

Nov 6, 2013 9:33:10 PM
Frifon

Frifon

Mail.Ru

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

Nov 6, 2013 9:59:41 PM
Gvoin

Gvoin

Киев

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

Nov 6, 2013 10:08:42 PM
Frifon

Frifon

Mail.Ru

Gvoin

Gvoin

Киев

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

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

Nov 6, 2013 10:19:21 PM
GreenTea

GreenTea

ISDDesign

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

Nov 6, 2013 11:01:26 PM
cheeser

cheeser

Glowbyte

GreenTea

GreenTea

ISDDesign

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

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

Nov 6, 2013 11:32:12 PM
GreenTea

GreenTea

ISDDesign

cheeser

cheeser

Glowbyte

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

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

Nov 6, 2013 11:36:08 PM
GreenTea

GreenTea

ISDDesign

cheeser

cheeser

Glowbyte

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

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

Nov 6, 2013 11:37:47 PM
GreenTea

GreenTea

ISDDesign

GreenTea

GreenTea

ISDDesign

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

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

Nov 6, 2013 11:38:49 PM
SladeThe

SladeThe

Команда Russian AI Cup

GreenTea

GreenTea

ISDDesign

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

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

Nov 6, 2013 11:48:15 PM
serlis

serlis

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

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

Nov 7, 2013 5:31:48 PM
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)]. …

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

Nov 7, 2013 7:54:18 PM
GreenTea

GreenTea

ISDDesign

SladeThe

SladeThe

Команда Russian AI Cup

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

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

Nov 7, 2013 8:07:29 PM
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)]. …

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

Nov 7, 2013 8:07:47 PM
GreenTea

GreenTea

ISDDesign

amurushkin

amurushkin

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

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

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

Nov 7, 2013 8:18:12 PM
SladeThe

SladeThe

Команда Russian AI Cup

amurushkin

amurushkin

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

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

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

Nov 7, 2013 8:23:38 PM
imbeat

imbeat

МИЭТ

SladeThe

SladeThe

Команда Russian AI Cup

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

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

Nov 7, 2013 9:54:54 PM
SladeThe

SladeThe

Команда Russian AI Cup

imbeat

imbeat

МИЭТ

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

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

Nov 7, 2013 10:01:05 PM
chianti

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

Nov 8, 2013 1:29:48 AM
amurushkin

amurushkin

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

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

Nov 8, 2013 3:45:41 AM
admin

admin

Команда Russian AI Cup

amurushkin

amurushkin

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

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

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

Nov 8, 2013 3:40:54 PM
Asmadei

Asmadei

Калининград

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

Nov 8, 2013 5:34:14 PM
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 какой ошибкой? может за границы поля выходит?

Nov 8, 2013 6:07:30 PM
Asmadei

Asmadei

Калининград

amurushkin

amurushkin

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

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

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

Nov 8, 2013 7:46:23 PM
rattleback

rattleback

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

Asmadei

Asmadei

Калининград

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

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

Nov 8, 2013 7:53:25 PM
amurushkin

amurushkin

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

Asmadei

Asmadei

Калининград

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

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

Nov 8, 2013 7:53:58 PM
rs-plus

rs-plus

Россия

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

Nov 8, 2013 7:54:17 PM
Asmadei

Asmadei

Калининград

rs-plus

rs-plus

Россия

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

Попробуй Shoot

Nov 8, 2013 7:56:00 PM
rs-plus

rs-plus

Россия

Asmadei

Asmadei

Калининград

Попробуй Shoot

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

Nov 8, 2013 8:03:59 PM
amurushkin

amurushkin

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

rs-plus

rs-plus

Россия

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

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

Nov 8, 2013 8:04:17 PM
rs-plus

rs-plus

Россия

amurushkin

amurushkin

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

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

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

Nov 8, 2013 8:12:39 PM
rattleback

rattleback

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

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

Nov 8, 2013 8:40:13 PM
kipar

kipar

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

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

Nov 8, 2013 8:45:00 PM
rattleback

rattleback

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

rattleback

rattleback

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

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

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

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

Nov 8, 2013 8:55:11 PM
Hohol

Hohol

Maxifier

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

Nov 8, 2013 9:44:40 PM
rs-plus

rs-plus

Россия

kipar

kipar

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

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

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

Nov 8, 2013 9:48:03 PM
Kitsu

Kitsu

спбгпу, ииту

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

Nov 8, 2013 11:58:43 PM
vovo4ka

vovo4ka

Рязань

Kitsu

Kitsu

спбгпу, ииту

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

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

Nov 9, 2013 1:09:13 AM
Kitsu

Kitsu

спбгпу, ииту

vovo4ka

vovo4ka

Рязань

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

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

Nov 9, 2013 1:10:35 AM
rs-plus

rs-plus

Россия

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

Nov 9, 2013 12:51:08 PM
alexanderk23

alexanderk23

КубГУ

rs-plus

rs-plus

Россия

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

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

Nov 9, 2013 12:57:04 PM
SladeThe

SladeThe

Команда Russian AI Cup

erwins

erwins

Мегафон

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

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

Nov 9, 2013 3:39:10 PM
SladeThe

SladeThe

Команда Russian AI Cup

erwins

erwins

Мегафон

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

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

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

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

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

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

Nov 9, 2013 3:41:40 PM
SladeThe

SladeThe

Команда Russian AI Cup

erwins

erwins

Мегафон

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

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

Nov 9, 2013 4:22:16 PM
SladeThe

SladeThe

Команда Russian AI Cup

SladeThe

SladeThe

Команда Russian AI Cup

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

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

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

Nov 9, 2013 4:26:36 PM
erwins

erwins

Мегафон

SladeThe

SladeThe

Команда Russian AI Cup

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

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

Nov 9, 2013 4:42:49 PM
cNoNim

cNoNim

DataArt

SladeThe

SladeThe

Команда Russian AI Cup

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

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

Nov 9, 2013 5:32:01 PM
SladeThe

SladeThe

Команда Russian AI Cup

cNoNim

cNoNim

DataArt

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

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

Nov 9, 2013 5:43:56 PM
SladeThe

SladeThe

Команда Russian AI Cup

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

Nov 9, 2013 5:44:38 PM
sender-mobile

sender-mobile

Москва

SladeThe

SladeThe

Команда Russian AI Cup

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

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

Nov 9, 2013 5:47:50 PM
sender-mobile

sender-mobile

Москва

SladeThe

SladeThe

Команда Russian AI Cup

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

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

Nov 9, 2013 5:55:09 PM
amurushkin

amurushkin

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

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

Nov 9, 2013 6:04:54 PM
cNoNim

cNoNim

DataArt

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

Nov 9, 2013 6:05:02 PM
SladeThe

SladeThe

Команда Russian AI Cup

cNoNim

cNoNim

DataArt

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

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

Nov 9, 2013 6:08:57 PM
cNoNim

cNoNim

DataArt

SladeThe

SladeThe

Команда Russian AI Cup

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

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

Nov 9, 2013 6:10:31 PM
vovo4ka

vovo4ka

Рязань

SladeThe

SladeThe

Команда Russian AI Cup

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

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

Nov 9, 2013 8:08:18 PM
andrewjust100gm

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

Nov 9, 2013 8:12:36 PM
amurushkin

amurushkin

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

vovo4ka

vovo4ka

Рязань

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

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

Nov 9, 2013 8:22:39 PM
amurushkin

amurushkin

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

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

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

Nov 9, 2013 8:22:56 PM
cheeser

cheeser

Glowbyte

amurushkin

amurushkin

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

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

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

Nov 9, 2013 8:26:56 PM
amurushkin

amurushkin

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

cheeser

cheeser

Glowbyte

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

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

Nov 9, 2013 8:35:13 PM
admin

admin

Команда Russian AI Cup

amurushkin

amurushkin

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

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

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

Nov 9, 2013 8:48:46 PM
amurushkin

amurushkin

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

admin

admin

Команда Russian AI Cup

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

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

Nov 9, 2013 8:59:31 PM
alladdin

alladdin

МФТИ (ГУ)

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

Nov 9, 2013 10:04:51 PM
Hohol

Hohol

Maxifier

alladdin

alladdin

МФТИ (ГУ)

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

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

Nov 9, 2013 10:06:35 PM
alladdin

alladdin

МФТИ (ГУ)

Hohol

Hohol

Maxifier

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

Спасибо!

Nov 9, 2013 10:08:30 PM
andrewjust100gm

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

Nov 9, 2013 10:13:07 PM
SladeThe

SladeThe

Команда Russian AI Cup

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

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

Nov 9, 2013 10:47:30 PM
SladeThe

SladeThe

Команда Russian AI Cup

Locky

Locky

Киев

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

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

Nov 9, 2013 11:25:36 PM
Locky

Locky

Киев

SladeThe

SladeThe

Команда Russian AI Cup

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

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

Nov 9, 2013 11:29:01 PM
SladeThe

SladeThe

Команда Russian AI Cup

Locky

Locky

Киев

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

Да

Nov 9, 2013 11:31:09 PM
SladeThe

SladeThe

Команда Russian AI Cup

Gvoin

Gvoin

Киев

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

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

Nov 9, 2013 11:34:05 PM
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) ===|

Nov 10, 2013 12:06:26 AM
enot

enot

SPbSU

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

Nov 10, 2013 12:38:08 AM
Hohol

Hohol

Maxifier

enot

enot

SPbSU

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

Плюсую!

Nov 10, 2013 9:15:29 AM
rs-plus

rs-plus

Россия

enot

enot

SPbSU

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

Я тоже за!

Nov 10, 2013 10:30:24 AM
danpetruk

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

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

Nov 10, 2013 11:04:55 AM
amurushkin

amurushkin

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

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

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

Nov 10, 2013 12:46:30 PM
kalibr17

kalibr17

NEURON GRUP SRL

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

Nov 10, 2013 1:26:11 PM
erwins

erwins

Мегафон

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

Nov 10, 2013 6:14:00 PM
erwins

erwins

Мегафон

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

Nov 10, 2013 6:15:56 PM
BoxAtBox

BoxAtBox

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

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

Nov 10, 2013 6:32:15 PM
iTest
kalibr17

kalibr17

NEURON GRUP SRL

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

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

Nov 10, 2013 6:33:40 PM
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); // Устанавливаем действие “перемещение” …

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

Nov 10, 2013 7:11:53 PM
Alchemist

Alchemist

НовГУ

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

Nov 10, 2013 7:29:26 PM
dmitriy.smirnov

dmitriy.smirnov

Wild Apricot

BoxAtBox

BoxAtBox

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

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

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

Nov 10, 2013 8:53:30 PM
anarki

anarki

Иваново

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

Nov 10, 2013 10:43:49 PM
Orfest

Orfest

Google

Orfest

Orfest

Google

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

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

Nov 11, 2013 12:13:54 AM
rs-plus

rs-plus

Россия

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

Nov 11, 2013 7:49:17 PM
GreenTea

GreenTea

ISDDesign

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

Nov 11, 2013 8:14:55 PM
amurushkin

amurushkin

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

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

Nov 11, 2013 8:44:24 PM
baobab

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

Nov 11, 2013 10:36:48 PM
MrDindows

MrDindows

Snap Inc.

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

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

Nov 11, 2013 10:48:33 PM
cygwin

cygwin

Минск

GreenTea

GreenTea

ISDDesign

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

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

Nov 11, 2013 10:58:40 PM
baobab
MrDindows

MrDindows

Snap Inc.

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

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

Nov 11, 2013 11:59:52 PM
amurushkin

amurushkin

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

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

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

Nov 12, 2013 12:03:14 AM
rs-plus

rs-plus

Россия

cygwin

cygwin

Минск

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

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

Nov 12, 2013 5:18:05 AM
sasha.sochka

sasha.sochka

NTUU "KPI"

MikeMirzayanov

MikeMirzayanov

Команда Russian AI Cup

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

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

Nov 13, 2013 12:14:23 AM
sasha.sochka

sasha.sochka

NTUU "KPI"

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

Nov 13, 2013 12:15:20 AM
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

Nov 13, 2013 12:39:21 AM
SladeThe

SladeThe

Команда Russian AI Cup

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

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

java -version

Nov 13, 2013 12:55:29 AM
binary_cat

binary_cat

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

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

Nov 13, 2013 3:37:26 PM
rs-plus

rs-plus

Россия

binary_cat

binary_cat

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

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

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

Nov 13, 2013 3:42:00 PM
Bibr

Bibr

Майкоп

binary_cat

binary_cat

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

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

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

Nov 13, 2013 4:04:46 PM
Megabyte

Megabyte

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

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

Nov 13, 2013 6:37:35 PM
SladeThe

SladeThe

Команда Russian AI Cup

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

Nov 13, 2013 8:23:23 PM
-XraY-

-XraY-

СПбГУ

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

Nov 13, 2013 9:11:17 PM
SillyAI

SillyAI

ВМК МГУ

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

Nov 13, 2013 9:27:08 PM
SillyAI

SillyAI

ВМК МГУ

SillyAI

SillyAI

ВМК МГУ

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

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

Nov 14, 2013 11:04:38 AM
SladeThe

SladeThe

Команда Russian AI Cup

SillyAI

SillyAI

ВМК МГУ

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

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

Nov 14, 2013 11:15:15 AM
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.

Nov 14, 2013 11:20:54 AM
cNoNim

cNoNim

DataArt

SladeThe

SladeThe

Команда Russian AI Cup

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

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

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

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

Nov 14, 2013 11:30:49 AM
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

Nov 14, 2013 11:35:18 AM
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)

Nov 14, 2013 11:55:51 AM
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 перейдут

Nov 14, 2013 12:04:58 PM
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

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

Nov 14, 2013 12:09:49 PM
SladeThe

SladeThe

Команда Russian AI Cup

cNoNim

cNoNim

DataArt

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

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

Nov 14, 2013 12:45:50 PM
SladeThe

SladeThe

Команда Russian AI Cup

cNoNim

cNoNim

DataArt

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

Да.

Nov 14, 2013 12:50:47 PM
cygwin

cygwin

Минск

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

Nov 14, 2013 3:48:18 PM
amurushkin

amurushkin

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

cygwin

cygwin

Минск

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

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

Nov 14, 2013 3:50:21 PM
cygwin

cygwin

Минск

amurushkin

amurushkin

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

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

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

Nov 14, 2013 4:00:57 PM
amurushkin

amurushkin

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

cygwin

cygwin

Минск

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

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

Nov 14, 2013 4:03:00 PM
cygwin

cygwin

Минск

amurushkin

amurushkin

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

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

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

Nov 14, 2013 4:05:13 PM
Remdev

Remdev

МГТУ Станкин

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

Nov 14, 2013 4:32:01 PM
amurushkin

amurushkin

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

Remdev

Remdev

МГТУ Станкин

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

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

Nov 14, 2013 4:39:25 PM
Ramp

Ramp

Рыбинск

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

Nov 14, 2013 5:14:02 PM
cygwin

cygwin

Минск

Ramp

Ramp

Рыбинск

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

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

Nov 14, 2013 5:31:16 PM
kvoronov

kvoronov

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

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

Nov 14, 2013 7:21:55 PM
qwert

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

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

Nov 14, 2013 11:30:51 PM
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), из-за которых на клетку тоже нельзя будет пойти.

Nov 15, 2013 12:17:02 AM
qwert

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

Nov 15, 2013 2:30:07 PM
albynos

albynos

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

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

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

Nov 15, 2013 2:41:35 PM
Selat

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

Nov 15, 2013 9:20:23 PM
Nikita_Bozhkov

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

Nov 15, 2013 10:11:26 PM
Nikita_Bozhkov

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

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

Nov 15, 2013 10:16:07 PM
SladeThe

SladeThe

Команда Russian AI Cup

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

Да, да, да.

Nov 16, 2013 12:46:00 AM
cNoNim

cNoNim

DataArt

iero

iero

Опенсофт

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

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

Nov 16, 2013 1:55:35 AM
doubledeath

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

Nov 17, 2013 5:41:01 AM
spacistor

spacistor

Москва

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

Nov 17, 2013 8:41:22 AM
Headmast

Headmast

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

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

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

Nov 17, 2013 10:27:35 AM
Bibr

Bibr

Майкоп

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

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

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

Nov 17, 2013 4:48:01 PM
manonedge

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

Nov 17, 2013 7:30:07 PM
Megabyte

Megabyte

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

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

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

Nov 17, 2013 8:11:27 PM
skrytnaya

skrytnaya

TouchSoft

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

Nov 17, 2013 11:53:31 PM
skrytnaya

skrytnaya

TouchSoft

sasha.sochka

sasha.sochka

NTUU "KPI"

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

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

Nov 17, 2013 11:55:27 PM
sasha.sochka

sasha.sochka

NTUU "KPI"

skrytnaya

skrytnaya

TouchSoft

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

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

Nov 18, 2013 12:07:07 AM
safoex

safoex

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

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

Nov 18, 2013 2:44:48 AM
safoex

safoex

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

safoex

safoex

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

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

C++11

Nov 18, 2013 2:44:59 AM
tankovod

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

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

Nov 18, 2013 9:15:05 AM
Bibr

Bibr

Майкоп

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

Nov 18, 2013 10:01:18 AM
SladeThe

SladeThe

Команда Russian AI Cup

skrytnaya

skrytnaya

TouchSoft

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

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

Nov 18, 2013 12:11:39 PM
Lord_F

Lord_F

Гимназия №1

cNoNim

cNoNim

DataArt

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

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

Nov 18, 2013 12:32:44 PM
cNoNim

cNoNim

DataArt

Lord_F

Lord_F

Гимназия №1

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

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

Nov 18, 2013 12:36:17 PM
Lord_F

Lord_F

Гимназия №1

cNoNim

cNoNim

DataArt

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

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

Nov 18, 2013 12:42:49 PM
alexandr1700

alexandr1700

Киев

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

Nov 18, 2013 1:10:13 PM
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 

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

Nov 18, 2013 1:47:58 PM
MrDindows

MrDindows

Snap Inc.

andrey.chernov

andrey.chernov

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

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

юзай static

Nov 18, 2013 2:05:24 PM
iero

iero

Опенсофт

andrey.chernov

andrey.chernov

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

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

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

Nov 18, 2013 2:21:52 PM
cNoNim

cNoNim

DataArt

Lord_F

Lord_F

Гимназия №1

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

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

юнитами

Nov 18, 2013 2:36:12 PM
Lord_F

Lord_F

Гимназия №1

cNoNim

cNoNim

DataArt

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

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

Nov 18, 2013 3:03:56 PM
andrey.chernov

andrey.chernov

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

благодарю :)

Nov 18, 2013 3:41:54 PM
Blowy

Blowy

Полоцк

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

Nov 19, 2013 11:07:48 PM
Headmast

Headmast

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

Blowy

Blowy

Полоцк

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

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

Nov 19, 2013 11:26:16 PM
unconnected

unconnected

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

cNoNim

cNoNim

DataArt

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

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

Nov 20, 2013 6:56:19 AM
Hamster

Hamster

Мелитополь

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

Nov 20, 2013 2:17:44 PM
nutic

nutic

Auctionata

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

Nov 20, 2013 2:35:37 PM
Hamster

Hamster

Мелитополь

sasha.sochka

sasha.sochka

NTUU "KPI"

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

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

Nov 21, 2013 12:47:03 AM