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

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

Проект

Песочница

Раунд 1

Раунд 2

Финал

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

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

17 августа 23:04: MrZlodey написал комментарий в посте Закрытие Russian AI Cup 2016
12 августа 11:03: cheeser написал комментарий в посте Закрытие Russian AI Cup 2016
30 июня 12:46: novich-OK написал комментарий в посте Закрытие Russian AI Cup 2016
25 июня 19:26: VASPO написал комментарий в посте Закрытие Russian AI Cup 2016
7 июня 15:08: Kano написал комментарий в посте Закрытие Russian AI Cup 2016
17 мая 16:48: ManGeorge написал комментарий в посте Закрытие Russian AI Cup 2016
16 мая 21:20: Gladiator_Y написал комментарий в посте Закрытие Russian AI Cup 2016
7 апреля 18:07: serlis написал комментарий в посте Закрытие Russian AI Cup 2016
4 апреля 00:08: r2d2 написал комментарий в посте Закрытие Russian AI Cup 2016
1 апреля 14:37: ruslan5t написал комментарий в посте Закрытие Russian AI Cup 2016

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

 

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

Зарегистрируйтесь

Разумеется, для участия необходимо зарегистрироваться. Для всех соревновательных проектов Mail.Ru Group внедрена единая система авторизации it.mail.ru. Мы убедительно просим всех участников использовать достоверные и полные данные о себе. Загружайте аватарки — всем интересно знать противников в лицо.

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

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

Скачайте Local runner

Local runner — это специальная версия симулятора игры для участников. Local runner предоставляет вам возможность запускать тестовые игры локально на своём компьютере. Подробнее об этом здесь.

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

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

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

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

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

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

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

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

import model.*;

public final class MyStrategy implements Strategy {
    @Override
    public void move(Wizard self, World world, Game game, Move move) {
    }
}

Теперь заставим волшебника просто идти назад с максимальной скоростью и одновременно бить посохом. Метод move примет вид:

public void move(Wizard self, World world, Game game, Move move) {
    move.setSpeed(-game.getWizardBackwardSpeed()); // Или просто move.setSpeed(-100500).
    move.setAction(ActionType.STAFF);
}

В мире CodeWizards нет инерции, и волшебники могут мгновенно менять свою скорость. Однако перемещение волшебника за один тик ограничено игровыми константами. Если в качестве параметра вы передадите невероятно большое число, волшебник просто будет перемещаться с максимально возможной скоростью. Каждый тик наша стратегия выражает пожелание ударить посохом, однако для каждого действия волшебника имеется некоторая задержка (“cooldown”), в течение которой новые действия волшебника будут проигнорированы.

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

import model.*;

import java.util.*;

public final class MyStrategy implements Strategy {
    private static final double WAYPOINT_RADIUS = 100.0D;

    private static final double LOW_HP_FACTOR = 0.25D;

    /**
     * Ключевые точки для каждой линии, позволяющие упростить управление перемещением волшебника.
     * <p>
     * Если всё хорошо, двигаемся к следующей точке и атакуем противников.
     * Если осталось мало жизненной энергии, отступаем к предыдущей точке.
     */
    private final Map<LaneType, Point2D[]> waypointsByLane = new EnumMap<>(LaneType.class);

    private Random random;

    private LaneType lane;
    private Point2D[] waypoints;

    private Wizard self;
    private World world;
    private Game game;
    private Move move;

    /**
     * Основной метод стратегии, осуществляющий управление волшебником.
     * Вызывается каждый тик для каждого волшебника.
     *
     * @param self  Волшебник, которым данный метод будет осуществлять управление.
     * @param world Текущее состояние мира.
     * @param game  Различные игровые константы.
     * @param move  Результатом работы метода является изменение полей данного объекта.
     */
    @Override
    public void move(Wizard self, World world, Game game, Move move) {
        initializeStrategy(self, game);
        initializeTick(self, world, game, move);

        // Постоянно двигаемся из-стороны в сторону, чтобы по нам было сложнее попасть.
        // Считаете, что сможете придумать более эффективный алгоритм уклонения? Попробуйте! ;)
        move.setStrafeSpeed(random.nextBoolean() ? game.getWizardStrafeSpeed() : -game.getWizardStrafeSpeed());

        // Если осталось мало жизненной энергии, отступаем к предыдущей ключевой точке на линии.
        if (self.getLife() < self.getMaxLife() * LOW_HP_FACTOR) {
            goTo(getPreviousWaypoint());
            return;
        }

        LivingUnit nearestTarget = getNearestTarget();

        // Если видим противника ...
        if (nearestTarget != null) {
            double distance = self.getDistanceTo(nearestTarget);

            // ... и он в пределах досягаемости наших заклинаний, ...
            if (distance <= self.getCastRange()) {
                double angle = self.getAngleTo(nearestTarget);

                // ... то поворачиваемся к цели.
                move.setTurn(angle);

                // Если цель перед нами, ...
                if (StrictMath.abs(angle) < game.getStaffSector() / 2.0D) {
                    // ... то атакуем.
                    move.setAction(ActionType.MAGIC_MISSILE);
                    move.setCastAngle(angle);
                    move.setMinCastDistance(distance - nearestTarget.getRadius() + game.getMagicMissileRadius());
                }

                return;
            }
        }

        // Если нет других действий, просто продвигаемся вперёд.
        goTo(getNextWaypoint());
    }

