войти зарегистрироваться

HabraWars — первый турнир

HabraWars

О чем идет речь можно прочитать в предыдущем топике. Вкратце: HabraWars — это игра для программистов, в которой участники программируют роботов.

Только что я залил на сервер новую версию и теперь всё готово для проведения первого турнира.

Внимание: нужна свежая версия Firefox или Google Chrome.

Адрес сайта: habrawars.appspot.com (регистрация новых пользователей закрыта до 20 ноября в связи с проведением турнира).

Изменения в новой версии:
  • Исправлены все основные баги;
  • Добавлен нормальный редактор кода (спасибо всем, предложившим варианты);
  • Под каждым роботом теперь отображается его состояние;
  • В правом нижнем углы арены отображаются fps;
  • Появилась возможность выбора количества противников (от 1 до 6);
  • Теперь роботы могут ускоряться, но это приводит к затратам энергии (см. раздел «Помощь»);
  • В качестве параметров в функцию теперь также передаются списки летящих снарядов и параметры среды (см. раздел «Помощь»).
Теперь появилось достаточно возможностей для реализации различных стратегий.

Правила проведения турнира

Для участия в турнире необходимо будет нажать на кнопку «Участвовать» до конца четверга (19 ноября). 20 ноября на сайте и здесь будут опубликованы результаты турнира и записи боев. Все участники турнира будут разбиты на группы от 2 до 7 роботов (в зависимости от общего количества), в каждой группе будут проведены не менее 5 раундов. Победителем раунда является выживший робот. Победителем группы — робот, победивший в большем количестве раундов. Победители в группах формируют новые группы и все действия повторяются до выявления одного победителя.

Пара скриншотов

HabraWars

HabraWars

