345 читателей, 44 поста
Администрация
Модераторы
Этот блог будет транслировать события из пока загадочного и непонятного для большинства мира спортивного программирования. Насколько оно загадочно и непонятно прекрасно иллюстрируют публикации такого рода.
На самом же деле спортивное программирование — это состязания с учетом времени по решению программистских задач на алгоритмы, не имеющие прикладной направленности и ведущие свое происхождение от старых добрых олимпиад по информатике. Для успешного участия в этих соревнованиях необходимо иметь познания в математике и алгоритмах, уметь программировать, а также быть очень умным, быстрым и точным.
Основные состязания по спортивному программированию в мире это:
студенческий чемпионат мира АСМ
Google Code Jam
TopCoder Open Algorithm Competition
TopCoder Collegiate Challenge
Также кодеры-спортсмены со всего мира играют на регулярных контестах на TopCoder.
У нас самыми массовыми независимыми регулярными состязаниями по спортивному программированию являются:
Открытый Кубок МГУ-CBOSS
Test-The-Best.by
В действительности в мире буквально каждый день имеет место соревнование на той или иной контест-площадке. А порою два-три, а то и четыре контеста в день. Так что спортивная жизнь у игроков очень и очень насыщенная.
Об основных событиях спортивного программирования понятным общественности языком мы и пишем в этом блоге.
На самом же деле спортивное программирование — это состязания с учетом времени по решению программистских задач на алгоритмы, не имеющие прикладной направленности и ведущие свое происхождение от старых добрых олимпиад по информатике. Для успешного участия в этих соревнованиях необходимо иметь познания в математике и алгоритмах, уметь программировать, а также быть очень умным, быстрым и точным.
Основные состязания по спортивному программированию в мире это:
студенческий чемпионат мира АСМ
Google Code Jam
TopCoder Open Algorithm Competition
TopCoder Collegiate Challenge
Также кодеры-спортсмены со всего мира играют на регулярных контестах на TopCoder.
У нас самыми массовыми независимыми регулярными состязаниями по спортивному программированию являются:
Открытый Кубок МГУ-CBOSS
Test-The-Best.by
В действительности в мире буквально каждый день имеет место соревнование на той или иной контест-площадке. А порою два-три, а то и четыре контеста в день. Так что спортивная жизнь у игроков очень и очень насыщенная.
Об основных событиях спортивного программирования понятным общественности языком мы и пишем в этом блоге.