    /**
     * Инциализируем стратегию.
     * <p>
     * Для этих целей обычно можно использовать конструктор, однако в данном случае мы хотим инициализировать генератор
     * случайных чисел значением, полученным от симулятора игры.
     */
    private void initializeStrategy(Wizard self, Game game) {
        if (random == null) {
            random = new Random(game.getRandomSeed());

            double mapSize = game.getMapSize();

            waypointsByLane.put(LaneType.MIDDLE, new Point2D[]{
                    new Point2D(100.0D, mapSize - 100.0D),
                    random.nextBoolean()
                            ? new Point2D(600.0D, mapSize - 200.0D)
                            : new Point2D(200.0D, mapSize - 600.0D),
                    new Point2D(800.0D, mapSize - 800.0D),
                    new Point2D(mapSize - 600.0D, 600.0D)
            });

            waypointsByLane.put(LaneType.TOP, new Point2D[]{
                    new Point2D(100.0D, mapSize - 100.0D),
                    new Point2D(100.0D, mapSize - 400.0D),
                    new Point2D(200.0D, mapSize - 800.0D),
                    new Point2D(200.0D, mapSize * 0.75D),
                    new Point2D(200.0D, mapSize * 0.5D),
                    new Point2D(200.0D, mapSize * 0.25D),
                    new Point2D(200.0D, 200.0D),
                    new Point2D(mapSize * 0.25D, 200.0D),
                    new Point2D(mapSize * 0.5D, 200.0D),
                    new Point2D(mapSize * 0.75D, 200.0D),
                    new Point2D(mapSize - 200.0D, 200.0D)
            });

            waypointsByLane.put(LaneType.BOTTOM, new Point2D[]{
                    new Point2D(100.0D, mapSize - 100.0D),
                    new Point2D(400.0D, mapSize - 100.0D),
                    new Point2D(800.0D, mapSize - 200.0D),
                    new Point2D(mapSize * 0.25D, mapSize - 200.0D),
                    new Point2D(mapSize * 0.5D, mapSize - 200.0D),
                    new Point2D(mapSize * 0.75D, mapSize - 200.0D),
                    new Point2D(mapSize - 200.0D, mapSize - 200.0D),
                    new Point2D(mapSize - 200.0D, mapSize * 0.75D),
                    new Point2D(mapSize - 200.0D, mapSize * 0.5D),
                    new Point2D(mapSize - 200.0D, mapSize * 0.25D),
                    new Point2D(mapSize - 200.0D, 200.0D)
            });

            switch ((int) self.getId()) {
                case 1:
                case 2:
                case 6:
                case 7:
                    lane = LaneType.TOP;
                    break;
                case 3:
                case 8:
                    lane = LaneType.MIDDLE;
                    break;
                case 4:
                case 5:
                case 9:
                case 10:
                    lane = LaneType.BOTTOM;
                    break;
                default:
            }

            waypoints = waypointsByLane.get(lane);

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

            /*Point2D lastWaypoint = waypoints[waypoints.length - 1];

            Preconditions.checkState(ArrayUtils.isSorted(waypoints, (waypointA, waypointB) -> Double.compare(
                    waypointB.getDistanceTo(lastWaypoint), waypointA.getDistanceTo(lastWaypoint)
            )));*/
        }
    }

    /**
     * Сохраняем все входные данные в полях класса для упрощения доступа к ним.
     */
    private void initializeTick(Wizard self, World world, Game game, Move move) {
        this.self = self;
        this.world = world;
        this.game = game;
        this.move = move;
    }

    /**
     * Данный метод предполагает, что все ключевые точки на линии упорядочены по уменьшению дистанции до последней
     * ключевой точки. Перебирая их по порядку, находим первую попавшуюся точку, которая находится ближе к последней
     * точке на линии, чем волшебник. Это и будет следующей ключевой точкой.
     * <p>
     * Дополнительно проверяем, не находится ли волшебник достаточно близко к какой-либо из ключевых точек. Если это
     * так, то мы сразу возвращаем следующую ключевую точку.
     */
    private Point2D getNextWaypoint() {
        int lastWaypointIndex = waypoints.length - 1;
        Point2D lastWaypoint = waypoints[lastWaypointIndex];

        for (int waypointIndex = 0; waypointIndex < lastWaypointIndex; ++waypointIndex) {
            Point2D waypoint = waypoints[waypointIndex];

            if (waypoint.getDistanceTo(self) <= WAYPOINT_RADIUS) {
                return waypoints[waypointIndex + 1];
            }

            if (lastWaypoint.getDistanceTo(waypoint) < lastWaypoint.getDistanceTo(self)) {
                return waypoint;
            }
        }

        return lastWaypoint;
    }

    /**
     * Действие данного метода абсолютно идентично действию метода {@code getNextWaypoint}, если перевернуть массив
     * {@code waypoints}.
     */
    private Point2D getPreviousWaypoint() {
        Point2D firstWaypoint = waypoints[0];

        for (int waypointIndex = waypoints.length - 1; waypointIndex > 0; --waypointIndex) {
            Point2D waypoint = waypoints[waypointIndex];

            if (waypoint.getDistanceTo(self) <= WAYPOINT_RADIUS) {
                return waypoints[waypointIndex - 1];
            }

            if (firstWaypoint.getDistanceTo(waypoint) < firstWaypoint.getDistanceTo(self)) {
                return waypoint;
            }
        }

        return firstWaypoint;
    }

    /**
     * Простейший способ перемещения волшебника.
     */
    private void goTo(Point2D point) {
        double angle = self.getAngleTo(point.getX(), point.getY());

        move.setTurn(angle);

        if (StrictMath.abs(angle) < game.getStaffSector() / 4.0D) {
            move.setSpeed(game.getWizardForwardSpeed());
        }
    }

    /**
     * Находим ближайшую цель для атаки, независимо от её типа и других характеристик.
     */
    private LivingUnit getNearestTarget() {
        List<LivingUnit> targets = new ArrayList<>();
        targets.addAll(Arrays.asList(world.getBuildings()));
        targets.addAll(Arrays.asList(world.getWizards()));
        targets.addAll(Arrays.asList(world.getMinions()));

        LivingUnit nearestTarget = null;
        double nearestTargetDistance = Double.MAX_VALUE;

        for (LivingUnit target : targets) {
            if (target.getFaction() == Faction.NEUTRAL || target.getFaction() == self.getFaction()) {
                continue;
            }

            double distance = self.getDistanceTo(target);

            if (distance < nearestTargetDistance) {
                nearestTarget = target;
                nearestTargetDistance = distance;
            }
        }

        return nearestTarget;
    }

    /**
     * Вспомогательный класс для хранения позиций на карте.
     */
    private static final class Point2D {
        private final double x;
        private final double y;

        private Point2D(double x, double y) {
            this.x = x;
            this.y = y;
        }

        public double getX() {
            return x;
        }

        public double getY() {
            return y;
        }

        public double getDistanceTo(double x, double y) {
            return StrictMath.hypot(this.x - x, this.y - y);
        }

        public double getDistanceTo(Point2D point) {
            return getDistanceTo(point.x, point.y);
        }

        public double getDistanceTo(Unit unit) {
            return getDistanceTo(unit.getX(), unit.getY());
        }
    }
}

Понятно, что это не самая эффективная стратегия и шансов выиграть у неё немного, но это всего-лишь пример. Удачи!



