ДонНТУ > Портал магистров ДонНТУ || Об авторе
Магистр ДонНТУ Садыкбаев Артем Вадимович

Садыкбаев Артем Вадимович

Факультет вычислительной техники и информатики

Специальность: Компьютерные системы и сети

Игра для программистов RoboCode

Когда я только начинал изучать язык программирования Java, я наткнулся на интересный проект с открытыми исходными кодами разработанный программистами компании IBM Mathew Nelson и Flemming Larsen.
Логотип игры RoboCode
Проект представляет собой игру, в которой соревнуются танки, искусственный интеллект которых программируется на языке Java. Игра RoboCode относится к жанру игр для программистов. Игры данного класса представляют собой соревнование искусственных интеллектов участвующих в игровом процессе роботов\машин\танков\etc..

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

Ваша конечная цель — уничтожить все остальные танки на поле, тем самым доказав превосходство искусственного интеллекта, запрограммированного Вами. Не даром девизом игры является: "Build the best, destroy the rest!". У танков большое разнообразие возможных действий: они могут двигаться по игровому полю, стрелять, узнавать месторасположение друг в друга, врезаться в стены и в других роботов, узнавать где находятся летящие пули и использовать всю мощь языка Java для реализации алгоритма искусственного интеллекта.
Игровой процесс RoboCode
Очевидно, что какой-либо однозначной стратегии для выигрыша нет. Существует огромное количество различных тактик, у каждой из которых есть свои преимущества и недостатки. Размер кода у различных танков колеблется от десятка строк до нескольких тысяч. Некоторые даже умудряются прибегать к статистическому анализу и нейронному программированию. Интересно подошли к написанию искусственного интеллекта танка в СПБгУ ИТМО. Искусственный интеллект их танка был разработан с использованием SWITCH-технологий (смесь автоматного и объектно-ориентированного программирования) и к проекту прилагается серьезная проектная документация.

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

Игровое поле представляет из себя прямоугольник к размерами, задаваемыми перед началом битвы. Система глобальных координат не совсем стандартна: вместо привычного из курса компьютерной графики начала координат, помещённого в левый верхний угол, центр координат в игре RoboCode находится в левом нижнем углу. Таким образом, система координат выглядит следующим образом:
Система координат игры RoboCode

На официальном сайте проекта находится огромное количество различных материалов. Если Вы хотите начать обучение — это лучшее место для старта. Сама игра распространяется в виде jar-архива, который можно скачать со страницы скачивания игры. Игра кроссплатформенная, так как она написана на Java. В нее можно играть на Windows, Linux, FreeBSD и в любой другой системе, на которую портирована Java-машина. Именно Java-машина необходима для начала игры.

Разработчики включили в игру собственный редактор. Поэтому у Вас уже есть готовая среда для разработки с подсветкой синтаксиса.
Редактор исходного кода RoboCode
Эта программа называется Robot Editor, и она доступна в меню Robot -> Editor. Таким образом, не обязательно иметь установленным на компьютере полноценные IDE, такие как Eclipse или NetBeans. Достаточно установленной виртуальной машины Java и пакета игры для создания и боевого тестирования "интеллекта" танка.

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

// Используем пакет с Вашими инициалами. Это сделано для избежания конфликтов имен.
package sadykbaiev;
 
// Указывает Java, что мы собираемся использовать объекты Robocode в нашей программе.
import robocode.*;
 
// Указывает Java: "Класс, описываемый ниже, является расширением класса Robot. 
// И называется MyFirstRobot".
public class MyFirstRobot extends Robot 
{
	 // Игра вызывает метод run(), когда начинается битва.
	 public void run() 
	 {
		// Здесь идет непосредственно код Вашего робота.
 
		// while (true) означает то, что код в скобках будет выполнятся до тех пор, пока игра не прервется.
		while (true) 
		{
			 // Робот проедет вперед на 100 пикселей.
			 ahead(100);
		 
			 // Робот повернет свою пушку на 360 градусов.
			 turnGunRight(360);
		 
			 // Робот вернется назад на 100 пикселей.
			 back(100);
		 
			 // Робот снова повернет свою пушку на 360 градусов.
			 turnGunRight(360);
		 
			 // После чего код начинает выполняться снова.
		 }
	 }

	 // Когда радар танка находит вражеский робот, мы начинаем стрелять
	 public void onScannedRobot(ScannedRobotEvent e) 
	 {
		 fire(1);
	 }
}

Для дальнейшего изучения особенностей этой игры следует ознакомиться с следующими ресурсами:

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

Желаю успехов в постижении тонкостей Robocode!


ДонНТУ > Портал магистров ДонНТУ || Об авторе