Pull to refresh

Robocode

Reading time5 min
Views24K
Слоган RobocodeХабрасообщество поддержало идею написания обзоров игр для программистов, поэтому я продолжаю эту серию статей. Напомню, в прошлый раз я рассказал Вам про игры Colobot и Ceebot.

Сегодня Вы узнаете про отличную игру Robocode. Она предназначена для продвинутому обучения Java, и имеет большие функциональные возможности, несмотря на кажущуюся внешнюю простоту.

Robocode — это обучающая игра с открытыми исходными кодами, разработанная Mathew Nelson и Flemming Larsen. Ее единственной целью было облегчение изучения языка программирования Java.



Игра



Основным движущим элементом в обучении должна была стать конкуренция. Каждый участник пишет код на Java, который управляет небольшим танчиком, и сражается с другими такими же танками.

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

Разработчики настоятельно обращают Ваше внимание на то, что в Robocode нет крови, нет людей и нет политики. В игре есть взрывы, но если Вы заботитесь о собственном психическом здоровье — их можно легко отключить.

У танков большие возможности: они могут двигаться по игровому полю, стрелять, узнавать месторасположение друг в друга, врезаться в стены и в других роботов, узнавать где находятся летящие пули и использовать всю мощь языка Java.

Битва танков


Естественно, какой-либо простой стратегии для выигрыша нет. Существует огромное количество различных тактик, у каждой из которых есть свои преимущества и недостатки. Размер кода у различных танков колеблется от десятка строк до нескольких тысяч. Некоторые даже умудряются прибегать к статистическому анализу и нейронному программированию.

Интересно подошли к написанию робота в СПБгУ ИТМО. Танк был разработан с использованием SWITCH-технологий(смесь автоматного и объектно-ориентированного программирования) и к проекту прилагается серьезная проектная документация.

Вы можете скачать ее и исходные коды танка абсолютно бесплатно на странице проекта.

Установка игры



На официальном сайте проекта находится огромное количество различных материалов. Если Вы хотите начать обучение — это лучшее место для старта.

Установка Robocode


Сама игра распространяется в виде jar-архива, который можно скачать со страницы скачивания игры.

Игра кроссплатформенная, так как она написана на Java. В нее можно играть на Windows, Linux, FreeBSD и в любой другой системе, на которую портирована Java-машина.

Java


Перед установкой игры не забудьте установить Java.

Ваш первый робот



Готовы к созданию своего первого робота? Я уверен это будет легко, занимательно и просто интересно!

Создать робота очень просто. Но сделать его победителем — нет.

Robocode Logo


Встроенный редактор



Разработчики включили в игру собственный редактор. Поэтому у Вас уже есть готовая среда для разработки с подсветкой синтаксиса.

Эта программа называется Robot Editor, и она доступна в меню Robot -> Editor.

Robocode Editor


Давайте теперь создадим заготовку робота. Для этого перейдите в пункт меню File -> New Robot. Придумайте имя Вашему будущему роботу и введите Ваши инициалы(никнейм).

Вуаля! Теперь Вы видите набросок кода Вашего будущего робота.

Примечание: Если Вы хотите использовать Eclipse или другую IDE, то без труда найдете соответствующее руководство по интеграции с Robocode в Интернете.

Новый робот



В самом простом виде код должен выглядеть так:

// Используем пакет с Вашими инициалами. Это сделано для избежания конфликтов имен.
package v673;

// Указывает Java, что мы собираемся использовать объекты Robocode в нашей программе.
import robocode.*;

// Указывает Java: "Класс, описываемый ниже, является расширением класса Robot.
// И называется MyFirstRobot".
public class MyFirstRobot extends Robot
{
   // Игры вызывает метод run(), когда начинается битва.
   public void run()
   {
     // Здесь идет непосредственно код Вашего робота.

   }

   // Существует и другие методы, которые мы рассмотрим позже.
}




Пора уже что-нибудь делать!



Давайте заставим нашего робота что-нибудь делать. Добавьте в метод run() следующие строчки:

// while (true) означает то, что код в скобках будет выполнятся до тех пор, пока игра не прервется.
while (true)
{
   // Робот проедет вперед на 100 пикселей.
   ahead(100);

   // Робот повернет свою пушку на 360 градусов.
   turnGunRight(360);

   // Робот вернется назад на 100 пикселей.
   back(100);

   // Робот снова повернет свою пушку на 360 градусов.
   turnGunRight(360);

   // После чего код начинает выполняться снова.
}