MadKnight

MadKnight

Student

why can’t bots say something? i need him to say “suka blyat rush mid” to win a katka

07.11.2016 1:03:52
Spasitel

Spasitel

МФТИ (ГУ)

А где repeater?

07.11.2016 1:58:38
Spasitel

Spasitel

МФТИ (ГУ)

Spasitel

Spasitel

МФТИ (ГУ)

А где repeater?

Нашел, в разделе Документация. В прошлые года про repeater вроде было упоминание в быстром старте

07.11.2016 2:01:39
SladeThe

SladeThe

Команда Russian AI Cup

Spasitel

Spasitel

МФТИ (ГУ)

Нашел, в разделе Документация. В прошлые года про repeater вроде было упоминание в быстром старте

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

07.11.2016 2:37:18
AntonT

AntonT

Harman Connected Services

MadKnight

MadKnight

Student

why can’t bots say something? i need him to say “suka blyat rush mid” to win a katka

Властелин Дотец)

07.11.2016 6:22:09
ArturRush

ArturRush

НИУ ЮУрГУ

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

07.11.2016 20:35:24
Ruslion

Ruslion

Казахстан

В пакете С# при запуске отображает ошибки в файле PlayerContext.cs

07.11.2016 21:27:35
DOOMovoi

DOOMovoi

Дубна

Ruslion

Ruslion

Казахстан

В пакете С# при запуске отображает ошибки в файле PlayerContext.cs

Случаем не на “.. World => world;” ругается?

07.11.2016 22:16:45
CBuH

CBuH

АО НПО ИТ

Не работает тестовая стратегия на Java пишет ошибка компиляции

.\MyStrategy.java:9: error: cannot find symbol private LineType line; ^ symbol: class LineType location: class MyStrategy .\MyStrategy.java:17: error: cannot find symbol private final Map waypointsByLine = new EnumMap<>(LineType.class); ^ symbol: class LineType location: class MyStrategy .\MyStrategy.java:17: error: cannot find symbol private final Map waypointsByLine = new EnumMap<>(LineType.class); ^ symbol: class LineType location: class MyStrategy .\MyStrategy.java:70: error: cannot find symbol waypointsByLine.put(LineType.MIDDLE, new Point2D[]{ ^ symbol: variable LineType location: class MyStrategy

08.11.2016 8:54:04
Hohol

Hohol

Maxifier

CBuH

CBuH

АО НПО ИТ

Не работает тестовая стратегия на Java пишет ошибка компиляции .\MyStrategy.java:9: error: cannot find symbol private LineType line; ^ symbol: class LineType location: class MyStrategy .\MyStrategy.java:17: error: cannot find symbol private final Map waypointsByLine = new EnumMap<>(LineType.class); ^ symbol: class LineType location: class MyStrategy .\MyStrategy.java:17: error: cannot find symbol private final Map waypointsByLine = new EnumMap<>(LineType.class); ^ symbol: class LineType location: class MyStrategy .\MyStrategy.java:70: error: cannot find symbol waypointsByLine.put(LineType.MIDDLE, new Point2D[]{ ^ symbol: variable LineType location: class MyStrategy

Обнови языковой пакет. LineType переименовали в LaneType.

08.11.2016 8:59:06
Mashiro

Mashiro

КНУ им. Т. Шевченка

Почему нельзя регистрироваться на форуме?

08.11.2016 15:30:04
izatenat

izatenat

Symphony Teleca

I’ve build errors: this::readProjectile this::readProjectile this::readMinion this::readBonus ….cannot be resolved to a variable in RemoteProcessClient.java

ex: private Projectile[] readProjectiles() throws IOException { return readArray(Projectile.class, this::readProjectile); }

08.11.2016 15:46:30
Chaotic_Good

Chaotic_Good

МГТУ им. Н. Э. Баумана

Я вот один не пойму… то что на java можно пользоваться встроенным генератором рандома игры, а в остальных придется его эмулировать… Это эксплойт ведь по сути?

08.11.2016 20:00:24
SKolotienko

SKolotienko

ABBYY

Chaotic_Good

Chaotic_Good

МГТУ им. Н. Э. Баумана

Я вот один не пойму… то что на java можно пользоваться встроенным генератором рандома игры, а в остальных придется его эмулировать… Это эксплойт ведь по сути?

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

08.11.2016 20:40:45
Magiq

Как это запускать, если в local-runner не методов ничего нет, только конструктор и программа валится например так AttributeError: ‘Game’ object has no attribute ‘getMapSize’

08.11.2016 22:31:09
Grino

Grino

ЧелГУ

Hohol

Hohol

Maxifier

Обнови языковой пакет. LineType переименовали в LaneType.

Круто, а в примере кто исправлять будет?

08.11.2016 22:40:15
Hohol

Hohol

Maxifier

Grino

Grino

ЧелГУ

Круто, а в примере кто исправлять будет?

Не я.

09.11.2016 0:06:31
pycckuu

pycckuu

University of Waterloo

А есть пример приведенный здесь, написанный на Python?

09.11.2016 5:15:51
Chaotic_Good

Chaotic_Good

МГТУ им. Н. Э. Баумана

SKolotienko

SKolotienko

ABBYY

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

Судя по тому что я вижу сейчас… Можно предсказывать поведение юнитов(частично)… Хотя я не провел достаточно проверок, так что могу сильно ошибаться.

09.11.2016 8:31:24
Chaotic_Good

Chaotic_Good

МГТУ им. Н. Э. Баумана

pycckuu

pycckuu

University of Waterloo

А есть пример приведенный здесь, написанный на Python?

Нету. И на С+++ нету. И не получится его повторить пока полостью нормально. Вся надежда - исправят.

09.11.2016 8:32:19
ALEXks

ALEXks

ИПМ им. М.В. Келдыша РАН

Chaotic_Good

Chaotic_Good

МГТУ им. Н. Э. Баумана

Нету. И на С+++ нету. И не получится его повторить пока полостью нормально. Вся надежда - исправят.

Мне кажется перевести Java стратегию на С++ не составит труда, если ты знаешь С++. Аналогично и про другие языки. Тем более, когда переносишь - лучше понимаешь, что происходит, чем когда берешь готовое.

09.11.2016 10:12:12
vren

vren

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

Chaotic_Good

Chaotic_Good

МГТУ им. Н. Э. Баумана

Нету. И на С+++ нету. И не получится его повторить пока полостью нормально. Вся надежда - исправят.

Потратьте пару часов на портирование, будет и у вас. Странно, конечно, что у джавистов фора.

09.11.2016 10:20:21
theShade

theShade

Crypton/RDL

vren

vren

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

Потратьте пару часов на портирование, будет и у вас. Странно, конечно, что у джавистов фора.

Перевести на С# заняло около 6 минут

09.11.2016 12:39:37
vren

vren

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

theShade

theShade

Crypton/RDL

Перевести на С# заняло около 6 минут

на python не спеша - 2 часа.

09.11.2016 12:46:23
JustAMan

JustAMan

Нижний Новгород

Chaotic_Good

Chaotic_Good

МГТУ им. Н. Э. Баумана

Судя по тому что я вижу сейчас… Можно предсказывать поведение юнитов(частично)… Хотя я не провел достаточно проверок, так что могу сильно ошибаться.

Вы не забывайте, что seed в итоге будет (скорее всего) у каждого свой - у стратегий свои, у сервера - свой. В итоге можно будет предсказать свой собственный random, но толку-то с этого - никакого :)

09.11.2016 12:56:14
Chaotic_Good

Chaotic_Good

МГТУ им. Н. Э. Баумана

JustAMan

JustAMan

Нижний Новгород

Вы не забывайте, что seed в итоге будет (скорее всего) у каждого свой - у стратегий свои, у сервера - свой. В итоге можно будет предсказать свой собственный random, но толку-то с этого - никакого :)

Надеюсь на это…

09.11.2016 12:58:07
Chaotic_Good

Chaotic_Good

МГТУ им. Н. Э. Баумана

vren

vren

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

Потратьте пару часов на портирование, будет и у вас. Странно, конечно, что у джавистов фора.

Я про поведение встроенного рандома Java если что. Саму стратегию эту использовать не намерен.

09.11.2016 12:59:58
vren

vren

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

JustAMan

JustAMan

Нижний Новгород

Вы не забывайте, что seed в итоге будет (скорее всего) у каждого свой - у стратегий свои, у сервера - свой. В итоге можно будет предсказать свой собственный random, но толку-то с этого - никакого :)

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

09.11.2016 13:13:38
JustAMan

JustAMan

Нижний Новгород

vren

vren

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

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

Есть подозрение, что на взлом генератора уйдёт почти всё отпущенное на стратегию время… :) А потом организаторы обозлятся и переделают на чтение /dev/urandom (аппаратного генератора) - и привет взлому :D