комментарии (269)
P.S. Ребят, не сочтите за оффтоп, кто может пару статей от моего имени опубликовать? Плз, кармы просто не хватает
2. Может стоит стартовую позицию делать не случайную, а одинаковую для всех роботов? Например расставлять их по кругу спиной в центр.
2. А зачем? Сейчас есть возможность уворачиваться от выстрелов, поэтому начальная позиция не навредит.
Консолька, в которую можно было бы выводить текст была бы очень кстати.
Ещё бы FPS ограничить…
Бест регардс
Кэп. :-)
на старой версии сайта проверки браузера не было, и ничего, все пахало
есть такой параметр уже
///Можно стрелочку над своим ботом добавить ?))))
И еще: Можно включить горячие клавиши для начала игры? Т.е. я нажал F5 и началась битва?
после этого стал стрелять только мой бот, а враги разбежались :/
Опиши последовательность действий в файрбаге как это сделать, я наверное что-то не то делаю…
боюсь забыть — работа же отвлекает )
4dmonster.habrahabr.ru/blog/75698/
Хотя конечно немного о другом, но все равно напоминающий о Начале :)
# arena_width — размер арены по горизонтали;
# arena_width — размер арены по вертикали;
чему он сейчас равен?
я понимаю что так реализовать проще
но точность должна быть вознаграждена
хотя бы 550/(x+10)-10
( графики на wolframalpha.com)
буду принимать участие =)
в FF 3.5.3 Portable и Chrome 4 portable
Расчёт координат для упреждающего выстрела:
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 ботов рву чаще, чем они меня. Так что в турнире участвую. (:
И вообще, это ж бои программистов, а не бои пользователей фреймворков. Апи должно предоставлять только необходимую информацию, а её обработку должен делать программист.
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}
}
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 не приводжу, т. к. много кода)
приводит к вылетанию фаерфокса без каких-либо сообщений… ну я в общем-то понял, что индексы везде с единицы начинаются )
Уже очень хочу возможность с кем-то посоревноваться.
HabraWars очень доставляет ))
Банальная вещь, которая и мне в голову пришла только сейчас :)
Если победителем раунда считается выживший бот, то правильная тактика будет соответственно — не убивать, а выжить в первую очередь. Я уже представляю раунды где все разбегаются в разные стороны, убивают тех кому не повезло оказаться в центре поля, и ждут окончания времен, разве что удирая от выстрелов оппонентов.
Ведь если скорость полета снаряда такая, что боты, находящиеся на максимально возможном расстоянии, могут увернуться, совсем не получив повреждений, то это будет эпик фейл, потому что такой турнир может никогда не закончится :) (может вы это все проверяли и продумывали, тогда извините за много букв)
Возможно стоит делать счет на убийства (нанесенный урон), а не на последнего выжившего.
А еще лучше — по какой-то усредняющей формуле, например: points=killed_enemies+total_damage/100-is_killed*2
Тогда можно ввести и максимальное время турнира.
Еще правильнее пожалуй было бы ввести в игру respawn и respawn_time, но это наверняка излишне на даном этапе. У вас и так много работы :)
я, например, сейчас сделал бота, который любит добивать (health<10). Только что при тесте на семпловых он убил всех(!)
при этом, если таких ботов будет несколько, то возможен пат. если на него не нападают, а осталось больше 2 врагов, то он нападать не будет (если health>10)
мне кажется, решением проблемы пата бы было что-то вроде армаггедона через некоторое время — хаотически летающие снаряды
А кто-то собственно собирается принимать участие?
У друга 19 числа свадьба… думаю как бы не забыть нажать на кнопку нужную
по типу бойцовского клуба и его клонов — вызвать на дуэль, групповой бой и т.п.
и чатик! ;)
Например:
var shot_at_me = this._shot_at_me(my_state, shots); if (shot_at_me) { var window = (function() { return this; })(); window.engine.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}
}
P.S.: Кстати на Хабрахабре, уже есть блог для таких тем «Игры для программистов».
А ещё, робот, впадающий в
маразмбесконечный цикл, формально не нарушает правил, с этим надо что-то делать. Кстати, имхо было бы интереснее, если роботы запускались в разных потоках — игра превратилась бы из походовой в риал-тайм, а более быстрый код имел бы преимущество.хочу подробностей битв, интриг, расследований! (:
Пожелания для отладки и отработки стратегии:
— хотелось бы кнопку «пауза»;
— возможность пошагового просмотра, то есть проиграть n-ое количество фреймов при нажатии на кнопку;
— хотелось бы иметь несколько своих ботов и натравливать их друг на друга для оттачивания манёвров, а то со стандартным уже неинтересно :)
Понимаю что некоторое можно сделать при помощи firebug, но всё же это не очень комфортно…
Просто после долгой возни со своим ботом я все-таки пришел к выводу, что я делаю робота, который до поры — до времени старается избегать неприятностей. Но я же не один такой! — а если все боты будут разбегаться, то никакой игры не будет.
Я раньше предложил армаггедон (случайные снаряды), но как-то это не очень.
Предлагаю решение: в комнате должна быть хотя бы пара семпловых ботов. Более того, если семпловых ботов не остается, и уже какое-то время ничего не происходит, вбрасываются новые семпловые боты.
Что скажете?
а запрещать уворачиваться, мне кажется, не решение.
«ныкаться по углам» можно и без всяких уворотов — просто не начинать атаковать, пока не вынудили
P.S. Стратегия невмешательства работает. Сейчас 9 побед из 10 с шестью семпловыми.
я просто сразу уже на вторую версию правил попал, а что можно так рассчитать — в голову не пришло
Я бы ограничил время боя и начислял очки роботам за точные попадания бомбами.
После окончания раунда выжившим роботам начислял бы ещё очков в соответствии с оставшимся здоровьем.
В этом случае по сути даже не нужны никакие группы — можно просто разбивать роботов случайным образом на семерки и проводить бои. После того как каждый робот провел k боёв, считается сумма очков и выбирается, например, топ100. Далее среди них проводятся бои по той же схеме…
Хотя схема боёв это уже другая история.
Главная суть подхода, что бой всегда закончится и трудно просто отсидеться, надо атаковать чтобы набирать очки…
Хотелось бы все правила услышать до начала турнира :)
Не плохо.
1) Какова скорость снаряда относительно максимальной скорости робота?
2) В какой последовательности выполняются действия (выстрел, поворот, движение) при каждом шаге робота?
Скорость снаряда в params.shot_speed, макс. скорость робота — 1.
В такой последовательности как раз и выполняются.
заранее спасибо.
Oleg.Baranovskiy _at_ gmail.com
Спасибо. Больше не буду беспокоить с такими проблемами.
Списки, результаты, схемы, таблицы...?
Почему такой большой диапазон?
а то я уже дважды на нее нажал, хорошо хоть иногда промежуточные версии в тхт сохраняю.
а еще неплохо-бы ее убрать куда-подальше, а на ее место поставить что-то типа «quick test», автоматом сохраняющее, переключающее на арену, и запускающее бой. и неплохо-бы где-то хранить предидущий выбор количества противников, хоть в куках.
Всем удачи.
Интересно хоть кто то из победителей покажет код своего робота.
Если я войду в топ10 (ой чет не верится:) обязательно покажу.
Удачи. Скрестим пальцы за своих чад.
Хотя бы статус бы… Получить бы. :)
Так что, make love, в моем изложении, превратилось в:
«Если достаточно долго сидеть на берегу реки, ты увидишь проплывающий по ней труп врага» (китайская пословица)
Если не я один такой, то у организаторов жопа… Придется запускать наглого подстрекателя, который будет стрелять во всех подряд, прикрываясь другими.
Но элемент лотереи, скачек или тотализатора все равно остается. :)
В общем, ждем. :)
habrahabr.ru/blogs/sport_programming/75928/