Моделювання руху об’єктів
ПРАКТИЧНА РОБОТА 12
Завдання: скласти ігрову програму Відбий кульку.
Кулька з’являється на полотні у випадковому місці й починає рух із відбиттям від меж вікна. Користувач керує ракеткою, не даючи кульці торкнутися нижньої межі полотна. Гра триває до 5 промахів користувача.
Обладнання: комп’ютер із середовищем програмування Python.
Хід роботи
Під час роботи за комп’ютером дотримуйтеся правил безпеки.
В IDLE виберіть команду File → New File.
1. Створіть вікно програми tk із заголовком Рух кульки.
Завершіть програму командою tk.mainloop().
Збережіть програму у файлі з назвою Pract12.
2. Імпортуйте необхідні модулі:
from tkinter import*
from random import*
from time import*
3. Додайте об’єкт canvas класу Сanvas розміром 500×400.
4. Створіть список кольорових констант:
colors = ['red', 'orange', 'yellow', 'green', 'blue']
5. Створіть об’єкт b за допомогою методу create_oval.
Колір заповнення кульки вибирається зі списку colors випадковим чином:
b = canvas.create_oval(10, 150, 60, 200, fill = choice(colors))
6. У змінних х, у збережіть початкові координати кульки.
Створіть змінну k — лічильник промахів гравця:
х, у = 10, 150
k = 0
7. Рух кульки починається після натискання на ліву клавішу миші:
canvas.bind('<1>', click)
8. Створіть об’єкт r класу Label — «ракетку», яка буде відбивати кульку.
r = Label(tk, width = 12, bg = 'blue')
r.place(x = 10, y = 320)
9. Ракетка рухатиметься вправо і вліво після натискання на клавіші керування курсором (події '<KeyPress-Left>', '<KeyPress-Right>').
r.focus_set()
r.bind('<Key>', r_move)
10. Опишіть обробник події Натискання на клавіші керування курсором:
def r_move(event):
if event.keysym == 'Left': step = –10
elif event.keysym == 'Right':
step = 10 event.widget.place(x = event.widget.winfo_x()+step)
11. Опишіть обробник події Натискання на ліву клавішу миші, у якому запускається рух кульки по горизонталі в нескінченному циклі.
Якщо кулька торкається межі полотна, значення зсуву змінюється на протилежне, тобто кулька змінює напрямок руху.
Метод move пересуває об’єкт b на dx пікселів по горизонталі, dу пікселів по вертикалі.
Якщо кулька торкнулася нижньої межі полотна, значення лічильника промахів збільшується на 1.
Гру закінчено, якщо допущено 5 промахів.
def click(event):
global x, y, k, canvas # Дозвіл на зміну значень глобальних змінних
dx = dy = 5 # Задання кроку руху по осях X і Y
if x>r.winfo_x()and x<r.winfo_x()+70 and y>270:
dy = –dy # Відбиття кульки від ракетки
x = x+dx
y = y+dy # Обчислення нових координат об’єкта
canvas.move(b, dx, dy) # Переміщення кульки на полотні
tk.title('Залишилось життів – '+ str(5–k)) # Оновлення заголовка вікна
if k == 5:
canvas.create_text(250, 100, text = "GAME OVER!", font = "Arial 25") # Перевірка кількості промахів
break # Вихід із циклу
tk.update() # Оновлення вікна
sleep(0.05) # Затримка для створення ефекту анімації
12. Поекспериментуйте зі зміною швидкості руху кульки, розмірами кульки та ракетки.
Зробіть висновок: як реалізувати пересування графічних об’єктів на полотні.