09.11.2016 13:40:29
JustAMan

JustAMan

Нижний Новгород

vren

vren

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

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

Есть подозрение, что на взлом генератора уйдёт почти всё отпущенное на стратегию время… :) А потом организаторы обозлятся и переделают на чтение /dev/urandom (аппаратного генератора) - и привет взлому :D

09.11.2016 13:40:31
izatenat

izatenat

Symphony Teleca

подскажите кто решил проблему с компиляцией примера? в файле RemoteProcessClient не находит this::readProjectile this::readMinion this::readBonus this:readWizards итд….

jdk обновил до последнего, в eclipse все выставил, поключение к серверу осуществляется, но маг стоит на месте.

Exception in thread “main” java.lang.Error: Unresolved compilation problems: Syntax error on tokens, delete these tokens readWizard cannot be resolved to a variable at main.java.RemoteProcessClient.readWizards(RemoteProcessClient.java:145) at main.java.RemoteProcessClient.readPlayerContext(RemoteProcessClient.java:88) at main.java.Runner.run(Runner.java:35) at main.java.Runner.main(Runner.java:12)

09.11.2016 13:44:41
Kozza

Kozza

Казань

а есть полная документация в pdf файле как в прошлом году(годах)?

09.11.2016 16:47:04
Kozza

Kozza

Казань

Kozza

Kozza

Казань

а есть полная документация в pdf файле как в прошлом году(годах)?

нашел

09.11.2016 17:02:54
4way

4way

ЗАО МЭЛ

Chaotic_Good

Chaotic_Good

МГТУ им. Н. Э. Баумана

Я про поведение встроенного рандома Java если что. Саму стратегию эту использовать не намерен.

Вполне себе стратегия. Дала базу, т.е. атака, движение. Небольшие доделки. Держусь в топ 20

09.11.2016 18:31:10
exelim

exelim

Gameloft

Эм…почему когда мне выпадает 101 игрок и я смотрю свою позицию,то она равно 100, 3700 что примерно равно 1-3 игроку ? Это ошибка или как ?

10.11.2016 15:48:15
quyse

quyse

НИУ ЮУрГУ

MadKnight

MadKnight

Student

why can’t bots say something? i need him to say “suka blyat rush mid” to win a katka

indeed game totally misses that

10.11.2016 17:21:16
JustAMan

JustAMan

Нижний Новгород

quyse

quyse

НИУ ЮУрГУ

indeed game totally misses that

use game visualizer, Luke :)

http://russianaicup.ru/forum/index.php?topic=592.0

10.11.2016 18:01:28
Keyboard_smurf

why can’t bots say something? i need him to say “suka blyat rush mid” to win a katka

Actually according documentation there is messaging system (class Message) between wizards of same fraction. But unfortunately you cant say “gg ez mid commend me” to wizards of other fraction(

10.11.2016 18:13:32
Magiq

У мен такое ощущение что этот успер турнир(который они говорили что особенно постарались на пятлиетие) специально сделали для бывалых. Нигде нет информации по визуализатору, только в комментах и форумах!! Мне что выпрашивать его? Зато вопрос по мылу уже четвертый день никто не ответил.

10.11.2016 19:19:18
esemi

esemi

SEMrush

У мен такое ощущение что этот успер турнир(который они говорили что особенно постарались на пятлиетие) специально сделали для бывалых. Нигде нет информации по визуализатору, только в комментах и форумах!! Мне что выпрашивать его? Зато вопрос по мылу уже четвертый день никто не ответил.

Визуализатор - он не официальный, насколько я понимаю)

10.11.2016 19:31:12
Parilo2

Parilo2

ОмГУ им. Достоевского

А под маком можно как-то скомпилить C++ версию? Оно у меня хочет линуховские хедеры

10.11.2016 20:56:39
Parilo2

Parilo2

ОмГУ им. Достоевского

Parilo2

Parilo2

ОмГУ им. Достоевского

