Визуализация «похождений» робота

Пришло время посмотреть на нашего робота симпатичным образом. Мы создадим уже более сложное приложение, которое сначала «выгуляет» нашего робота, а потом нарисует его путь на форме. Думаю, что это будет неплохой иллюстрацией отношений между классами и примером использования классов. Для реализации мы создадим следующие классы:

  1. Robot — класс робота, который будет передвигаться и поворачиваться. Но что важно отметить — робот будет запоминать весь путь, который он проходил — т.е. будет вести список прямых, которые он проезжал. Для хранения списка мы используем стандартный класс Java ArrayList. Этот класс мы будем рассматривать более подробно позже при изучении коллекций, а сейчас мы просто будем его использовать «вслепую» — просто знайте, что у него есть метод add, который позволяет добавить в список объект. Также список объектов можно «просмотреть» с помощью конструкции for, которая приведена в классе RobotPathComponent.
  2. RobotLine — класс для хранения координат одного отрезка пути. Это простой класс, который включает 4 числа — координаты начальной точки (X1, Y1) и координаты конечной точки (X2, Y2).
  3. RobotPathComponent — этот класс наследуется от уже знакомого нам класса JComponent. Этому классу передается робот со своим списком отрезков пути. В методе paintComponent путем перебора всех отрезков мы получаем координаты каждого и рисуем линию вызовом метода drawLine класса Graphics.
  4. RobotFrame — класс для отображения формы. Мы уже встречались с подобной реализацией.
  5. RobotManager — класс для запуска всего приложения. В его методе main мы сначала создаем робота и указываем ему нарисовать 12-ти угольник. Вы можете задать другое количество, изменив значение переменной COUNT. После «прогулки» мы создаем форму и передаем ей нашего робота для отрисовки его пути. Если задать большое количество сторон, то из-за округлений наш многоугольник не замкнется. Можете попробовать это исправить.

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

 

Класс Robot

Класс RobotLine

Класс RobotPathComponent

Здесь мы видим конструкцию, которая может вас озадачить — у нее даже комментарии такие Вот эта
for (RobotLine rl : robot.getLines()).
Давайте пока примем ее как есть. Чтобы не было совсем непонятно — эта конструкция перебирает каждый элемент внутри списка и помещает ее в переменную rl. Т.е. внутри цикла эта переменная указывает на элемент списка и тип этого элемента RobotLine. Можно себе представить как будто мы просматриваем кадры кинопленки. На каждом шаге мы перемещаем окошко просмотра на следующий кадр. Окошко просмотра — это переменная rl. С помощью этой переменной мы можем посмотреть параметры конкретного кадра — с нашем случае линии с координатами начала и конца (X1, Y1, X2, Y2).
Класс RobotFrame

Класс RobotManager

Можете поиграть с нашим роботом. Учтите, что координаты отсчитываются от верхнего левого угла. Хотелось бы заострить ваше внимание на следующем моменте — по коду уже можно видеть, что мы создавая объекты по сути «играем» с ними, указывая, что им делать и в каком порядке. Большинство программ именно так и создаются — просто классов больше, отношения более сложные. Но идея одна — создать объекты нужных классов и заставить их работать в кооперации. Это требует умения и мастерства, которое надо накапливать создавая программы — другого пути пока не придумали.
Попробуйте в качестве маршрута нарисовать какую-нибудь сложную фигуру — например пятиконечную звезду. Или сделать квадратную спираль от самых краев к центру — каждый квадрат все меньше и меньше.

И теперь нас ждет следующая статья: Пример — очередь объектов.