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

Тема: cтворення нескладної комп’ютерної гри з використанням змінних величин мовою Python.

Мета: навчитися створювати та редагувати програму мовою Python з використанням бібліотеки tkinter.

Після виконання роботи учень:

Обладнання: ПК із встановленою ОС, редактором з підсвіткою службових слів (наприклад, Sublime Text, Notepad++, Kate) або середовищем програмування (IDLE чи Eric), інтерпретатором мови програмування Python з бібліотекою Tk, яку при ОС Ubuntu / Linux Mint встановити з Терміналу такою вказівкою:

sudo apt-get install python3-tk

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

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

Хід уроку

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

2. Актуалізація опорних знань

Описати призначення і синтаксис виклику методів бібліотеки tkinter та порівняти з очікуваним:

Прокоментувати опис класу, встановити результат виведення і порівняти з очікуваним.

class Point(object):
  def __init__(self, xy): self.xy = xy
  def ox(self):  self.xy[1]*=-1
  def oy(self):  self.xy[0]*=-1
  def o(self):                 
    self.xy[0]*=-1
    self.xy[1]*=-1

a = Point([3,4])
a.ox()
print(a.xy)
a.oy()
print(a.xy)
a.o()
print(a.xy)

3. Інструктаж з ТБ
4. Вироблення практичних навичок


Snake (Пітон, Удав, Змійка)комп'ютерна гра Танелі Арманто, що уперше з'явилася у кнопочному телефоні Nokia 6110. Гравець керує довгою тонкою істотою, схожою на змію, яка повзає клітинами прямокутного поля, збираючи їжу й уникаючи зіткнення з власним хвостом і краями ігрового поля. Кожного разу після поглинання їжі змія стає довшою. Зазвичай, на один сегмент, що займає одну клітину ігрового поля — див. приклад.

Завдання. Створити гру «Змійка».

Вказівки до виконання
(у разі потреби ознайомлювати з відповідними частинами демонстраційного розв'язання)

  1. Створити зображення ігрового поля.
                          # замовлення бібліотек:
    from tkinter import * # tkinter
    import random         # random
    
    w = 740  # ширина ігрового поля
    h = 540  # висота ігрового поля
    a = 20   # сторона квадрата - сегмента змійки
             # - бажано, щоб була дільником w i h 
    IN_GAME  = True    # стан гри: при справдженні гра триває
    
    root = Tk()                # створення вікна
    root.title("Гра «Змійка»") # встановлення назви вікна
    
    # створення полотна темнозеленого кольору
    c = Canvas(root, width=w, height=h, bg="#005500") 
    c.grid()           # розташування полотна у вікні
    c.focus_set()      # надання фокуса полотну
    
    root.mainloop()  # запуск циклу опрацювання подій

    Пересвідчитися, що у результаті виконання цього коду буде отримано таке вікно.

    Усі подальші доповнення коду вписувати перед вказівкою root.mainloop у порядку наступного переліку.

  2. Описати функцію створення зображення "плоду" — червоного круга, діаметр якого дорівнює довжині стороні сегмента "змійки", а випадкові координати його ЛВК кратні цій довжині. Пересвідчитися, що у результаті виконання коду з викликом цієї функції буде отримано таке вікно (розташування червоного круга може бути іншим).

  3. Створити початкового зображення "змійки":

    • описати клас Segment, екземпляр якого — квадрат білого кольору;

    • описати клас Snake, що містить:

      • властивість segments — список представників класу Segment;

      • властивість mapping — перелік напрямків руху змійки у вигляді асоціативного масиву, ключі якого збігаються з назвами клавіш зі стрілками, а значення дорівнюють списку приростів координат при русі у відповідному напрямку. Наприклад, таким чином:

        self.mapping = {"Down":(0,1), "Right":(1,0), "Up":(0,-1), "Left":(-1,0)}

      • властивість vector з початковим значенням — значенням властивості mapping для ключа "Right";

      • метод move руху у поточному напрямку, що діє таким чином:

        • перебираючи усі сегменти від "хвоста" до "голови" (крім останнього, що має найбільший номер) координатам поточного сегмента надати значення координат наступного сегмента, ближчого до "голови" на один крок;

        • надати координатам "голови" приросту згідно зі значенням властивості vector;

      • метод додавання сегмента "змійки" у "хвіст";

      • метод зміни напрямку руху змійки залежно від значення натиснутої клавіші event.keysym;

    • створити "змійку" з 3 сегментів у верхньому лівому куті ігрового поля.

    Пересвідчитися, що у результаті виконання цього коду буде отримано таке вікно (розташування червоного круга може бути іншим).

  4. Пов'язати полотно, подію натискання клавіші KeyPress і обробник події зміни напрямку руху.

  5. Описати перебіг гри у тілі деякої функції main:

    • при справдженні глобальної змінної IN_GAME робити таке:

      • пересунути "змійку" у наступне розташування;

      • якщо "голова змійки" висунеться за межі поля, надати змінній IN_GAME значення false;

      • якщо "змійка з'їла" червоний "плід", збільшити її довжину, знищити "плід" і створити новий "плід";

      • при перетині "голови" з іншим сегментом "змійки" надати змінній IN_GAME значення false;

      • через таймер задати запуск функції main через 100 мілісекунд;

    • інакше (при хибності глобальної змінної IN_GAME) вивести повідомлення про завершення гри: "Гру завершено з довжиною змійки ..."

    і викликати функцію main.
  6. У середовищі програмування запустити програму на виконання. У разі потреби внести зміни.

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

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

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

Змінити інтерфейс гри на такий,


запрограмувавши такі дії при натисканні кнопок:

Порівняти результат з демонстраційним розв'язанням.


Текст упорядкувала Губчик Вероніка Григорівна, учитель спеціалізованої школи № 271 з поглибленим вивченням інформаційних технологій Подільського району міста Києва, під час виконання випускної роботи на курсах підвищення кваліфікації з 30.10.2017 по 03.11.2017.