А под маком можно как-то скомпилить C++ версию? Оно у меня хочет линуховские хедеры

собрал под маком заменив последнюю команду в скрипте compile-g++14.sh на g++ -std=c++14 -fno-optimize-sibling-calls -fno-strict-aliasing -D_DARWIN -lm -x c++ -O2 -Wall -Wtype-limits -Wno-unknown-pragmas -o $name $files

10.11.2016 21:05:58
Golovanov399

Golovanov399

Московский Физико-Технический Институт

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

11.11.2016 13:49:15
4way

4way

ЗАО МЭЛ

Golovanov399

Golovanov399

Московский Физико-Технический Институт

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

У меня даже сериал одновременно с воспроизведением игры нельзя включать. Начинает виснуть и тупить.

11.11.2016 13:54:12
FDoKE

FDoKE

НГТУ (НЭТИ)

4way

4way

ЗАО МЭЛ

У меня даже сериал одновременно с воспроизведением игры нельзя включать. Начинает виснуть и тупить.

Вам просто нужно парочку TitanX :D

11.11.2016 14:16:37
Chaotic_Good

Chaotic_Good

МГТУ им. Н. Э. Баумана

4way

4way

ЗАО МЭЛ

У меня даже сериал одновременно с воспроизведением игры нельзя включать. Начинает виснуть и тупить.

Странно, у меня фпс на сайте 100.

11.11.2016 14:59:36
RandGor
MadKnight

MadKnight

Student

why can’t bots say something? i need him to say “suka blyat rush mid” to win a katka

best dish

13.11.2016 17:34:51
esemi

esemi

SEMrush

Chaotic_Good

Chaotic_Good

МГТУ им. Н. Э. Баумана

Странно, у меня фпс на сайте 100.

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

13.11.2016 20:53:40
SladeThe

SladeThe

Команда Russian AI Cup

esemi

esemi

SEMrush

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

Фокс вообще медленный стал. Попробуйте запустить в том же Chrome. Разница в фпс будет значительная.

14.11.2016 13:01:35
Fep

Fep

Хабаровск

izatenat

izatenat

Symphony Teleca

подскажите кто решил проблему с компиляцией примера? в файле RemoteProcessClient не находит this::readProjectile this::readMinion this::readBonus this:readWizards итд…. jdk обновил до последнего, в eclipse все выставил, поключение к серверу осуществляется, но маг стоит на месте. Exception in thread “main” java.lang.Error: Unresolved compilation problems: Syntax error on tokens, delete these tokens readWizard cannot be resolved to a variable at main.java.RemoteProcessClient.readWizards(RemoteProcessClient.java:145) at main.java.RemoteProcessClient.readPlayerContext(RemoteProcessClient.java:88) at main.java.Runner.run(Runner.java:35) at main.java.Runner.main(Runner.java:12)

тоже интересует данный вопрос

16.11.2016 15:09:19
steleal

steleal

Ульяновск

Fep

Fep

Хабаровск

тоже интересует данный вопрос

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

16.11.2016 21:42:18
RQdan

Не подскажет кто в чем может быть проблема: кажется, еще ни разу не смог полностью просмотреть прошедшую игру на сайте. Думает долго, тормозит и в итоге загружает лишь часть игры, да и то обычно не больше 500 тиков. Ну и как с репитором работать? Запускаю, работает, пишет, что дамп загружен и все. Надо еще что запускать/делать?

17.11.2016 10:50:16
Scarlet

  1. Нормально на сайте можно посмотреть только в Хроме.
  2. Дальше надо запустить дебаг в IDE (также как с локалраннером, без визуализации).

17.11.2016 11:31:33
esemi

esemi

SEMrush

SladeThe

SladeThe

Команда Russian AI Cup

Фокс вообще медленный стал. Попробуйте запустить в том же Chrome. Разница в фпс будет значительная.

“Your graphics card or browser does not seem to support WebGL. For more information please visit get.webgl.org”

Это в хромиуме, хотя в фоксе играет, пусть и с тормозами)

17.11.2016 11:58:34
esemi

esemi

SEMrush

esemi

esemi

SEMrush

“Your graphics card or browser does not seem to support WebGL. For more information please visit get.webgl.org” Это в хромиуме, хотя в фоксе играет, пусть и с тормозами)

В стабле хрома под линух аналогично

17.11.2016 12:02:28
nakilon

nakilon

Москва

А как интерпретировать такую Ошибку верификации #8969 ?

```Ваша стратегия «упала» в короткой проверочной игре 10x1. Процесс стратегии непредвиденно завершился на тике 27.

Вывод runner’а в stdout: Time limit exceeded Program failed to terminate within 14.00 sec time consumed: 14.10 of 14.00 sec time passed: 50.21 sec peak memory: 185217024 bytes

Вывод стратегии в stderr: Warning: security manager and JRuby running from boot classpath. Run from jruby.jar or set env VERIFY_JRUBY=true to enable security.```

У меня локально тиков 50 в секунду проходит, а тут пишут, что 14сек на 27 тиков _Оо

17.11.2016 16:54:20
A13x3y

Что-то в этом году питон не тащит совсем или просто народ еще не подтянулся?

18.11.2016 15:34:39
esemi

esemi

SEMrush

Что-то в этом году питон не тащит совсем или просто народ еще не подтянулся?

все кто писали на питоне из првой сотни ушли на другие языки?)

18.11.2016 17:12:15
tyamgin

tyamgin

Крымский федеральный университет имени В.И. Вернадского

esemi

esemi

SEMrush

все кто писали на питоне из првой сотни ушли на другие языки?)

скорее в другие сотни :)

18.11.2016 18:25:40
ThermIt

ThermIt

Piano.io

Администраторы, сделайте, пожалуйста, отдельную страницу загрузки…

19.11.2016 11:26:28
ThermIt

ThermIt

Piano.io

ThermIt

ThermIt

Piano.io

Администраторы, сделайте, пожалуйста, отдельную страницу загрузки…

Хотя, нашёл всё что можно загрузить, но почему-то в разделе “документация”

19.11.2016 11:27:52
IuriiCh

IuriiCh

ТГУ

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

19.11.2016 17:47:27
IuriiCh

IuriiCh

ТГУ

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

19.11.2016 17:51:30
udalov

udalov

JetBrains

Похоже, из-за вот этой строчки

random = new Random(game.getRandomSeed());

