Уроки Robocode

www.codepoet.org, “Robocode Lessons”, public translation into Russian from English More about this translation.

Translate into another language.

Описание проекта Robocode

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

Ваша задача:

Как минимум класс, наследующийся от Robot или AdvancedRobot. Пожалуйста, используйте в названии робота часть своего имени. Например: "PingBot", "LanceAlot", "XhinStriker", "The Valinator", "AJ-D2", "RoboWendy" или что-то в этом роде.

Код перемещения робота по полю боя.

Код поиска других роботов (поворачивает радар), включая код реакции робота на обнаружение другого.

Код поворота башни и стрельбы по противнику! (противники - ваши одноклассники)

Что делать с роботом, когда код будет готов?

На классных занятиях после экзаменов в середине семестра мы проделаем лабораторные работы и устроим большой "решающий поединок", где мы загрузим всех ваших роботов в компьютер вашего преподавателя с возможностью 3х выстрелов по 10 раундов в каждой битве. Эти битвы мы покажем всем на проекторе. (Ваша оценка не зависит от победы в бою, но все будут думать что вы слабак, если проиграете).

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

Урок #1: Мой первый робот

Создание робота

Здесь весёлая чепуха: из этого и состоит Robocode!

Создание робота может быть легким, а вот превращение его в победителя - нет. Вы можете потратить на него несколько минут, а можете и долгие месяцы. Я предупреждаю вас, что написание робота может вызвать привыкание! Однажды начав вы будете наблюдать за тем, как ваше творение допускает ошибки и пропускает в себя попадания. Но научившись сами вы сможете научить своего робота многому: как действовать, что делать, куда двигаться, кого бояться и когда стрелять. Должен ли он прятаться в углу, или прыгать в пекло? Гляньте на робота с именем MatBot, одного из роботов автора Mathew Nelson'а.

Мой первый робот

Готовы создать своего первого робота? Я надеюсь что вы увлечетесь)

Robocode содержит в себе несколько примеров простых роботов, глянув на которые вы сможете почерпнуть несколько идей и увидеть как все работает. Для этого можно использовать встроенный редактор (Robot Editor).

В этом разделе мы будем использовать Robot Editor для создания вашего совственного нового робота.

Встроенный редактор роботов (The Robot Editor)

Перво-наперво откроем встроенный редактор Robot Editor. Из главного меню Robocode щелкните на пункте Robot menu, а затем выберите Editor.

Когда появится окно редактора нажмите на пункт "File" главного меню и выберите пункт "New Robot"

В следующем диалоге введите имя вашего робота и свои инициалы.

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

Новый робот

Вот такое вы должны сейчас увидеть (все имена изменены для того чтобы защитить невиновных):

package man;

import robocode.*;

public class MyFirstRobot extends Robot {

public void run() {

while (true) {

ahead(100);

turnGunRight(360);

back(100);

turnGunRight(360);

}

}

public void onScannedRobot(ScannedRobotEvent e) {

fire(1);

}

}

Здесь мы заняты только наглой стрельбой ... вы нехотите что-нибудь поменять? Совсем немного, правда?

Кстати, если вы НА САМОМ ДЕЛЕ заинтересованы остальным, прямо сейчас, я опишу об этом здесь:

package man;

import robocode.*;

public class MyFirstRobot extends Robot {

public void run() {

}

}

import robocode.*; - Говорит Java что вы собираетесь использовать объекты Robocode в вашем роботе.

public class MyFirstRobot extends Robot - "Объект, который я описываю здесь имеет тип Robot, а назван MyFirstRobot".

public void run() { } - Игра вызывает ваш метод run() когда начинается бой

{ } "Фигурные скобки" ({}) группируют код вместе. Здесь например - группируют весь код относящийся к роботу.

Давайте поедем куда-нибудь

Давайте добавим пару строк, которые будут что-то делать.

Сперва мы изучим метод run():

while (true) {

ahead(100);

turnGunRight(360);

back(100);

turnGunRight(360);

}

while(true) { } означает: "Пока условие true является истиной, делаем всё что между фигурными скобками { }".

Т.к. true всегда равно true (серьезно?! ;-), написанное означает: "Повторяй код внутри фигурных скобок вечно".

Итак, робот будет выполнять действия:

1. проехать вперёд на 100 пикселей

2. повернуть пушку вправо на 360 градусов

3. вернуться назад на 100 пикселей

4. повернуть пушку влево/назад на 360 градусов

Робот будет продолжать так делать снова и снова, до тех пор пока не умрёт, точно так как описано в цикле while(true)

Не так уж плохо, неправда ли?

Огонь на поражение!

Когда наш радар обнаруживает робота, мы хотим выстрелить:

public void onScannedRobot(ScannedRobotEvent e) {

fire(1);

}

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

Ну раз уж это простой робот, то мы не собираемся смотреть на всю эту приблуду) Давайте просто стрелять!

Компиляция вашего робота

Сперва сохраните вашего робота, выбрав в главном меню File -> Save. Затем последуйте указаниям диалога.

Теперь, откомпилируйте его выбрав пункт Компиляция(Compile) в меню Компилятор(Compiler).

Если ваш робот скомпилировался без единой ошибки, то вы уже можете начать бой. Выберите в главном меню: Battle -> New. Если вы не можете увидеть вашего робота в списках, обновите списки нажатием Ctrl+R. Поставте вашего робота в список Selected Robots вместе с еще одним роботом, например sample.Target. Нажмите кнопку "Start Battle" и бой начнется!

Урок №2: Поле сражения

В этом урок емы рассмотрим начала перемещения по полю боя.

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

Ваш робот состоит из трех частей: корпус, пушка и радар.

Картинка взята из "Rock 'em, sock 'em Robocode!"

Все эти части могут двигаться независимо, для этого нужно вызвать методы setAdjustGunForRobotTurn(true) или setAdjustRadarForRobotTurn(true).

Пример: AnatomyBot - показывает независимое управление этими тремя частями, к тому же показывает как выводить отладочные сообщения. (Щелкните мышкой по кнопке с именем робота справа от поля боя и увидите окошко с отладочными сообщениями.)

Заметьте, что танк движется довольно медленно, башня поворачивается быстрее, а самым быстрым является радар.

Координаты поля боя

Поле боя представляет собой декартову плоскость с началом координат в нижнем левом углу. Отсчет градусов начинается сверху по часовой стрелке, таким образом в верхней точке это будет значение 0/360.

Изображение взято из Rock 'em, sock 'em Robocode: Раунд 2

Пример робота: WallBanger - показывает как можно перемещаться по полю и врезаться в стены.

Стоить заметить, что несмотря на вызов функции ahead(10000), onHitWall вызывается как только робот ударяется о стену. (Смотрите API робокода.)

Пример бота "Walls" так же демонстрирует как робот может взаимодействовать со стенами поля битвы.

Относительный угол

Вы можете узнать свое абсолютное направление вызвав функцию getHeading(), но не путайте ее с функцией вызова относительного угла Bearing, который принимает значения от -180 до 180 и показывает смещение вашего направления от направления на что-либо (на стену, другого робота и т.д.).

Pages: ← previous Ctrl next
1 2 3 4 5

Original (English): Robocode Lessons

Translation: © PersonaPrima, BAZIL, RANUX, alien713cea, teo-bon, Cyxapb, Passerby, vovka, ilyash11, Frankey, denton, aifgi, Triamor, gitstereophonic, general-manjago, max00007, alebezh .

translated.by crowd

Like this translation? Share it or bookmark!