комментарии (269)

  • безумная штука %) только вот у меня 1024х768 и не всё поле видно, слегка неудобно :(
    • F11 нажмите (правая колонка дублируется под роботами).
  • А когда-то программисты воевали с помощью corewar…
    • Пользуясь случаем рекомендую свою обзорную статью про игру для программистов CoreWars. Также еще можете прочитать мои обзоры игр Colobot и Robocode.
  • Хм, у меня после некоторых правок кода Chrome перестал ботов отрисовывать на Canvas'e.

    P.S. Ребят, не сочтите за оффтоп, кто может пару статей от моего имени опубликовать? Плз, кармы просто не хватает
  • 1. Если победитель в каждом раунде только один, то по-моему, раундов в группе должно быть по крайней мере не меньше чем роботов в этой группе, лучше больше.
    2. Может стоит стартовую позицию делать не случайную, а одинаковую для всех роботов? Например расставлять их по кругу спиной в центр.
    • 1. Если роботов будет не слишком много, в след. круг будут выходить 2 робота из группы;
      2. А зачем? Сейчас есть возможность уворачиваться от выстрелов, поэтому начальная позиция не навредит.
  • Я не JS и GA не спец, но хотел попробовать и совсем не понял как отлаживаться.
    Консолька, в которую можно было бы выводить текст была бы очень кстати.
    • Через firebug.
      • Спасибо!

        Ещё бы FPS ограничить…
        • А сколько у вас сейчас?
          • 40-50, консоль летает.
    • Активировать консоль и console.log('tratata');
  • Сделайте скрины побольше
    • img80.imageshack.us/img80/5621/screenshot1ln.png
      • Больше интересует скриншот с кодом
      • Опять цвета. Шестой робот на картинке имеет цвет средний между 1-м и 2-м, причем, очень близкий и к тому, и к другому. Возможно, виновата цветопередача жк-мониторов. Предлагаю для 6-го оранжевый цвет, чтобы путаницу предотвратить.
        • Оранжевый уже у 7-го. 6-го сделал белым.
          • Могу порекомендовать хороший набор цветов: цвета радуги + черный + белый. Итого 9. Достаточно контрастные, и думать долго не надо: природа уже подумала.
            • А фон? Это минус один цвет.
              • Роботов всего семь максимум.
              • Фон можно серый.

                Бест регардс
                Кэп. :-)
            • Голубой и синий не сильно контрастные цвета.
  • раскрыть комментарий
    • Проверки никакой нет. Старая версия сайта в Опере отображалась не полностью — хотя казалось, что все нормально. Опера не поддерживает текст на Канвасе и ещё некоторые его функции.
  • Небольшое предложение, нельзя ли было бы тратить энергию не только на выстрел но и на ускорение, т.е. чтобы когда ты понял что в тебя летит снаряд, то можно было бы ускориться на сколько хватит энергии.
    • читать справку, срочно
      есть такой параметр уже
  • упс, кажется что это уже реализовано :)
  • Opera и IE точно не подходят? (и почему, коли так)
    • Из-за неполной поддержки HTML5 Canvas.
  • Супер, очень оперативно! Ну что, сдаетесь?
    • Ну уж нет. Let the battles begin!
  • А если я захочу предоставить на соревнование несколько вариантов бота?
    ///Можно стрелочку над своим ботом добавить ?))))
    • Несколько нельзя — это будут нечестно по отношению к др. участникам. А стрелочку зачем?
      • Что бы было сразу видно где мой бот.
        И еще: Можно включить горячие клавиши для начала игры? Т.е. я нажал F5 и началась битва?
      • Эээ, ну не сказал бы что это не честно по отношению к другим участникам. Как по мне — правильней было бы разрешить любое количество алгоритмов от участника (или ограничить каким-то числом исключительно для избежания нездорового фанатизма), но проблема тогда в том, насколько ж затянется такое соревнование. Режима «быстрой эмуляции» то нет.
        • Не у всех же есть много времени для участия.
        • Алгоритм должен быть один — самый лучший! :)
          • к сожалению, выявить лучший сейчас затруднительно, так как нельзя своих ботов со своими тренировать
            • Если хотите проверить на своих — замените файрбагом содержание textarea (id=«sample») на свой код.
              • попробовал.
                после этого стал стрелять только мой бот, а враги разбежались :/
                • в итоге flawless victory, видимо различия в параметрах/результате есть или функциях где-то.
                  • Абсолютно никакого различия.
              • Пытался вставить код своего бота в это поле — вылезает ошибка что-то типа .....action — не является функцией.
                Опиши последовательность действий в файрбаге как это сделать, я наверное что-то не то делаю…
                • В разделе HTML найти эту textarea, даблклик и заменить содержание, не удаляя тегов самой textarea.
                  • я просто убрал параметр display: none; чтобы видно textarea было в браузере, но код изменив код ботов, не смог запустить Арену.
  • Кстати, неплохая идея для стартапа!
    • Таких стартапов уже много было, мне просто хотелось внутри Хабра что-то такое организовать.
      • А сколько тематической аудитории как на хабре собственно нигде больше бесплатно и не привлечешь )
  • Какое будет соотношение между скоростью снаряда и скоростью робота? Как мне кажется, при разных соотношениях могут быть разные стратегии.
    • Все параметры симулятора будут такими же, как сейчас.
  • а когда кнопка появится для участия?
    • в четверг утром, получается?
      • Да. Код можно писать уже сейчас, в четверг просто засабмитить его надо.
        • В четверг будет топик, напоминающий о Начале? :)
          • Так началось уже сейчас — в четверг только подтвердить участие нужно. Отдельного топика не будет.
            • лучше бы сделать топик (его всегда можно вернуть в черновики же)
              боюсь забыть — работа же отвлекает )
              • Если его сделать, туда зайдет пара тысяч человек и нажмет кнопку «Участвовать».
                • Точно! Всё продумано блин :)
                • ммм… можно перед топиком закрыть регистрацию же
                  • Тогда топик будет не к месту.
                    • можно сделать кнопку «участвовать» доступной только для тех, кто зарегистрировался до публикации топика.
                      • Таких больше 10 тысяч.
                        • Много уже подтвердивших своё участие, если не секрет? :)
                • А топик всё равно появился :)
                  4dmonster.habrahabr.ru/blog/75698/
                  Хотя конечно немного о другом, но все равно напоминающий о Начале :)
  • в справке:
    # arena_width — размер арены по горизонтали;
    # arena_width — размер арены по вертикали;
  • не хватает константы для радиуса поражения снаряда
    чему он сейчас равен?
    • 45 от центра робота, но урон уменьшается с увеличением расстояния.
      • Можно формулу? :)
        • Линейная 20/45 * d + 20, где d — расстояние от центра взрыва до центра робота. При d > 45 урон не наносится.
          • Прошу прощения, там -20.
          • а вот это не правильно ИМХО
            я понимаю что так реализовать проще
            но точность должна быть вознаграждена
            хотя бы 550/(x+10)-10
            ( графики на wolframalpha.com)
            • всмысле неправильн что линейно
              • Я понимаю, что это не совсем точно, но в реальной жизни попадание снаряда в центр танка, например, не обязательно нанесет больший урон, чем попадание в какую-то другую часть.
  • очень интересно) спасибо вам за турнир!!)
    буду принимать участие =)
  • ReferenceError: get_angel_control is not defined
    в FF 3.5.3 Portable и Chrome 4 portable
    • angle — исправили в новой версии
      • Все, понял в чем баг, в стартовой программе angel забыли заменить
        • А, нет, понял, это у меня загрузился предыдущий сохраненный код
    • Замените в своем коде angel на angle и добавьте параметры shots и params в функцию action (см. Помощь).
  • Понедельник насмарку :)
  • В документации очень не хватает информации по поводу того как рассчитывается damage. Я конечно понимаю, можно в коде посмотреть и все такое, но программисты ведь ленивые люди )
  • А Math.sin и Math.cos работают нормально с градусным углами? Или это я туплю…
    • Чтобы посчитать синус от угла в градусах: Math.sin(angle / 180 * Math.PI)
      • Да, уже разобрался. Весь косяк был в нестандартных координатах.
        Расчёт координат для упреждающего выстрела:
        var rad_a = Math.PI / 180 * target.angle;
        var next_x = target.x + Math.cos(rad_a) * 30;
        var next_y = target.y — Math.sin(rad_a) * 30;
        На семпловых ботов действует, как снайперка. А если 30 заменить на переменную, рассчитанную с учётом расстояния до цели и её скорости — будет вообще круто.

        Пока 6 ботов рву чаще, чем они меня. Так что в турнире участвую. (:
        • Зачем в Спортивном программировании выкладывать какие-то решения, хоть они и очевидные?

          • Да ну, бросьте. Какое спортивное программирование?.. Это скорее развлечение для новичков. Ни тебе препятствий, ни дружественных целей.
          • get_shot_destination — вообще читерская функция. Робот не должен такого знать. Иначе весь смысл придумывать хитрые траектории стрельбы вообще исчезает.
            • Она не читерская, если её убрать, вы это и сами можете посчитать.
              • Как?
                И вообще, это ж бои программистов, а не бои пользователей фреймворков. Апи должно предоставлять только необходимую информацию, а её обработку должен делать программист.
                • function get_shot_destination(shot) {
                      return {x: shot.x + Math.cos(shot.angle / 180 * Math.PI) * shot.range, y: shot.y — Math.sin(shot.angle / 180 * Math.PI) * shot.range}
                  }
                • Понял. На самом деле не get_shot_destination читерская, а shot.range. Не должен танк знать, куда упадёт снаряд.
                  • Ну это как раз даже человек может прикинуть, просто взглянув на траекторию.
                    • Ога, особенно если на пути снаряди ещё парочка танков…
            • наоборот, было бы побольше бы таких функций в Api, стало бы куда интересней, а то каждый наверняка под себя пишет разные стандартные по функционалу вещи типа найти ближайшего врага или найти врага, к тоторому ближе всего поварачиваться
              • Всё равно будут реализовывать custom-фильтры. Типа «найти врага к которому блиэе поворачиваться, но не дальше 850px».
        • спасибо за код, улучшает поведение бота! правда, почему-то скопированный отсюда он не работает — пришлось переписать вручную. там русские буквы затесались или это глюки Хрома?
          • минус на тире заменился парсером
          • Скорее это баг Хабры.
        • Ага, я тоже с +cos, -sin посидел некоторое время :) Давненько 2D-игры не писал :)
  • Если пытаюсь выбрать enemies[0], игроки просто не появляются
    • Если не появляются, значит ошибка в коде.
    • Для перебора противников юзай

      for(index in enemies) {
      var enemy_id = enemies[index].id; // ну и т.д.
      }
      • да я так и дела, спасибо )
  • Эээ, очень хотелось бы задавать отдельно скрипты для ботов. (или по крайней мере нужно было оставить им стандартный алгоритм). А то как же протестить эффективность алгоритмов )
    • Так а смысл тестировать своего против своего? На турнире свой только один будет.
      • В том-то и дело что в таком режиме я тестирую своих против своих. Тоесть запускать арену в принципе бессмысленно потому что все боты там управляются одним алгоритмом.
        Я сейчас вот сделал проверку по my_state.id и задаю разные алгоритмы ботам чтобы увидеть преимущество )
        Очень необходима эмуляция быстрых сражений (без прорисовки), так же был бы удобен вариант с прорисовкой в ускореном режиме (раз на 4 кадра прорисовывать)

        Вот такой код if (my_state.id==0)
        {
        return my_1(my_state, enemies, shots, params);
        }
        (my_1 не приводжу, т. к. много кода)
        приводит к вылетанию фаерфокса без каких-либо сообщений… ну я в общем-то понял, что индексы везде с единицы начинаются )
        • На счёт ускоренной битвы согласен. Как вариант ещё 1000 ускоренных битв и вывод статистики. А-то пока 6 противников сдохнут — пол-часа прошло. ):
          • Ускоренный не получится — отрисовка сейчас занимает процентов 10-20 времени.
            • А если без отрисовки?
              • Без отрисовки получается быстрее на 10-20%.
                • Как простейший код на ЯваСкрипте может жрать столько ресурсов?
                  • eval() в коде же
        • Ё, понял свю ошибку. Мне сначала показалось, что все боты исполняют мой алгоритм )))
      • Ооо, пока я тут пишу, мой красавец наконец-то вынес кучу ботов с базовым алгоритмом.

        Уже очень хочу возможность с кем-то посоревноваться.

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

    Банальная вещь, которая и мне в голову пришла только сейчас :)

    Если победителем раунда считается выживший бот, то правильная тактика будет соответственно — не убивать, а выжить в первую очередь. Я уже представляю раунды где все разбегаются в разные стороны, убивают тех кому не повезло оказаться в центре поля, и ждут окончания времен, разве что удирая от выстрелов оппонентов.
    Ведь если скорость полета снаряда такая, что боты, находящиеся на максимально возможном расстоянии, могут увернуться, совсем не получив повреждений, то это будет эпик фейл, потому что такой турнир может никогда не закончится :) (может вы это все проверяли и продумывали, тогда извините за много букв)
    Возможно стоит делать счет на убийства (нанесенный урон), а не на последнего выжившего.
    А еще лучше — по какой-то усредняющей формуле, например: points=killed_enemies+total_damage/100-is_killed*2
    Тогда можно ввести и максимальное время турнира.

    Еще правильнее пожалуй было бы ввести в игру respawn и respawn_time, но это наверняка излишне на даном этапе. У вас и так много работы :)
    • Так да, нео может уворачиваться от пуль на большом расстоянии, значит над правилами проведения турнира нужно еще думать )
    • Я _всё_ продумал. Смысл игры в решении задачи — сейчас задача состоит в выживании. Все роботы изначально находятся в равных условиях, а побеждает наиболее приспособленный. Прятаться по углам — плохая тактика, у кого-то робот будут стрелять по «наиболее живому», поэтому после первых выстрелов начнут убивать вашего робота, который убежал в угол. Плюс отсутствие заднего хода заставляет постоянно находиться в движении, что тоже свои особенности вносит.
      • Ну посмотрим) ведь если задача состоит в выживании, то проще все-таки оборонительная тактика с отстреливанием по возможности, а на большом расстоянии уворачиваться получается элементарно.
        • Достаточно стрелять по роботу, который только что увернулся от другого выстрела.
      • Кстати, а ограничение по времени боя то есть? А то вполне возможна патовая ситуация. Когда я код допиливал, мне пришлось вручную добавлять ограничение в 200к фреймов.
        • 200К фреймов — это больше часа на один бой. Такого точно не будет.
          • У меня не было таймаутов, раунды рассчитывались один за одним. И отрисовку я выкинул нафиг.
            • Ну, а кто потом это всё смотреть-то будет?
              • Да никто конечно. Просто если два робота каким то образом встанут в клинч (например будут ждать действий друг друга), бой продлится до бесконечности, ну или пока браузер не вмешается.
    • killed_enemies — тоже может привести к появлению странных ботов
      я, например, сейчас сделал бота, который любит добивать (health<10). Только что при тесте на семпловых он убил всех(!)
      при этом, если таких ботов будет несколько, то возможен пат. если на него не нападают, а осталось больше 2 врагов, то он нападать не будет (если health>10)

      мне кажется, решением проблемы пата бы было что-то вроде армаггедона через некоторое время — хаотически летающие снаряды
  • Чйорт, пора спать )))

    А кто-то собственно собирается принимать участие?
    • Я буду, обязательно.

      У друга 19 числа свадьба… думаю как бы не забыть нажать на кнопку нужную
    • Не раньше, чем сделают ускоренную симуляцию.
    • Я планирую, если не забуду или лень не станет.
    • Я буду.
  • очень хотелось бы иметь возможность поиграть с живыми людьми прямо сейчас.
    по типу бойцовского клуба и его клонов — вызвать на дуэль, групповой бой и т.п.
    и чатик! ;)
    • Идея понятна, но как не отдавать свой алгоритм сопернику? Код же на Javascript.
      • исполнять на сервере (http://en.wikipedia.org/wiki/Server-side_Javascript)
  • У shots[i] не хватает параметра «время полёта» или данных о точке старта.
    • точка старта приблизительно равна координатам стрелка (айди стрелка известен)
      • это понятно, хотелось бы просто что-то вроде shot_id ещё, хотя так же чем-то shooter выручить может.
    • shots[i].range — оставшееся расстояние полета.
      • Имел в виду данные о точке старта выстрела.
        • А откуда танк может её знать?
        • Вы их можете сами собирать, если нужно.
  • А ничего, что робот может вылезти из песочницы и начать управлять игрой?
    Например:
        var shot_at_me = this._shot_at_me(my_state, shots);
        if (shot_at_me) {
            var window = (function() { return this; })();
            window.engine.shots = [];
        }


    Я понимаю, что так не честно, но хотелось бы и технического решения. :)
    • А если останавливать снаряды, можно снять js-версию Матрицы.
    • А на турнире будет другая песочница :)
      • Главное чтобы она была полностью совместима с этой, а то еще окажется, что код перестанет работать )
  • А что делает get_shot_destination(shot)? Кроме пояснения в хелпе:)
    • Получает на вход элемент из массива shots (летящие снаряды).
      Возвращает координату падения указанного снаряда.
      Вроде так.
    • Считает точку попадания снаряда.

      function get_shot_destination(shot) {
          return {x: shot.x + Math.cos(shot.angle / 180 * Math.PI) * shot.range, y: shot.y — Math.sin(shot.angle / 180 * Math.PI) * shot.range}
      }
  • а просто понаблюдать за турниром как-то возможно будет?
    • Да, сделать просмотр без авторизации :)
    • Конечно, вместе с результатами будут выложены записи боев. Без авторизации.
  • А будет возможность наблюдать за турниром? Что-то я не чувствую в себе великой силы для того, чтобы участвовать, а вот посмотрел бы с удовольствием.
    • Черт, долго не обновлял страницу и этот вопрос уже задали строчкой выше. Глупо как-то получилось…
    • НЛО, слышишь меня? Я хочу удалить свой комментарий!
  • Здесь не хватает habra-openid. Эхх…
  • Хочется такого же свеженького, но на/для Java. Старые игры для Java-программистов, такие как Robocode, поднадоели.

    P.S.: Кстати на Хабрахабре, уже есть блог для таких тем «Игры для программистов».
  • Я может туплю… какой язык используется, JS?
  • А что мешает «злоумышленнику» с помощью дополнительного гуглоакка завести клона, который будет поддерживать основного бота? Причём это можно сделать как-нибудь неочевидно, и доказать клоноводство будет сложно.
    А ещё, робот, впадающий в маразм бесконечный цикл, формально не нарушает правил, с этим надо что-то делать. Кстати, имхо было бы интереснее, если роботы запускались в разных потоках — игра превратилась бы из походовой в риал-тайм, а более быстрый код имел бы преимущество.
    • Ну, читеры просто идут лесом :) Тут задача такая, что больших вычислений не предполагается.
  • когда будет хабра олимпиада?! и кто будет освещать?
    хочу подробностей битв, интриг, расследований! (:
  • Можно узнать, как расходуется энергия при ускорении? Или это большой секрет? И еще — можно как-то заставить прогу не только управлять роботом, но и выводить куда-нибудь текст?
    • Ответ на второй вопрос: console.log(«Хозяин, помираю!»);
      • Спасибо, помогло. Сегодня впервые увидел firebug, не осилил сразу найти нужную функцию.
  • Затягивает это дело!
    Пожелания для отладки и отработки стратегии:
    — хотелось бы кнопку «пауза»;
    — возможность пошагового просмотра, то есть проиграть n-ое количество фреймов при нажатии на кнопку;
    — хотелось бы иметь несколько своих ботов и натравливать их друг на друга для оттачивания манёвров, а то со стандартным уже неинтересно :)

    Понимаю что некоторое можно сделать при помощи firebug, но всё же это не очень комфортно…
    • При желании можно поставить брейкпойнт в начало cull_frame и отматывать пошагово.
  • Напомнило канал Discovery с их битвами роботов. Скоро будет мессиво! Жаль, времени нет на написание своего робота (((.
  • У меня предложение по поводу турнира.
    Просто после долгой возни со своим ботом я все-таки пришел к выводу, что я делаю робота, который до поры — до времени старается избегать неприятностей. Но я же не один такой! — а если все боты будут разбегаться, то никакой игры не будет.

    Я раньше предложил армаггедон (случайные снаряды), но как-то это не очень.

    Предлагаю решение: в комнате должна быть хотя бы пара семпловых ботов. Более того, если семпловых ботов не остается, и уже какое-то время ничего не происходит, вбрасываются новые семпловые боты.

    Что скажете?
    • Нужно просто убрать инфу о летящих снарядах. Это была плохая идея.
      • но надо же как-то знать, кто в тебя стреляет! иначе, на мой взгляд, будет полный рандом
        а запрещать уворачиваться, мне кажется, не решение.
        «ныкаться по углам» можно и без всяких уворотов — просто не начинать атаковать, пока не вынудили

        P.S. Стратегия невмешательства работает. Сейчас 9 побед из 10 с шестью семпловыми.
        • кто в тебя стреляет можно узнать и по тому, что у тебя уменьшелся хелс, у него мало заряда, и повернут он в твою сторону. А с этими снарядами есть точки от которых нужно у ворачиваться, и теперь с далека попасть просто не реально.
          • о — согласен!
            я просто сразу уже на вторую версию правил попал, а что можно так рассчитать — в голову не пришло
          • Попасть реально. Нужно стрелять по роботам, у которых мало энергии.
            • Ещё можно стрельбой выматывать тех у кого её слишком много :)
              • ага и свою заганять в 0…
                • Это да :) Но если стрелять с упреждением, это неплохая тактика :)
                  • была до появления инфы с выстрелами.
                    • Как раз наоборот :) Если враг вынужден тратить энергию на бегство, а мы — на выстрелы, то если мы его хоть чуть чуть раним при этом — он рано или поздно умрёт. Я уже опробовал.
    • А если семпловые боты будут бить друг друга до бесконечности? Да и при чем тут вообще семпловые боты? :)
      Я бы ограничил время боя и начислял очки роботам за точные попадания бомбами.
      После окончания раунда выжившим роботам начислял бы ещё очков в соответствии с оставшимся здоровьем.

      В этом случае по сути даже не нужны никакие группы — можно просто разбивать роботов случайным образом на семерки и проводить бои. После того как каждый робот провел k боёв, считается сумма очков и выбирается, например, топ100. Далее среди них проводятся бои по той же схеме…
      Хотя схема боёв это уже другая история.
      Главная суть подхода, что бой всегда закончится и трудно просто отсидеться, надо атаковать чтобы набирать очки…
      • Ограничение по времени будет.
        • А +1 к победе всем выжившим? Или у кого максимум жизни?
          Хотелось бы все правила услышать до начала турнира :)
          • При таймауте никому ничего не начисляется. Иначе действительно будет проще отсидеться. Таймаут 30К фреймов (это минут 10 на моей машине).
            • А потом что?
              • Все по баранке и следующий матч :)
                Не плохо.
              • Потом запускается новый раунд.
            • Если после X матчей никто из группы не набрал ни одного очка, никто из группы не проходит? :)
              • Если за 10 раундов ни один так и не завершился — то да. Но я не думаю, что такое возможно.
            • ААА. Какой выстрел стал красивый… Теперь без скинов для ботиков никак.
      • ну как, семпловые боты начнут на кого-нибудь нападать, начнется активность. вероятность того, что они будут стрелять только в семпловых мала.
    • Сэмпловые боты будут только мешать — у них алгоритм тупой, они не преследуют цель выжить. А вбрасывать новых ботов вообще неправильно — у них хэлсов будет больше. Ваш робот сейчас рулит, потому что он соревнуется с сэмпловыми ботами — у них одна глупая стратегия. Противники будут разные.
      • Вот поэтому и нужна поддержка соревнования со своими же алгоритмами.
  • Хотелось бы уточнить 2 вопроса:
    1) Какова скорость снаряда относительно максимальной скорости робота?
    2) В какой последовательности выполняются действия (выстрел, поворот, движение) при каждом шаге робота?
    • Какова скорость снаряда относительно максимальной скорости робота?

      Скорость снаряда в params.shot_speed, макс. скорость робота — 1.
      выстрел, поворот, движение

      В такой последовательности как раз и выполняются.
  • Что вы сделали со средой? Я немогу создать свой класс. Раньше мог.
    • Кроме отрисовки в среде вообще ничего не менялось.
      • Вставляю описание класса с моего прошлого проекта, и получаю «SyntaxError: unterminated regular expression litera». Просто вставил описание класса. Даже не создаю ниединого объекта.
        • Сохраните код и скажите имя пользователя в гугле.
          • отправил в личку…
            заранее спасибо.
            • В личке ничего нет.
              • ладно…
                Oleg.Baranovskiy _at_ gmail.com
                • Ошибка в 57 строке — пропущена запятая.
                  • еще было: вместо ;.
                    Спасибо. Больше не буду беспокоить с такими проблемами.
  • Время начала турнира — в четверг 00:00 часов по московскому времени?
    • т.е. 23:59:59 четверга
      • круто. А какая инфа будет в течении турнира?
        Списки, результаты, схемы, таблицы...?
        • В течение турнира никакой — сразу после окончания будет таблица и реплэи.
    • Да. К этому времени нужно засабмитить свой код для участия.
  • Можно в текущую песочницу к fps добавить счетчик фреймов?
  • Господа, а у вас Мстительные алгоритмы?
    • Чувствую, что у большинства, да :)
    • Дефолтный хороший. Большенство от него и танцует…
    • У меня пока нет. Но некую мстительность буду добавлять, если бот сильно докучает.
  • А может, в след. версии АПИ стоит сделать побольше коллбеков? например, очень не хватает события смерти противника, приходится в цикле их перебирать при изменении числа, чтобы узнать кто именно скончался.
    • Какая разница, кто скончался, главное что не ваш собственный робот :)
  • Для 7ми роботов арена маловата…
  • Почитал про Robocode — там такой жести напридумывали уже оказывается, разве что ИИ не ставят в роботов :) Интересно, как моя поделка будет справляться :)
  • Было бы неплохо показывать здоровье и энергию в виде чисел справа от текущих плашек на панели справа.
    • Ага, и после смерти робота рисоваться цифру с местом занятым.
  • >>участники турнира будут разбиты на группы от 2 до 7 роботов
    Почему такой большой диапазон?
    • На всякий случай, чтобы участники были готовы к разным конфигурациям.
      • просто больше 5ти на этом поле — месево. Фактор рандома начианает зашкаливать.
        • Это можно сгладить проведя серию матчей.
  • поставьте if(confirm()) на кнопку «вернуть изначальный шаблон»
    а то я уже дважды на нее нажал, хорошо хоть иногда промежуточные версии в тхт сохраняю.

    а еще неплохо-бы ее убрать куда-подальше, а на ее место поставить что-то типа «quick test», автоматом сохраняющее, переключающее на арену, и запускающее бой. и неплохо-бы где-то хранить предидущий выбор количества противников, хоть в куках.
  • Отправил. Буду ждать результаты, а так же записи сражений.

    Всем удачи.
    • Аналогично.
      Интересно хоть кто то из победителей покажет код своего робота.
      Если я войду в топ10 (ой чет не верится:) обязательно покажу.
      Удачи. Скрестим пальцы за своих чад.
      • Хорошая идея кстати. Я тоже покажу код если войду в top10.
  • Дошлифовал своего робота и записался. Посмотрим, кто кого :)
    • Блин, а можно когда робот возвращает мусор вместо нужных цифр просто предполагать дефолтные значения, а не убирать его с поля куда подальше? :) Я уже несколько раз напоролся на это )
    • Да, оказывается в одном месте я здорово сглупил :)
  • Когда будут первые результаты? Хотя бы по приблизительным расчетам.
  • Ура, допилил программу минимум. Теперь спать-спать-спать -_- (у меня 3 ночи).
  • я выставил странный гибрид из «стабильной» версии и «продвинутой», ну хоть как-то работает :)
  • А я на последней минуте подумал, что время может отсчитываться по МСК… Так его, бедного, хромого, и отправил… :( не повезло мне, видимо, в этот раз
  • Хочу попросить о том, чтобы в action роботу передавался Canvas, что-бы можно было визуализировать мысли.
  • Жду события дня! Оле оле оле, Кержаков, Кержаков, Кержаков! Блин, это, кажется, не отсюда.
    • Эх… Зачем напоминать? :(
      • я думаю что мой робот примерно так и выступит…
  • а где можно будет почитать про результаты? заодно и посмотреть. Жду с нетерпением
    • Здесь будет топик, результаты на сайте.
      • .топик этот видеть хочу Я
      • А во сколько примерно, неизвестно? )
        • Часа через 2.
          • сколько было участников?
            • 67, не считая тех, кто не прошел фильтрацию :)
              • Вау, а что за фильтрация была?
                • Тех, у кого код ошибки выдает, и тех, у кого diff от sample робота меньше 10 символов.
                  • Я очень извиняюсь, но мы все ждем. :)
                    Хотя бы статус бы… Получить бы. :)
                    • 15 минут.
                    • Да… уж…
                    • Судя по ускорению ботов на полигоне, роботы тупят, прячутся друг от друга и не хотят бороться. Эксперты связывают это с наличием в первоначальном коде строчки "//Месть!"", которая не поддавалась удалению. Таким образом, говорят эксперты, роботы боятся накликать на себя гнев противника. Однако, по словам другого специалиста, все намного проще. Просто сегодня многие роботы увлеклись идеей «Make love, not war», и автор проекта наблюдает как роботы выстраиваются один за другим и иргают в известную групповую игру Змейка, полностью отключив орудия войны.
                      • Гм… В мире, где двое всегда(!) могут положить одного, вне зависимости от действий одного — лучшая стратегия не влезать в бой без веских на то причин. :)
                        Так что, make love, в моем изложении, превратилось в:
                        «Если достаточно долго сидеть на берегу реки, ты увидишь проплывающий по ней труп врага» (китайская пословица)
                        Если не я один такой, то у организаторов жопа… Придется запускать наглого подстрекателя, который будет стрелять во всех подряд, прикрываясь другими.
                        Но элемент лотереи, скачек или тотализатора все равно остается. :)
                        В общем, ждем. :)
  • Всё!
    habrahabr.ru/blogs/sport_programming/75928/
Только авторизованные пользователи могут оставлять комментарии. Авторизуйтесь, пожалуйста.