Программирование движения объекта
Для того чтобы запрограммировать движение объекта из одной точки в другую, вспомним равномерное движение. Пусть (x1;y1) – начальная координата объекта, а (x2;y2) – конечная координата. Направление движения задается вектором (dx;dy) = Нормализация(x2-x1; y2-y1), где Нормализация(a,b) = (a / sqrt(a^2 + b^2); b / sqrt(a^2 + b^2)). Таким образом, координаты объекта в момент времени T от начала движения, движущегося со скоростью V по прямой, равны: (xc;yc) = (x1; y1) + (dx;dy) * V * T; Скорость V измеряется в пиксель/сек, т.е. количество пикселей пройденных объектом на 1 сек. Когда (xc;yc) станет равно (x2;y2), тогда объект дошел до конечной точки. На практике сравнивать текущие координаты с концом отрезка не корректно, так как промах на 1 пиксель из-за округления, например, отправит наш объект в бесконечное путешествие по прямой. Можно, например, прикинуть время, которое потребуется объекту, чтобы дойти до конца отрезка, поделив длину отрезка на скорость объекта. Условием продолжения движения будет время от начала движения T меньшее времени, которое требуется, чтобы пройти отрезок. Движение по окружности программируется иначе. Пусть (x0;y0) – центр окружности движения. Тогда координаты объекта в момент времени T от начала движения, движущегося со скоростью V по окружности, равны: (xc;yc) = (x0; y0) + R * (cos(V*T); sin(V*T)), где R – радиус окружности. В этом случае в отличие от предыдущего V – угловая скорость, т.е. измеряется в радиан/сек. Практические задания
1. Изучить особенности реализации и работы потоков в Java. 2. Доработать программу, созданную в лабораторных работах № 2-4: 1) создать абстрактный класс BaseAI, описывающий «интеллектуальное поведение» объектов по варианту. Класс должен быть выполнен в виде отдельного потока и работать с коллекцией объектов;
2) реализовать класс BaseAI для каждого из видов объекта, включив в него поведение, описанное в индивидуальном задании по варианту; 3) синхронизовать работу потоков расчета интеллекта объектов с их рисованием. Рисование должно остаться в основном потоке. Синхронизация осуществляется через передачу данных в основной поток; 4) добавить в панель управления кнопки для остановки и возобновления работы интеллекта каждого вида объектов. Реализовать через засыпание/пробуждение потоков; 5) добавить в панель управления выпадающие списки для выставления приоритетов каждого из потоков. Вариант 1 1. Муравьи-рабочие двигаются в один из углов области их обитания (например, [0;0]) по прямой со скоростью V, а затем возвращаться обратно в точку своего рождения с той же скоростью. 2. Муравьи-воины двигаются по окружности с радиусом R со скоростью V. Вариант 2 1. Пчелы-рабочие двигаются в один из углов области их обитания (например, [0;0]) по прямой со скоростью V, а затем возвращаться обратно в точку своего рождения с той же скоростью. 2. Трутни двигаются хаотично со скоростью V. Хаотичность достигается случайной сменой направления движения раз в N секунд. Вариант 3 1. Золотые рыбки двигаются по оси X от одного края области обитания до другого со скоростью V. 2. Гуппи двигаются по оси Y от одного края области обитания до другого со скоростью V. Вариант 4 1. Обыкновенные кролики двигаются хаотично со скоростью V. Хаотичность достигается случайной сменой направления движения раз в N секунд. 2. Альбиносы двигаются по оси X от одного края области обитания до другого со скоростью V. Вариант 5 1. Грузовые машины двигаются в левую верхнюю четверть области симуляции (т.е. прямоугольник с верхним-левым углом в точке 0;0, шириной/длиной = (w/2;h/2), где w и h – ширина и длина области симуляции) со скоростью V по прямой. Конечная точка движения – случайная точка в пределах этой области. Если машина сгенерировалась сразу в этой области, то она никуда не движется. По прибытии в конечную точку машина больше не движется.
2. Легковые машины двигаются в нижнюю правую четверть области симуляции (т.е. прямоугольник с верхним-левым углом в точке w/2;h/2, шириной/длиной = (w/2;h/2), где w и h – ширина и длина области симуляции) со скоростью V по прямой. Конечная точка движения – случайная точка в пределах этой области. Если машина сгенерировалась сразу в этой области, то она никуда не движется. По прибытии в конечную точку машина больше не движется. Вариант 6 1. Разработчики двигаются хаотично со скоростью V. Хаотичность достигается случайной сменой направления движения раз в N секунд. 2. Менеджеры двигаются по окружности с радиусом R со скоростью V. Вариант 7 1. Капитальные дома двигаются (в городах будущего и не такое возможно) в левую верхнюю четверть области симуляции (т.е. прямоугольник с верхним-левым углом в точке 0;0, шириной/длиной = (w/2;h/2), где w и h – ширина и длина области симуляции) со скоростью V по прямой. Конечная точка движения – случайная точка в пределах этой области. Если дом сгенерировался сразу в этой области, то он никуда не движется. По прибытии в конечную точку дом больше не движется. 2. Деревянные дома после генерации начинают двигаться в нижнюю правую четверть области симуляции (т.е. прямоугольник с верхним-левым углом в точке w/2;h/2, шириной/длиной = (w/2;h/2), где w и h – ширина и длина области симуляции) со скоростью V по прямой. Конечная точка движения – случайная точка в пределах этой области. Если дом сгенерировался сразу в этой области, то он никуда не движется. По прибытии в конечную точку дом больше не движется. Вариант 8 1. Автомобили двигаются по оси X от одного края области симуляции до другого со скоростью V. 2. Мотоциклы двигаются по оси Y от одного края области симуляции до другого со скоростью V. Вариант 9 1. Студенты двигаются хаотично со скоростью V. Хаотичность достигается случайной сменой направления движения раз в N секунд. 2. Студентки двигаются по окружности с радиусом R со скоростью V.
Вариант 10 1. Юр. лица двигаются в левую верхнюю четверть области симуляции (т.е. прямоугольник с верхним-левым углом в точке 0;0, шириной/длиной = (w/2;h/2), где w и h – ширина и длина области симуляции) со скоростью V по прямой. Конечная точка движения – случайная точка в пределах этой области. Если запись сгенерировалась сразу в этой области, то она никуда не движется. По прибытии в конечную точку запись больше не движется. 2. Физ. лица двигаются в нижнюю правую четверть области симуляции (т.е. прямоугольник с верхним-левым углом в точке w/2;h/2, шириной/длиной = (w/2;h/2), где w и h – ширина и длина области симуляции) со скоростью V по прямой. Конечная точка движения – случайная точка в пределах этой области. Если запись сгенерировалась сразу в этой области, то она никуда не движется. По прибытии в конечную точку запись больше не движется.
Вопросы для самопроверки
1. Что такое процесс и поток (нить)? 2. Чем определяется порядок передачи управления потокам? 3. Какие есть способы реализации многозадачности в Java? 4. Что необходимо сделать для создания подкласса потоков (подкласса Thread)? 5. Когда запускается на выполнение метод run() подкласса Thread? 6. Какими методами класса Thread необходимо запускать поток на выполнение и останавливать его? 7. Что необходимо сделать для реализации классом интерфейса Runnable? 8. В каких состояниях может находиться поток? 9. Какой поток считается новым, выполняемым и завершенным? 10. В каких ситуациях поток является невыполняемым? 11. Когда возникают исключительные ситуации при работе с потоками? 12. Что такое группы потоков и чем они полезны? 13. Что такое родовая группа потоков и главная группа потоков?
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|