Deptown Programming Contest (DPC)
Здравствуй Гость! Ты попал на страничку программерского соревнования в рамках проекта Диптаун =)
DPC это соревнование, участие в котором принимают роботы, находящиеся в виртуальном пространстве диптауна. Управляет роботом программа, написанная на языке K++.
Идея соревнования была заимствована из проекта Robocode и адаптирована под текущие реалии и специфику платформы Диптаун.
Содержание |
Для чего это нужно?
Если говорить откровенно, то мы еще сами не знаем зачем все это и что из этого может получиться :)
Но на самом деле, у DPC целей много. Во-первых, популяризация самого проекта Диптаун и наглядная демонстрация возможностей платформы Диптауна. Во-вторых, это отличный способ изучить язык K++ в игровой обстановке, а так же попробовать себя в решении нечетких задач и умения находить нестандартные решения. В-третьих, лучший способ отладить некую систему, это начать активно ее использовать. Заодно, мы сможем лучше представить, какие функции более всего востребованы разработчиками, что использовать удобно, а что требуется изменить, ну и так далее.
Наконец, это просто забавно и жутко интересно :)
Основная идея
Есть некая арена, в пространстве которой существуют боевые роботы. Каждый робот принадлежит одному из участников. На каждом роботе крутится программа управления этим роботом. Цель -- победить соперников и остаться в живых. Третьего не дано :)
Правила соревнований
DPC это в первую очередь соревнование мозгов, а потом уже случайностей и прочих факторов. Поэтому, влияние случайностей должно быть сведено к минимуму. Однако убрать их совсем не получится, опять же в силу специфики платформы, да это и не нужно. Впрочем, нельзя исключать и элемент зрелищности, где случай может сыграть свою роль. Поэтому на данный момент у меня есть несколько вариантов игры :)
На данный момент, я их представляю следующим образом:
Вариант первый: Sumo Challenge
В этом варианте соревнований самые простые правила и роботы. Однако это не значит что победить в нем легко. Наоборот, мне кажется что это лучший из вариантов, поскольку все зависит от тактики робота и качества программы.
Арена
Арена -- это пространство для соревнования. Арена зависит от типа проводимого соревнования. В данном случае это площадка без ограждений, размерами скажем 10 на 10 метров. Сама площадка может висеть над пустотой или просто являться возвыщением.
В определенных местах на нее помещаются два робота соперника. По сингалу роботы начинают движение. Основная задача -- вытолкнуть соперника за пределы площадки, самому оставшись на ней. Роботы полностью идентичны, они состоят из одинаковых компонентов и имеют одинаковые параметры мощности и скорости. Единственное отличие в программе управления. Более умная программа должна учитывать положение соперника и нападать, в то же время стараясь не подставляться под удар.
Роботы
Sumo это простейший вид соревнований, соответственно и роботы должны быть простые :) На данный момент планируется 2 вида роботов: четырех колесные и трехколесные. Первый имеет два рулевых колсеса являющиеся так же ведущими (машина с передним приводом), второй -- два ведущих и одно рулевое (трайк).
Трехколесный робот более маневренный, однако и менее устойчивый. Четырехколесный более устойчивый, но управлять им сложнее.
Управление
Независимо от конструкции, все роботы обладают следущим набором систем:
- Приводы колес (моторы). Можно задавать скорость вращения и угол поворота (для ведущих колес).
- Сенсор краев -- с его помощью можнно определять положение робота на площадке
- Радар -- служит для слежения за роботом противника. Дает информацию о его скорости и направлении движения.
Дополнительно, сам робот знает скорость своего движения и свое положение в пространстве арены.
Стратегии
Постараюсь привести пример нескольких стратегий поведения робота, а также возможные контр стратегии:
Берсерк
Наверное самая ломовая стратегия :) Просто фиксируем положение противника и гоним в него, в надежде что так мы его скинем с площадки.
- Плюсы: Простота кода :)
- Минусы: Если противник не дурак, то уже после первой игры можно придумать как уворачиваться от такого. Не забывайте, что если берсерк достаточно разгонится, то затормозить он уже не успеет и просто улетит за пределы площадки, в результате проиграет :)
Трус
Стратегия, обратная "берсерку". Стараемся всячески избегать противника и находиться от него подальше.
- Плюсы: выиграть сложно, но зато сам не улетишь. При определенных условиях, грамотно написанный "трус", будет выигрывать у "берсерка", поскольку последний сам улетит :)
- Минусы: если ваш противник не берсерк, то выиграть будет практически невозможно
Тормоз
Данная стратегия направлена на максимальное затягивание времени ведущее к ничьей. Робот может нарезать круги по площадке, одновременно сочетая в себе черты труса.
- Плюсы: если ваша цель -- ничья, то можно подумать об этом варианте :)
- Минусы: умрем раньше, чем два "тормоза" на арене завершат бой
А что дальше?
Важно понимать, что вышеописанные стратегии являются лишь типовыми шаблонами. Настоящий боевой алгоритм должен уметь сочетать в себе всех трех персонажей. Например, он может вести себя как трус, уворачиваясь от ударов агрессивного соперника, в то же время если сложилась такая ситуация что соперник оказался на самом краю площадки, такой робот может перейти в режим наступления и тем самым выиграть.
В общем случае стратегий можно придумать бесконечное количество :) Все ограничивается лишь вашей фантазией, временем и желанием :)
Очки
За каждую победу начисляется одно очко, за поражение ноль.
Для предотвращения затягивания боя, вводится трехминутное ограничение на длину боя. Если по истечении этого времени оба робота остались на площадке, бой завершается вничью. Для большей статистической значимости возможно проведение нескольких боев, после чего победившим считается соперник, набравший большее количество очков.
Вариант второй -- классическая Robocode
Здесь на первое место выходит зрелищность :) Действие происходит на поле, на котором может находиться сразу несколько соперников. Каждый соперник представлен танком, имеющим пушку и радар. По условиям, танки так же идентичны.
На поле боя могут находиться вспомогательные элементы вроде стен или возвышений. Возвышения позволяют стрелять дальше, если въехать на них, стены помогают защищаться от вражеских выстрелов.
Возможных вариантов стратегий здесь еще больше чем в Sumo. Описывать их все не хватит времени, тем более что по этой теме есть масса материалов на официальном сайте.
Текущее положение дел
--Velaar 02:56, 18 мая 2009 (NOVST) Всех желающих принять участие в реализации проекта просим в Deeptown DING project.
Как только перейдем к этому проекту, появится соотвествующая новость и запись здесь.