движок робокода: как спроектировать (написать) движок исполнения - мир роботов - PullRequest
2 голосов
/ 12 января 2010

У IBM есть (была) бесплатная программа изучения Java под названием RoboCode, в которой можно было бы написать пользовательских роботов, которые затем будут сражаться в 2D-пространстве. Я хотел бы написать среду, которая поддерживает такие роботы, но не знаю, какой шаблон или дизайн использовать. Каждый робот - это нить. Каждый поток получает определенное (неопределенное) количество времени выполнения JRE. Движок мира роботов должен был начаться с создания списка игроков / роботов, а затем войти в цикл, который позволяет каждому игроку по очереди делать все, что ему нравится: двигаться вперед, поворачивать налево, стрелять в направлении северо-западного угла, что угодно. Каждый робот также информируется о событиях, представляющих интерес: враг или несколько врагов находятся в пределах досягаемости, он был поражен пулей и т. Д.

Сочетание обработки потоков, которые также являются слушателями событий (они также являются производителями?), Сбивает меня с толку; кажется, что это еще не все в игровой движок. Даже некоторые общие идеи помогут.

1 Ответ

3 голосов
/ 09 марта 2010

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

Есть несколько сложных частей об этом:

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

2) песочница вредоносного кода (изучите наш код)

3) разработка API и правил, которые должны быть постоянными в течение долгих лет, потому что двигатель развивается, старые роботы остаются такими же, но они должны работать и забивать так же, как и раньше. Здесь мы столкнулись с несколькими проблемами, например, люди используют классы из API в своей собственной логике. Это не было намерением. Мы должны были сделать классы окончательными и с защищенными конструкторами. Но теперь мы не можем изменить его, чтобы не сломать существующих роботов.

На ваш вопрос о событиях в Робокоде. Все они приходят каждый тик, мы заполняем EventManager (очередь приоритетов), а затем робот тянет один за другим. Вызов отправляется обратно в реализацию робота для каждого события. Подписка автоматическая, реализация всегда присутствует в базовом классе, и вы можете переопределить ее в классе роботов. Есть одна нить для робота.

Кстати: следующая большая вещь, кажется, это расширение Robocode, чтобы учесть настраиваемые / подключаемые правила. Это проблема дизайна. Мы ищем умных, трудолюбивых людей, которые присоединятся к проекту Robocode, чтобы помочь нам. Заинтересованы?

...