стратегия QuickStartGuy ведёт себя каждую игру по-разному (ведь randomSeed это некоторое случайное число, не зависящее от seed, который передаётся как параметр в local-runner). Из-за этого неудобно локально тестировать свою стратегию против стратегии “быстрый старт”. Скажите, есть ли возможность это починить в QuickStartGuy в local-runner? Т.е. например зафиксировать seed следующим образом:

random = new Random(42);

19.11.2016 18:15:20
mixei4

mixei4

КГУ

udalov

udalov

JetBrains

Похоже, из-за вот этой строчки random = new Random(game.getRandomSeed()); стратегия QuickStartGuy ведёт себя каждую игру по-разному (ведь randomSeed это некоторое случайное число, не зависящее от seed, который передаётся как параметр в local-runner). Из-за этого неудобно локально тестировать свою стратегию против стратегии “быстрый старт”. Скажите, есть ли возможность это починить в QuickStartGuy в local-runner? Т.е. например зафиксировать seed следующим образом: …

В настройках локалраннера: seed=…

19.11.2016 19:53:02
udalov

udalov

JetBrains

mixei4

mixei4

КГУ

В настройках локалраннера: seed=…

seed в настройках local-runner это не game.getRandomSeed() по понятным причинам. См. также http://russianaicup.ru/forum/index.php?topic=651.0

19.11.2016 20:05:13
udalov

udalov

JetBrains

А, кажется проблема оказалась именно в local-runner: параметр в командной строке вопреки read.me почему-то игнорируется, а вот seed=XXX в .properties-файле работает.

19.11.2016 20:09:33
DIZY

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

19.11.2016 20:25:57
x_equals_19

x_equals_19

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

Я правильно понимаю, что с файлами в текущим каталоге взаимодействовать разрешается?

19.11.2016 20:34:56
dimir

dimir

СПбГЭТУ (ЛЭТИ)

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

Ставите java, скачиваете local-runner и свой языковой пакет, создаёте стратегию (компилируете). Запускаете local-runner (там скрипты для Windows и *nix систем есть для запуска внутри архива). local-runner теперь ожидает когда вы запустите свою стратегию. Запускаете - смотрите.

19.11.2016 23:36:17
DIZY
dimir

dimir

СПбГЭТУ (ЛЭТИ)

Ставите java, скачиваете local-runner и свой языковой пакет, создаёте стратегию (компилируете). Запускаете local-runner (там скрипты для Windows и *nix систем есть для запуска внутри архива). local-runner теперь ожидает когда вы запустите свою стратегию. Запускаете - смотрите.

Проблема не с loc run, проблема в том, что в какой среды бы я не компилировал у меня вылетает CE.

20.11.2016 7:53:12
Valdemar

Valdemar

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

Проблема не с loc run, проблема в том, что в какой среды бы я не компилировал у меня вылетает CE.

А вы весь языковой пакет в проект добавили? Компилировать нужно все, не только MyStrategy

20.11.2016 14:13:27
dimir

dimir

СПбГЭТУ (ЛЭТИ)

Проблема не с loc run, проблема в том, что в какой среды бы я не компилировал у меня вылетает CE.

Я, например, так и не смог собрать проект в eclipse (windows, c++). В итоге собираю скриптом из архива, а вот правлю исходники в eclipse. В прошлом году я под linux сидел, и там вроде как тоже были проблемы со сборкой.

20.11.2016 15:01:55
Valdemar

Valdemar

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

dimir

dimir

СПбГЭТУ (ЛЭТИ)

Я, например, так и не смог собрать проект в eclipse (windows, c++). В итоге собираю скриптом из архива, а вот правлю исходники в eclipse. В прошлом году я под linux сидел, и там вроде как тоже были проблемы со сборкой.

Главное просто все те же опции передать. Собираю в CLion через CMake

20.11.2016 15:09:29
SladeThe

SladeThe

Команда Russian AI Cup

udalov

udalov

JetBrains

А, кажется проблема оказалась именно в local-runner: параметр в командной строке вопреки read.me почему-то игнорируется, а вот seed=XXX в .properties-файле работает.

Параметры запуска bat/sh-файла не передаются дальше как параметры запуска Local runner’а. Необходимо отредактировать существующий или создать новый скрипт запуска, в котором добавить параметр seed. Например, local-runner.bat может выглядеть так:

start javaw -Xms512m -Xmx1G -XX:+UseConcMarkSweepGC -jar "local-runner.jar" local-runner.properties local-runner.default.properties 123456

game.getRandomSeed() очевидно зависит от параметра seed или seed-property. Именно для этого и нужно это значение.

20.11.2016 19:19:02
FenzaFenz

А мобов всегда фиксированное число появляется?

20.11.2016 21:28:13
coalesce

coalesce

Диасофт

Вы бы добавили в предложение “Поддерживаются C++, Java, C#, Pascal, Python2, Python3 и Ruby” все 10 языков. А то из письма попал на эту страницу, прочитал, скажем, знаю JS, обиделся. А мог бы по ссылке языковые пакеты и не пойти, не перепроверить

20.11.2016 22:26:19
SladeThe

SladeThe

Команда Russian AI Cup

coalesce

coalesce

Диасофт

Вы бы добавили в предложение “Поддерживаются C++, Java, C#, Pascal, Python2, Python3 и Ruby” все 10 языков. А то из письма попал на эту страницу, прочитал, скажем, знаю JS, обиделся. А мог бы по ссылке языковые пакеты и не пойти, не перепроверить

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

20.11.2016 22:47:45
aabzac

aabzac

БГУИР

А мобов всегда фиксированное число появляется?

А правила (документацию) прочитать - не судьба? ))

20.11.2016 23:06:01
DIZY

что возвращает функция GetMinions, когда его записываю в вектор, он ругается на, то что вектор вышел из за границы.

21.11.2016 5:27:25
dimir

dimir

СПбГЭТУ (ЛЭТИ)

что возвращает функция GetMinions, когда его записываю в вектор, он ругается на, то что вектор вышел из за границы.

А на каком языке то ?

21.11.2016 12:12:49
dimir

dimir

СПбГЭТУ (ЛЭТИ)

что возвращает функция GetMinions, когда его записываю в вектор, он ругается на, то что вектор вышел из за границы.

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

21.11.2016 12:13:39
romamamam

romamamam

МГТУ им. Н.Э. Баумана

Ребят, нужна ваша помощь: быстрый старт для js, когда id wizard’а больше 5, он просто крутится на месте. Что делать?