Наш робот будет выполнять эти действия снова и снова, пока не умрет. Неплохо, да?

Огонь!



Когда радар танка находит вражеский робот, мы начинаем стрелять:

public void onScannedRobot(ScannedRobotEvent e)
{
   fire(1);
}



Как Вы можете заметить, в функцию отправляется объект ScannedRobotEvent, который содержит информацию о вражеском(или дружеском) роботе — сколько у него здоровья, где он находится, с какой скоростью передвигается и т.д.

Но так как у нас простой робот — мы не будем уделять этому много времени.

Компилирование робота



В первую очередь, сохраните Вашего работа: File -> Save.

Теперь скомпилируйте робота: Compiler -> Compile.

Компилирование


Если Ваш робот скомпилировался без ошибок — Вы можете приступать к битве. Начните новую битву выбрав в меню игры Battle -> New. Если Вы не видите собственного робота — обновите список, нажав F5. Добавьте Вашего робота в битву вместе с еще одним роботом. Например, вместе с танком Sample.

Новая битва


Запустите битву, нажав Start Battle.

Enjoy!

Анатомия робота



Только что мы создали собственного робота. Давайте теперь чуть более подробно рассмотрим конструктивные особенности танков.

Танк состоит из трех частей: тело танка, пушка и радар.

Анатомия робота


Каждая из этих частей может двигаться независимо друг от друга. Медленнее всего движется танк, пушка движется быстрее, а радар является самым быстрым элементом робота.

Поле битвы



Поле битвы представляет из себя прямоугольник. Причем его размер устанавливается при создании битвы.

Система координат:

Система координат


Заметьте, что даже если Вы выполните ahead(50000), команда остановит свое выполнение в тот момент, когда робот врежется в стену.

В RoboWiki Вы можете более подробней ознакомиться с игровой физикой.

Угол отклонения



Иногда удобно использовать относительный угол. Например, для поворота к другому роботу можно использовать следующую команду:

turnRight(event.getBearing());


То есть getBearing() указывает на сколько градусов нужно отклонится от текущего положения, чтобы увидеть, к примеру, вражеский танк.

Угол отклонения


Примечание: Если Вы передадите в функцию turnRight() отрицательное значение, то робот повернется влево.

Чувства робота



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

Ваш робот знает, когда:
  • Он ударяется об стену: onHitWall()
  • В него попадает вражеская пуля: onHitByBullet()
  • Он врезается в другого робота: onHitRobot()
  • А также еще ряд экзотических функций, например, когда Ваша пуля попадает в пулю вражеского робота.


На основе этих функций построены все роботы в Robocode. Более подробно ознакомится со всеми функциями можно в API-документации.

Что дальше?



Больше всего учебного материала собрано на официальном сайте игры.

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

Рекомендую ознакомится с курсом по Robocode от Mark Whitley: CS 3230 — Robocode Project. Кстати, есть коллективный русский перевод благодаря проекту translated.by. Но он, к сожалению, еще не оформлен в отдельный PDF-файл, отсутствуют картинки. Поэтому я, на данный момент, советую изучать оригинал.

Также есть две отличные статьи от Sing Li про Robocode: Rock 'em, sock 'em Robocode! Round 1, Rock 'em, sock 'em Robocode! Round 2

На RoboWiki собрано огромное количество высококачественного материала про RoboCode. Начиная от простых руководств, и заканчивая разъяснением различных тонких моментов.

Кроме того, на официальном сайте Вы найдете множество ссылок на другие отличные статьи про Robocode.

Можете даже ознакомится со статей про использование генетических алгоритмов в RoboCode.

В репозитории RoboCode находится огромное количество различных роботов. К некоторым выложены исходные коды.

Существует официальный блог разработчиков: robo-code.blogspot.com.

На этом наш обзор я бы хотел закончить.

Если Вам интересны мои статьи, то существует хак, позволяющий читать их до релиза на хабрахабре: подписаться на мой блог, ну или на твиттер.

Желаю успехов в постижении тонкостей Robocode!
Tags:
Hubs:
Total votes 147: ↑140 and ↓7+133
Comments56

Articles