Тема: рух об’єктів: використання таймера, рух, моделювання гри мовою Java.
Мета:
Обладнання: комп'ютери зі встановленими ОС, браузером, середовищем Netbeans для програмування мовою Java, (дана) інструкція.
Структура уроку
Хід уроку
1. Організаційний момент
Вітання з класом. Перевірка присутності і готовності учнів до уроку. Перевірка виконання домашнього завдання.
2. Актуалізація опорних знань
Яким чином створюють графічні примітиви у програмі мовою Java?
Отримані відповіді порівняти з раніше розглянутим прикладом.
3. Вивчення нового матеріалу
Таймер-планувальник — вбудований засіб мови програмування, що задає виклик певного методу через проміжок часу, вказаний розробником.
Таймер задає багатократне виконання певних дій, дозволяючи, на відміну від циклу, виконувати інші дії у проміжках між зверненнями таймера.
Синтаксис застосування таймера з перевіркою умови продовження роботи таймера мовою Java має такий вигляд.
… import java.util.TimerTask; import java.util.Timer; … boolean b=true; // при справдженні цієї змінної таймер працюватиме Timer timer; // опис типу таймера зовні методу застосування … timer = new Timer(); // створення таймера у методі застосування timer.schedule( // опис розкладу роботи таймера new Step(), // створення і використання представника класу Step 0, // початкова затримка у мілісекундах 100); // кількість мілісекунд між послідовними викликами … class Step extends TimerTask { @Override public void run() // опис періодично виконуваних дій { if (b) { /* код, який викликає таймер */ } else { timer.cancel();} // знищення таймера для очищення пам'яті } } …
Тут трикрапкою … позначено частини коду, що не стосуються роботи таймера.
Використання таймера при створенні анімації засобами подвійної буфернизації подано прикладом, код якого потрібно детально проаналізувати.
4. Інструктаж з ТБ
5. Вироблення практичних навичок
Завдання. Створити комп'ютерну програму мовою Java для гри «Гармата». Мета гри: для даних розташування цілі й початкової швидкості підібрати кут запуску ядра для ураження цілі.
Математична модель. Для зручності програмного втілення систему координат доцільно вибрати таким чином:
Вважати, що рух тіла є рівномірним по горизонталі і зі сталим прискоренням по вертикалі при нехтуванні опором повітря. Інакше кажучи, вважати, що координати центра ядра залежать від часу t таким чином:
x = x0 + v0x · t,
y = y0 + v0y · t + g · t2/2.
Тут:
При виконанні завдання для кроків, що передбачають зміну коду, використати конкурс ідей і порівнювати з очікуваним. Для перегляду здійснювати перехід за гіперпосиланням.
Вказівки до виконання завдання:
Cтворити проєкт game:
Створити форму для елементів графічного інтерфейсу:
на вкладенні Project (Проекти) клацанням правої кнопки миші на вузлі game викликати контекстне меню;
у контексному меню вибрати New / Other (Новий / Інше);
У результаті буде створено форму Game, пов'язану з файлом Game.java. Клас Game відкриває форму Game в GUI Builder. Пакунок game стане пакунком як усталено.
Виділити панель у навігаторі об'єктів (малюнок знизу ліворуч) і на вкладенні властивостей задати колір (150, 200, 250) моделі RGB (малюнок знизу праворуч).
Виділити напис, текстове поле чи кнопку у навігаторі об'єктів (малюнок знизу ліворуч) і на вкладенні властивостей задати відповідне значення властивості text (малюнок знизу праворуч).
Виділити форму у навігаторі об'єктів (малюнок знизу ліворуч) і на вкладенні властивостей задати значення властивості title "Гра «Постріл гармати»" (малюнок знизу праворуч).
Створити обробник події натискання кнопки: клацнути правою кнопкою миші на кнопці й у контекстному меню вибрати Events / Action / actionPerformed (Події / Дія / Виконана дія).
При виборі actionPerformed (Виконана дія) середовище програмування створить метод обробника події jButton1ActionPerformed. У середовищі програмування буде відкрито вкладення Source (Джерело), де відображено місце для опису дії, яку потрібно виконати після натискання кнопки за допомогою миші або клавіатури. Сіре тло позначає код, породжений середовищем програмування у відповідь на дії програміста.
Запровадити змінні класу Game, необхідні для комп'ютерного втілення математичної моделі:
boolean b, c; int d0=8, d1=8, w, h; double a, v0, v0x, v0y, t, x=-d0, y=-d0, x_0, y_0, x_1=720-d1/2, y_1=383-d1/2, dt=0.05, g=9.8; Timer timer;з таким тлумаченням:
Описати визначення параметрів моделі гри після натискання кнопки. Інакше кажучи, у створеному обробнику події натискання кнопки:
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: }на місці коментаря описати:
У межах коду класу Game створити код класу Step, чий метод run друкує у консоль повідомлення: "OK Step". Код розташувати безпосередньо після коду обробника подій jButton1ActionPerformed. Порівняти з очікуваним.
Створити код класу Panel — нащадка класу JPanel — одразу після коду класу Step. У цьому класі переозначити метод paint, який має робити таке:
визначити розміри панелі;
при t=0 визначити початкові координати ЛВК квадрата, що містить зображення ядра таким чином, щоб центр зображення ядра збігався з лівим нижнім кутом панелі;
створити буфер зображення і його графічний контекст;
заповнити панель тлом кольору (150,200,255) колірної моделі RGB;
вивести зображення-буфер на экран.
Запозичити неохідні конструкції мови Java з разіше розглянутого коду. Порівняти з очікуваним.
у вікні діалогу JPanel1 [JPanel] - Custom Creation Code ввести текст:
new Panel();
і натиснути кнопку з написом OK.
У результаті цих дій у коді програми, породженому середовищем програмування (на сірому тлі у робочому полі) рядок:
jPanel1 = new javax.swing.JPanel();
буде замінено на такий:
jPanel1 = new Panel();
Таким чином, при виконанні коду об'єкт jPanel1 буде створено як представник класу Panel з переозначеним методом paint.
Перевірити правильність роботи коду:
і після появи вікна з формою змінювати параметри моделі довільним чином та натискати клавішу з написом: "Вогонь!". У разі потреби змінити код.
6. Підбиття підсумків уроку
Обговорення проблем виконання завдання. Виставлення оцінок.
7. Домашнє завдання
У разі потреби доробити завдання. У разі невдачі порівняти з очікуваним вмістом Game.form і Game.java. Удосконалити проект, передбачивши можливість врахування сили опору повітря, що дорівнює добутку значення деякої сталої γ (передбачити введення її додатного значення з нового поля введення на формі) і швидкості руху ядра, але спрямована протилежно до напрямку цієї швидкості. Використати такі співвідношення:
x = x0 + vx0 · (1 − e − γt ) · γ − 1,
y = y0 + (vy0 · (1 − e − γt ) + gt ) · γ − 1 +
(e − γt − 1) · g · γ − 2.
Ці рівняння можна отримати, розв'язавши систему диференціальних рівнянь:
x' = vx ,
y' = vy ,
(vx)' = − γ · vx ,
(vy)' = − γ · vy + g
з такими початковими значеннями:
x(0) = x0 ,
y(0) = y0 ,
vx(0) = vx0 ,
vy(0) = vy0 .
Теорію диференціальних рівнянь вивчають у вищій школі, тому виведення рівнянь тут не подано.
Текст упорядкував Олександр Рудик.