21.11.2016 22:13:00
Gassa

Gassa

СПбГУ

О, оказывается, в пользовательском языковом пакете можно перевести и выложить QuickStartGuy.

Перевод на D: https://github.com/GassaFM/raicup-2016-dlang-cgdk-ru/tree/master/quick-start.

22.11.2016 16:35:36
Alexorleon

Alexorleon

Кемерово

Почему пример не на всех языках???!!!

23.11.2016 13:20:46
KrAsAu4iK

KrAsAu4iK

Душанбе

Здравствуйте. Как играть в песочнице я что-то не понял эту систему. В ссылке играть нет место чтобы запустит игру плиз помогите .

23.11.2016 14:43:28
KrAsAu4iK

KrAsAu4iK

Душанбе

Здравствуйте. Как играть в песочнице я что-то не понял эту систему. В ссылке играть нет место чтобы запустит игру плиз помогите .

23.11.2016 14:43:29
azt-yur

azt-yur

ОГУ

KrAsAu4iK

KrAsAu4iK

Душанбе

Здравствуйте. Как играть в песочнице я что-то не понял эту систему. В ссылке играть нет место чтобы запустит игру плиз помогите .

Для начала надо отправит свою стратегию Отослать стратегию http://russianaicup.ru/submit Затем игры в песочнице будут создаваться автоматически системой. Также можно создать свою игру по ссылке Создать игру, но они не участвуют в рейтинге

23.11.2016 15:25:16
KrAsAu4iK

KrAsAu4iK

Душанбе

azt-yur

azt-yur

ОГУ

Для начала надо отправит свою стратегию Отослать стратегию http://russianaicup.ru/submit Затем игры в песочнице будут создаваться автоматически системой. Также можно создать свою игру по ссылке Создать игру, но они не участвуют в рейтинге

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

23.11.2016 15:32:08
SKolotienko

SKolotienko

ABBYY

KrAsAu4iK

KrAsAu4iK

Душанбе

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

Раз говорит “ошибка компиляции”, значит - ошибка компиляции. И с подобными темами лучше обращаться на форум, а не в тему “быстрого старта”

23.11.2016 15:47:46
JaleChaki

JaleChaki

АГ СПбГУ

KrAsAu4iK

KrAsAu4iK

Душанбе

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

Ну если пишет ошибка компиляции, значит стратегия не смогла скомпилироваться. Отправлять надо файл MyStrategy (и только его), который лежит в папке языкового пакета. Ну и если у тебя все компилируется на твоём компе, значит по идее должно компилироваться и в системе, куда ты отправляешь

23.11.2016 16:08:52
LueNZ

LueNZ

не работаю

Как направить волшебника идти по мидлу?

23.11.2016 21:11:58
infsega

infsega

Align Technology Inc

LueNZ

LueNZ

не работаю

Как направить волшебника идти по мидлу?

Движение как таковое задаётся либо ключевыми точками, либо алгоритмом поиска пути типа A*. На этой странице есть полный код движения по ключевым точкам. В примере направление движения выбирается по ID игрока (от 1 до 10, первые 5 в одной команде, следующие в другой). Строчка: lane = LaneType.MIDDLE;

Соответственно, сделайте её безусловной - тогда Ваш бот всегда будет ходить на мид (и иногда портить баланс команде).

Если же нужно отладить направление на мид, то в LocalRunner можно задать ID игрока, см. p1-type=Local в файле .properties

24.11.2016 1:06:14
Rmurad

Rmurad

студент

Привет всем! Скачал local-runner и запустил local-runner.bat, появилось окно с сообщением “Ожидание подключения стратегии” Дальше открыл проект в intellij Idea и как я понял, надо запустить класс runner, но в нем отсутствует main. Может я что то не правильно понял. Помогите пожалуйста разобраться с запуском бота на локальном компьютере.

25.11.2016 13:12:26
AlexKol

AlexKol

MSTEAM

KrAsAu4iK

KrAsAu4iK

Душанбе

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

Нажми на ошибку компиляции. Тебе покажется развернутая ошибка. Что нить типа LaneType не найден.

25.11.2016 13:18:30
antonpp

antonpp

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

Rmurad

Rmurad

студент

Привет всем! Скачал local-runner и запустил local-runner.bat, появилось окно с сообщением “Ожидание подключения стратегии” Дальше открыл проект в intellij Idea и как я понял, надо запустить класс runner, но в нем отсутствует main. Может я что то не правильно понял. Помогите пожалуйста разобраться с запуском бота на локальном компьютере.

