Хабрасообщество поддержало идею написания обзоров игр для программистов, поэтому я продолжаю эту серию статей. Напомню, в прошлый раз я рассказал Вам про игры Colobot и Ceebot.
Сегодня Вы узнаете про отличную игру Robocode. Она предназначена для продвинутому обучения Java, и имеет большие функциональные возможности, несмотря на кажущуюся внешнюю простоту.
Robocode — это обучающая игра с открытыми исходными кодами, разработанная Mathew Nelson и Flemming Larsen. Ее единственной целью было облегчение изучения языка программирования Java.
Основным движущим элементом в обучении должна была стать конкуренция. Каждый участник пишет код на Java, который управляет небольшим танчиком, и сражается с другими такими же танками.
Ваша цель — уничтожить все остальные танки на поле. Без компромиссов. Ваш танк должен достичь абсолютного превосходства, и показать какие жалкие неудачники Ваши друзья.
Разработчики настоятельно обращают Ваше внимание на то, что в Robocode нет крови, нет людей и нет политики. В игре есть взрывы, но если Вы заботитесь о собственном психическом здоровье — их можно легко отключить.
У танков большие возможности: они могут двигаться по игровому полю, стрелять, узнавать месторасположение друг в друга, врезаться в стены и в других роботов, узнавать где находятся летящие пули и использовать всю мощь языка Java.
Естественно, какой-либо простой стратегии для выигрыша нет. Существует огромное количество различных тактик, у каждой из которых есть свои преимущества и недостатки. Размер кода у различных танков колеблется от десятка строк до нескольких тысяч. Некоторые даже умудряются прибегать к статистическому анализу и нейронному программированию.
Интересно подошли к написанию робота в СПБгУ ИТМО. Танк был разработан с использованием SWITCH-технологий(смесь автоматного и объектно-ориентированного программирования) и к проекту прилагается серьезная проектная документация.
Вы можете скачать ее и исходные коды танка абсолютно бесплатно на странице проекта.
На официальном сайте проекта находится огромное количество различных материалов. Если Вы хотите начать обучение — это лучшее место для старта.
Сама игра распространяется в виде jar-архива, который можно скачать со страницы скачивания игры.
Игра кроссплатформенная, так как она написана на Java. В нее можно играть на Windows, Linux, FreeBSD и в любой другой системе, на которую портирована Java-машина.
Перед установкой игры не забудьте установить Java.
Готовы к созданию своего первого робота? Я уверен это будет легко, занимательно и просто интересно!
Создать робота очень просто. Но сделать его победителем — нет.
Разработчики включили в игру собственный редактор. Поэтому у Вас уже есть готовая среда для разработки с подсветкой синтаксиса.
Эта программа называется Robot Editor, и она доступна в меню Robot -> Editor.
Давайте теперь создадим заготовку робота. Для этого перейдите в пункт меню File -> New Robot. Придумайте имя Вашему будущему роботу и введите Ваши инициалы(никнейм).
Вуаля! Теперь Вы видите набросок кода Вашего будущего робота.
Примечание: Если Вы хотите использовать Eclipse или другую IDE, то без труда найдете соответствующее руководство по интеграции с Robocode в Интернете.
В самом простом виде код должен выглядеть так:
Давайте заставим нашего робота что-нибудь делать. Добавьте в метод run() следующие строчки:
Наш робот будет выполнять эти действия снова и снова, пока не умрет. Неплохо, да?
Когда радар танка находит вражеский робот, мы начинаем стрелять:
Как Вы можете заметить, в функцию отправляется объект ScannedRobotEvent, который содержит информацию о вражеском(или дружеском) роботе — сколько у него здоровья, где он находится, с какой скоростью передвигается и т.д.
Но так как у нас простой робот — мы не будем уделять этому много времени.
В первую очередь, сохраните Вашего работа: File -> Save.
Теперь скомпилируйте робота: Compiler -> Compile.
Если Ваш робот скомпилировался без ошибок — Вы можете приступать к битве. Начните новую битву выбрав в меню игры Battle -> New. Если Вы не видите собственного робота — обновите список, нажав F5. Добавьте Вашего робота в битву вместе с еще одним роботом. Например, вместе с танком Sample.
Запустите битву, нажав Start Battle.
Enjoy!
Только что мы создали собственного робота. Давайте теперь чуть более подробно рассмотрим конструктивные особенности танков.
Танк состоит из трех частей: тело танка, пушка и радар.
Каждая из этих частей может двигаться независимо друг от друга. Медленнее всего движется танк, пушка движется быстрее, а радар является самым быстрым элементом робота.
Поле битвы представляет из себя прямоугольник. Причем его размер устанавливается при создании битвы.
Система координат:
Заметьте, что даже если Вы выполните ahead(50000), команда остановит свое выполнение в тот момент, когда робот врежется в стену.
В RoboWiki Вы можете более подробней ознакомиться с игровой физикой.
Иногда удобно использовать относительный угол. Например, для поворота к другому роботу можно использовать следующую команду:
То есть getBearing() указывает на сколько градусов нужно отклонится от текущего положения, чтобы увидеть, к примеру, вражеский танк.
Примечание: Если Вы передадите в функцию turnRight() отрицательное значение, то робот повернется влево.
Нет, мы не будем говорить о ранимой душе танка. Мы рассмотрим функции, по которым робот может узнавать влияние внешних факторов.
Ваш робот знает, когда:
На основе этих функций построены все роботы в 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!
Сегодня Вы узнаете про отличную игру Robocode. Она предназначена для продвинутому обучения Java, и имеет большие функциональные возможности, несмотря на кажущуюся внешнюю простоту.
Robocode — это обучающая игра с открытыми исходными кодами, разработанная Mathew Nelson и Flemming Larsen. Ее единственной целью было облегчение изучения языка программирования Java.
Игра
Основным движущим элементом в обучении должна была стать конкуренция. Каждый участник пишет код на Java, который управляет небольшим танчиком, и сражается с другими такими же танками.
Ваша цель — уничтожить все остальные танки на поле. Без компромиссов. Ваш танк должен достичь абсолютного превосходства, и показать какие жалкие неудачники Ваши друзья.
Разработчики настоятельно обращают Ваше внимание на то, что в Robocode нет крови, нет людей и нет политики. В игре есть взрывы, но если Вы заботитесь о собственном психическом здоровье — их можно легко отключить.
У танков большие возможности: они могут двигаться по игровому полю, стрелять, узнавать месторасположение друг в друга, врезаться в стены и в других роботов, узнавать где находятся летящие пули и использовать всю мощь языка Java.
Естественно, какой-либо простой стратегии для выигрыша нет. Существует огромное количество различных тактик, у каждой из которых есть свои преимущества и недостатки. Размер кода у различных танков колеблется от десятка строк до нескольких тысяч. Некоторые даже умудряются прибегать к статистическому анализу и нейронному программированию.
Интересно подошли к написанию робота в СПБгУ ИТМО. Танк был разработан с использованием SWITCH-технологий(смесь автоматного и объектно-ориентированного программирования) и к проекту прилагается серьезная проектная документация.
Вы можете скачать ее и исходные коды танка абсолютно бесплатно на странице проекта.
Установка игры
На официальном сайте проекта находится огромное количество различных материалов. Если Вы хотите начать обучение — это лучшее место для старта.
Сама игра распространяется в виде jar-архива, который можно скачать со страницы скачивания игры.
Игра кроссплатформенная, так как она написана на Java. В нее можно играть на Windows, Linux, FreeBSD и в любой другой системе, на которую портирована Java-машина.
Перед установкой игры не забудьте установить Java.
Ваш первый робот
Готовы к созданию своего первого робота? Я уверен это будет легко, занимательно и просто интересно!
Создать робота очень просто. Но сделать его победителем — нет.
Встроенный редактор
Разработчики включили в игру собственный редактор. Поэтому у Вас уже есть готовая среда для разработки с подсветкой синтаксиса.
Эта программа называется Robot Editor, и она доступна в меню Robot -> 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!