Моделювання руху об’єктів

ПРАКТИЧНА РОБОТА 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 пікселів по горизонталі, пікселів по вертикалі.
Якщо кулька торкнулася нижньої межі полотна, значення лічильника промахів збільшується на 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. Поекспериментуйте зі зміною швидкості руху кульки, розмірами кульки та ракетки.


Зробіть висновок: як реалізувати пересування графічних об’єктів на полотні.