Вообще, если качать языковой пакет, то там pom.xml есть, в котором и main класс написан и как собирать, так что идея должна была подхватить и правильный таргет сразу создать. Странно, что нет main метода в Runner, может вы ещё вот это (http://russianaicup.ru/p/packs) забыли? Кстати, посмотрите, какой порт будет использоваться - у меня дефолтный был закрыт.

25.11.2016 13:32:01
antonpp

antonpp

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

LueNZ

LueNZ

не работаю

Как направить волшебника идти по мидлу?

move.setTurn(self.getAngleTo(4000, 0)) move.setSpeed(4)

25.11.2016 13:35:09
AlexKol

AlexKol

MSTEAM

antonpp

antonpp

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

move.setTurn(self.getAngleTo(4000, 0)) move.setSpeed(4)

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

25.11.2016 13:40:19
Rmurad

Rmurad

студент

antonpp

antonpp

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

Вообще, если качать языковой пакет, то там pom.xml есть, в котором и main класс написан и как собирать, так что идея должна была подхватить и правильный таргет сразу создать. Странно, что нет main метода в Runner, может вы ещё вот это ( http://russianaicup.ru/p/packs ) забыли? Кстати, посмотрите, какой порт будет использоваться - у меня дефолтный был закрыт.

языковой пакет скачал с github и открыл в intellij Idea и при попытке оттуда его запустить не наiел метода main. А где можно посмотреть какие порты открыты?

25.11.2016 13:45:42
Rmurad

Rmurad

студент

antonpp

antonpp

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

Вообще, если качать языковой пакет, то там pom.xml есть, в котором и main класс написан и как собирать, так что идея должна была подхватить и правильный таргет сразу создать. Странно, что нет main метода в Runner, может вы ещё вот это ( http://russianaicup.ru/p/packs ) забыли? Кстати, посмотрите, какой порт будет использоваться - у меня дефолтный был закрыт.

Сорри, есть метод main (public static void main(String[] args) throws IOException) но запустить не могу, кнопка запуска не доступна

25.11.2016 14:02:24
antonpp

antonpp

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

AlexKol

AlexKol

MSTEAM

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

Спасибо, я в курсе)

25.11.2016 14:08:57
antonpp

antonpp

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

Rmurad

Rmurad

студент

Сорри, есть метод main (public static void main(String[] args) throws IOException) но запустить не могу, кнопка запуска не доступна

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

Порты это уже как у вас на машине настроено.

25.11.2016 14:16:31
alevlaber

alevlaber

Костанай

Rmurad

Rmurad

студент

Сорри, есть метод main (public static void main(String[] args) throws IOException) но запустить не могу, кнопка запуска не доступна

Если не ошибаюсь, то в IDE надо прописать путь к JAVA. У вас при запуске IDE сообщение\предупреждение не выскакивало никакое?

25.11.2016 14:35:49
nullptr

nullptr

Горный университет (бывш. СПГГУ)

Можно-ли каким-либо образом получить значение урона от скилов? Или это только есть в документации и точка?

25.11.2016 14:55:20
Rmurad

Rmurad

студент

alevlaber

alevlaber

Костанай

Если не ошибаюсь, то в IDE надо прописать путь к JAVA. У вас при запуске IDE сообщение\предупреждение не выскакивало никакое?

Просит изменить конфигурации, пытаюсь в поле “main class” выбрать джава файл runner, но не получается выбрать. Путь к джаве указал. Так же не могу в проекте создавать свои классы.

25.11.2016 14:56:08
Rmurad

Rmurad

студент

Все запустилось, спасибо!

25.11.2016 15:03:44
DOOMovoi

DOOMovoi

Дубна

А как залогинится на форум? Регистрация отключена. Логин/пароль от mail.ru аккаунта не работает, восстановление пароля письмо на почту не присылает…

25.11.2016 15:04:43
snikes

snikes

РГППУ

http://prntscr.com/dblxn3 во какие дела, что-то слетело

25.11.2016 15:08:01
Hohol

Hohol

Maxifier

nullptr

nullptr

Горный университет (бывш. СПГГУ)

Можно-ли каким-либо образом получить значение урона от скилов? Или это только есть в документации и точка?

game.getFrostBoltDirectDamage и другие подобные методы

25.11.2016 15:18:24
Xopek

Xopek

МГТУ им. Н. Э. Баумана

snikes

snikes

РГППУ

http://prntscr.com/dblxn3 во какие дела, что-то слетело

У меня тоже самое

25.11.2016 15:29:37
Rmurad

Rmurad

студент

Ребята. при использовании сложного кода стратегии выше. у меня вылетает. кто нибудь сталкивался с этой проблемой?

25.11.2016 15:33:43
AlexKol

AlexKol

MSTEAM

Rmurad

Rmurad

студент

Ребята. при использовании сложного кода стратегии выше. у меня вылетает. кто нибудь сталкивался с этой проблемой?

Ты посмотри из за чего вылетает. Какую ошибку пишет и тд.

25.11.2016 15:36:55
snikes

snikes

РГППУ

Xopek

Xopek

МГТУ им. Н. Э. Баумана

У меня тоже самое

htmlentitydecode сломался ))

25.11.2016 15:49:23
ashru

how do I know why my game crashed without using a local repeat (since I can’s seem to get it to work)?

25.11.2016 18:35:17
SladeThe

SladeThe

Команда Russian AI Cup

how do I know why my game crashed without using a local repeat (since I can’s seem to get it to work)?

You can click on the programming language icon on the game details page.

25.11.2016 18:56:52
nullptr

nullptr

Горный университет (бывш. СПГГУ)

Hohol

Hohol

Maxifier

game.getFrostBoltDirectDamage и другие подобные методы

Спасибо!

25.11.2016 19:12:32
serlis

serlis

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

Ребята, у кого получается и отправлять и получать мессаджи: можете расписать что туда можно класть и как это читать. Желательно на с++ . Я делаю самым логичным способом оно компилится: но в визуализаторе на сайте оно не отображает мои команды если я верховный. Пара доп вопросов: Я прав что под звёздочкой на сайте отображает рекомендуемы верховным лайны? Верховный всегда красный и синий?

28.11.2016 20:56:24
Equinox

Equinox

ООО "Компания Тензор"

serlis

serlis

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

Ребята, у кого получается и отправлять и получать мессаджи: можете расписать что туда можно класть и как это читать. Желательно на с++ . Я делаю самым логичным способом оно компилится: но в визуализаторе на сайте оно не отображает мои команды если я верховный. Пара доп вопросов: Я прав что под звёздочкой на сайте отображает рекомендуемы верховным лайны? Верховный всегда красный и синий?

Есть только на питоне. У меня все работает (и стрелочки показываются, когда я верховный) и на нужную линию бегу, когда нет. Примерно так (переписать на С++, думаю, не сложно):

def tick(self, me: Wizard):
    # Получаем/отправляем команды
    if me.master:
        self.send_commands()
    else:
        self.receive_commands(me)


def send_commands(self):
    if world.tick_index == 0:
        msg = {}
        for w in map.ally_wizards:  # Назначаем линии союзным волшебникам
            lane = self.get_lane212(w)  # Стратегия 2-1-2 (возвращает линию для мага, примерно как в СтартГае)

            if w.me:  # Себе
                self.commands.lane = lane
            else:  # Остальным
                msg[w.id] = Message(lane=lane, skill_to_learn=None, raw_message=None)

        if len(msg) == len(map.ally_wizards) - 1:
            move.messages = [val for (key, val) in sorted(msg.items())]  # Сортируем команды по возрастанию ID могов, для которых они предназначены
            # Т.е. в move.messages будет массив объектов Message, отсортированных по возрастанию ID соответствующих магов
        else:
            log("Wrong msg length in send_commands()")


def receive_commands(self, me: Wizard):
    if me.messages:
        lane, skill_to_learn, raw_message = None, None, None

        for m in me.messages:
            if m.lane is not None:
                self.commands.lane = m.lane

            if m.skill_to_learn is not None:
                self.commands.skill_to_learn = m.skill_to_learn

            if m.raw_message is not None:
                self.commands.raw_message = m.raw_message

29.11.2016 0:19:50