Я разработчик движка Robocode. Я присоединился 2 года назад и большую часть времени проводил рефакторинг движка Robocode. Я написал пару статей в то время, как мое понимание росло. Не все из них актуальны, подумал.
Есть несколько сложных частей об этом:
1) синхронизация: мы решили ее, «отправив» сообщения между роботом и битвой. Обновление пользовательского интерфейса и других компонентов производится производителем / потребителем с помощью неизменяемых сообщений о каждом новом состоянии (игровой тик)
2) песочница вредоносного кода (изучите наш код)
3) разработка API и правил, которые должны быть постоянными в течение долгих лет, потому что двигатель развивается, старые роботы остаются такими же, но они должны работать и забивать так же, как и раньше. Здесь мы столкнулись с несколькими проблемами, например, люди используют классы из API в своей собственной логике. Это не было намерением. Мы должны были сделать классы окончательными и с защищенными конструкторами. Но теперь мы не можем изменить его, чтобы не сломать существующих роботов.
На ваш вопрос о событиях в Робокоде. Все они приходят каждый тик, мы заполняем EventManager (очередь приоритетов), а затем робот тянет один за другим. Вызов отправляется обратно в реализацию робота для каждого события. Подписка автоматическая, реализация всегда присутствует в базовом классе, и вы можете переопределить ее в классе роботов. Есть одна нить для робота.
Кстати: следующая большая вещь, кажется, это расширение Robocode, чтобы учесть настраиваемые / подключаемые правила. Это проблема дизайна. Мы ищем умных, трудолюбивых людей, которые присоединятся к проекту Robocode, чтобы помочь нам. Заинтересованы?