Тема: cтворення нескладної комп’ютерної гри з використанням змінних величин мовою Python.
Мета: навчитися створювати та редагувати програму мовою Python з використанням бібліотеки tkinter.
Після виконання роботи учень:
Обладнання: ПК із встановленою ОС, редактором з підсвіткою службових слів (наприклад, Sublime Text, Notepad++, Kate) або середовищем програмування (IDLE чи Eric), інтерпретатором мови програмування Python з бібліотекою Tk, яку при ОС Ubuntu / Linux Mint встановити з Терміналу такою вказівкою:
sudo apt-get install python3-tk
Структура уроку
Хід уроку
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. Гравець керує довгою тонкою істотою, схожою на змію, яка повзає клітинами прямокутного поля, збираючи їжу й уникаючи зіткнення з власним хвостом і краями ігрового поля. Кожного разу після поглинання їжі змія стає довшою. Зазвичай, на один сегмент, що займає одну клітину ігрового поля — див. приклад.
Завдання. Створити гру «Змійка».
Вказівки до виконання
(у разі потреби ознайомлювати з відповідними частинами демонстраційного розв'язання)
# замовлення бібліотек: 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 у порядку наступного переліку.
Описати функцію створення зображення "плоду" — червоного круга, діаметр якого дорівнює довжині стороні сегмента "змійки", а випадкові координати його ЛВК кратні цій довжині. Пересвідчитися, що у результаті виконання коду з викликом цієї функції буде отримано таке вікно (розташування червоного круга може бути іншим).
Створити початкового зображення "змійки":
описати клас 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 сегментів у верхньому лівому куті ігрового поля.
Пересвідчитися, що у результаті виконання цього коду буде отримано таке вікно (розташування червоного круга може бути іншим).
Пов'язати полотно, подію натискання клавіші KeyPress і обробник події зміни напрямку руху.
Описати перебіг гри у тілі деякої функції main:
при справдженні глобальної змінної IN_GAME робити таке:
пересунути "змійку" у наступне розташування;
якщо "голова змійки" висунеться за межі поля, надати змінній IN_GAME значення false;
якщо "змійка з'їла" червоний "плід", збільшити її довжину, знищити "плід" і створити новий "плід";
при перетині "голови" з іншим сегментом "змійки" надати змінній IN_GAME значення false;
через таймер задати запуск функції main через 100 мілісекунд;
інакше (при хибності глобальної змінної IN_GAME) вивести повідомлення про завершення гри: "Гру завершено з довжиною змійки ..."
У середовищі програмування запустити програму на виконання. У разі потреби внести зміни.
Записати остаточну редакцію програми у файл Ваше_прізвище.py у вказану вчителем теку.
5. Підбиття підсумків уроку
Виставлення оцінок.
6. Домашнє завдання
Змінити інтерфейс гри на такий,
Порівняти результат з демонстраційним розв'язанням.
Текст упорядкувала Губчик Вероніка Григорівна, учитель спеціалізованої школи № 271 з поглибленим вивченням інформаційних технологій Подільського району міста Києва, під час виконання випускної роботи на курсах підвищення кваліфікації з 30.10.2017 по 03.11.2017.