Розробка уроку — практичної роботи

Тема: створення моделей рівномірного прямолінійного руху об’єкта, руху об’єкта на площині з перешкодами та з вибором шляху створена мовою Python.

Мета: надати учням приклад створення моделі руху об’єкта на площині з перешкодами мовою Python.

Обладнання: ПК із встановленою ОС, редактором з підсвіткою службових слів (наприклад, Sublime Text), інтерпретатором мови програмування Python (версія 3.0.0 і вище).

Структура уроку

  1. Організаційний момент.
  2. Актуалізація опорних знань.
  3. Вивчення нового матеріалу.
  4. Інструктаж з ТБ.
  5. Закріплення вивченого матеріалу.
  6. Підбиття підсумків уроку.
  7. Домашнє завдання.

Хід уроку

1. Організаційний момент
Вітання з класом. Перевірка присутності і готовності учнів до уроку. Перевірка виконання домашнього завдання.

2. Актуалізація опорних знань
Питання до учнів:

  1. Які типи алгоритмів ви знаєте?
  2. Що таке розгалужений алгоритм?
  3. Що таке циклічний алгоритм?
  4. Які існують способи подання алгоритмів?
  5. Що таке комп’ютерна програма?
  6. Які мови програмування називають мовами високого рівня?
  7. Чи належить мова Python до мов високого рівня і чому?

3. Вивчення нового матеріалу.

Завдання 1. Скласти програму, що відображає рух об’єкта з оминанням випадково розташованих перешкод.

Об’єкт (червоний круг) починає рух від лівої межі середини прямокутного поля і має досягти правої сторони.

Алгоритм руху об’єкта
(створити за допомогою конкурсу ідей і порівняти із запропонованим):

  1. Початок.
  2. Зробити крок прямо (для спостерігача зліва направо).
  3. Якщо досягнуто кінець поля, перейти до пункту 8, інакше — до пункту 4.
  4. Якщо шлях прямо вільний, перейти до пункту 2.
  5. Якщо шлях ліворуч перешкода, перейти до пункту 7.
  6. Зробити крок ліворуч і перейти до пункту 4.
  7. Зробити крок праворуч і перейти до пункту 4.
  8. Кінець.

План створення програми

  1. Створити зображення поля, по якому буде рухатись об’єкт — визначити його розмір та колір.

  2. Створити об’єкт (круг) і розташувати його на початковій позиції.

  3. Розташувати на полі 8 перешкод у вигляді відрізків з використанням генератора випадкових чисел при виборі координат кінців.

  4. Запрограмувати рух об’єкта згідно зі складеним алгоритмом.

Вказівки до виконання

  1. Створити зображення поля, як і решти графічних об’єктів, за допомогою бібліотеки графічних складових tkinter:

    • під'єднати tkinter (на початку програми) такою вказівкою:

      from tkinter import *

    • під'єднати модулі:

      import time    # під'єднання таймера
      import random  # під'єднання генератора випадкових чисел
      master = Tk()  # створення екземпляру класу Tk
    • запровадити глобальні змінні програми:

      window_width =1200 # ширина поля
      widow_height = 600 # висота поля
      ball_radius  =  25 # радіус круга 
      ball_left    =  40 # відступ кульки від лівого краю
    • використовуючи клас Canvas бібліотеки tkinter, створити поле для розташування зображень об'єкта й перешкод і розташувати його у вікні програми, використовуючи метод pack :

      w = Canvas(master, width=window_width, height=widow_height, bg="light grey")
      w.pack()
  2. Створити об’єкт (круг червоного кольору) і розташувати його на початковій позиції, надавши початкові значення координатам об'єкта — аргументам методу create_oval:

    ball_x1 = ball_left
    ball_y1 = widow_height/2 - ball_radius
    ball_x2 = ball_left  + 2 * ball_radius
    ball_y2 = widow_height/2 + ball_radius
    ball    = w.create_oval(ball_x1, ball_y1, ball_x2, ball_y2, fill="red")
  3. Розташувати на полі 8 перешкод у вигляді відрізків з використанням генератора випадкових чисел random при виборі координат кінців — аргументів методу create_line:

    w.create_line(100, 60,  100, 230,width=4,fill="red")
    w.create_line(100, 350,  100, 520, width=4,fill="black")
    w.create_line(300, random.randrange(130, 140), random.randrange(200,350),random.randrange(350, 450), width=4,fill="#f36e36")
    w.create_line(500, 80,  600, 230, width=4,fill="#03c017")
    w.create_line(500, 300, 500, 520,width=5,fill="yellow")
    w.create_line(800, random.randrange(100, 150), random.randrange(600,950),random.randrange(350, 450), width=4,fill="#00a1ff")
    w.create_line(1100, 60,  1000, 230,width=4,fill="blue")
    w.create_line(1000, 350,  1100, 520, width=4, fill="#944893")
  4. Запрограмувати рух об’єкта згідно зі складеним алгоритмом:

    • описати функцію виявлення перешкоди у напрямку (0; dir):

      def check_collision(circle, dir):
        (x1, y1, x2, y2) = w.coords(ball)
        result = w.find_overlapping(x1, y1 + dir, x2, y2 + dir)
        return len(result) > 1
    • описати функцію руху об'єкта:

      def animation():
        while (True):
          (x1, y1, x2, y2) = w.coords(ball)
            if (x1 > window_width - 2 * ball_radius):
              break
            x_move = 1 # приріст абсциси  руху прямо
            y_move = 0 # приріст ординати руху прямо
            if (check_collision(ball, 0)):     # перевірка наявності перешкоди "прямо за курсом"
              if (check_collision(ball, -15)): # перевірка наявності перешкоди ліворуч
                x_move = 0 # приріст абсциси  руху праворуч
                y_move = 1 # приріст ординати руху праворуч
              if (check_collision(ball, 15)):  # перевірка наявності перешкоди праворуч
                x_move = 0 # приріст абсциси  руху ліворуч
                y_move = -1# приріст ординати руху ліворуч
            w.move(ball, x_move, y_move)    # пересування об'єкта
            w.update()
            time.sleep(0.002) # затримка у часі
    • виклик функції animation і методу запуску програми на виконання:

      w.after(0, animation)
      mainloop()

Останній рядок є обов’язковим!

4. Інструктаж з ТБ
5. Закріплення вивченого матеріалу

Завдання 2. У середовищі програмування створити текст. Запустити програму на виконання. У разі потреби внести зміни. Кінцеву редакцію програми записати у файл Ваше_прізвище.py у вказану вчителем теку.

6. Підбиття підсумків уроку
Перевірка виконання програми, виставлення оцінок.

7. Домашнє завдання

  1. Змінити вирази для координат кінців перешкод таким чином, щоб перешкоди завжди були у межах поля незалежно від його розмірів, замінивши сталі кількості пікселів у відповідних операторах надання значень на арифметичні вирази, залежні від розмірів поля.

  2. Змінити у програмі колір поля, товщину, колір і кількість перешкод.

  3. Удосконалити алгоритм для оминання випадково розташованих перешкод, що мають вигляд літери П, повернутої на ±90°.

  4. Програмно реалізувати удосконалений алгоритм для зміненого поля.


Текст упорядкувала Дубровська Ася Леонідівна, вчитель спеціалізованої школи № 194 «Перспектива» Оболонського району міста Києва, під час виконання випускної роботи на курсах підвищення кваліфікації з 17.10.2017 по 20.10.2017.