5.97M
Category: programmingprogramming

Объектно - ориентированное программирование. События

1.

Модуль 5. Урок 2.
Объектно-ориентированное
программирование. События
Ссылка на методичку

2.

Модуль 5. Урок 2. ООП. События
Обсуждение:
Новый заказ

3.

Получен новый заказ!
Директору студии разработки игр Press and Play понравился прототип игры
«Черепашьи гонки» от ProTeam. Он хочет продолжить сотрудничество.
На этот раз требуется разработка двух прототипов одной игры.
Обсуждение
рабочих задач
Интересная деталь — это интерактивная игра «Поймай черепашку».
Знаете ли вы, какая игра называется интерактивной?
Была ли игра «Черепашьи гонки» интерактивной?
Алёна,
менеджер проектов

4.

Рассмотрим ожидаемый результат
Обсуждение
рабочих задач
Игра «Поймай черепашку». Черепашка появляется в случайном месте экрана и исчезает.
Задача пользователя — три раза «поймать» черепашку (кликнуть по ней). После этого
появляется надпись «WOW!» и игра завершается.

5.

Рассмотрим ожидаемый результат
Игра «Поймай черепашку». Черепашка появляется в случайном месте экрана и исчезает.
Задача пользователя — три раза «поймать» черепашку (кликнуть по ней). После этого
появляется надпись «WOW!» и игра завершается.
В зависимости от действий пользователя
программа выбирает команду для
исполнения.
Обсуждение
рабочих задач
В такой игре пользователь
взаимодействует с компьютером.

6.

В чём сложность?
В простых случаях можно обойтись условным оператором.
Но что если игровых объектов много (хотя бы три)? А если это сложная ролевая
игра с десятками персонажей и сотнями объектов окружения?
Обсуждение
рабочих задач
Выбор следующей команды для исполнения условным оператором
становится сложным!

7.

А ещё в чём сложность?
В игре «Поймай черепашку» пользователь взаимодействует с программой
компьютерной мышью (тачпадом).
При нажатии на объект компьютер должен переключиться
с перемещения черепашки на отображение надписи «А!» или «WOW!».
пока по объекту не
кликнули три раза:
ПРОВЕРКИ
ПЕРЕКЛЮЧЕНИЙ
Был ли клик по объекту?
отобразить объект в
случайном месте на 1,5 сек
Был ли клик по объекту?
скрыть объект
Был ли клик по объекту?
...
...
Обсуждение
рабочих задач
ОСНОВНОЙ АЛГОРИТМ

8.

В чём сложность?
пока по объекту не
кликнули три раза:
отобразить объект в
случайном месте на 1,5 сек
скрыть объект
отобразить надпись...
ПРОВЕРКИ
ПЕРЕКЛЮЧЕНИЙ
Был ли клик по объекту?
Был ли клик по объекту?
Был ли клик по объекту?
...
Переключение на другой алгоритм
Для создания интерактивных (взаимодействующих с пользователем) программ в
коде задаются несколько алгоритмов для исполнения и условие
переключения между ними.
Обсуждение
рабочих задач
ОСНОВНОЙ АЛГОРИТМ

9.

Другие примеры
Нажатие на кнопку «Стоп» или
«Следующий трек» прерывает
основной алгоритм и
запускает дополнительный.
Обсуждение
рабочих задач
Программ, постоянно переключающихся между разными алгоритмами, очень
много. Вспомните хотя бы проигрыватель!

10.

Цель рабочего дня —
создать два прототипа интерактивной игры «Поймай
черепашку».
● узнаете, что такое событие, подписка на событие,
обработчик событий;
● узнаете, как программно обработать клик мышкой по
игровому объекту;
● запрограммируете два прототипа игры «Поймай
черепашку».
Обсуждение
рабочих задач
Сегодня вы:

11.

Модуль 5. Урок 2. ООП. События
Подтверждение
квалификации

12.

Чтобы приступить к рабочим задачам,
продемонстрируйте уровень своих
знаний.
Подтверждение
квалификации
Покажите, что вы готовы к «мозговому
штурму»!

13.

Что такое объект?
Подтверждение
квалификации
Приведите примеры объектов.

14.

Объект —
это набор данных и действий, которые удобно
воспринимать как единое целое.
Подтверждение
квалификации
Объекты реального мира:

15.

Что такое свойство и
метод объекта?
Подтверждение
квалификации
Как обратиться к ним программно?

16.

На русском языке:
Заяц, беги!
На языке
программирования:
Заяц бежать()
.
Подтверждение
квалификации
Каждый из объектов хранит о себе информацию
и умеет выполнять некоторые действия.

17.

Каждый из объектов хранит о себе информацию
и умеет выполнять некоторые действия.
Говорят, что объект обладает свойствами и управляется методами.
Методы
заяц.скорость = 50
заяц.бежать()
черепаха.скорость = 1
черепаха.ползти()
рыба.скорость = 30
рыба.плыть()
Переменная, помещённая внутрь
объекта.
Функция, помещённая
внутрь объекта.
Подтверждение
квалификации
Свойства

18.

Подтверждение
квалификации
Своими словами объясните, в чём суть
объектно-ориентированного подхода в
программировании.

19.

Объектно-ориентированное программирование

Объекты далеко не всегда черепашки!
Просто пока мы умеем работать только с ними.
Подтверждение
квалификации
это подход, который базируется на создании объектов
и управлении ими.

20.

Квалификация подтверждена!
Подтверждение
квалификации
Отлично, вы готовы к «мозговому штурму» и
реализации рабочей задачи!

21.

Модуль 5. Урок 2. ООП. События
«Мозговой штурм»:
События и их обработка

22.

Переключение между алгоритмами
Управлять переключением между алгоритмами программы условным
оператором может быть очень сложно.
К счастью, системы анализа действий пользователя и обращения к
нужным алгоритмам уже написаны!
«Мозговой
штурм»
Изучим, как они работают.

23.

Система исполнения программ —
это встроенная в компьютер система, которая запускает различные
алгоритмы и автоматически переключается между ними,
анализируя «внешний мир» программы.
Система исполнения
Работающая программа
«Мозговой
штурм»
Внешний мир —
это любая подключённая к
компьютеру аппаратура.

24.

Событие —
это информация, подготовленная системой исполнения, о том,
что происходит во «внешнем мире».
Внешний мир —
это любая подключённая к
компьютеру аппаратура.
Система исполнения
Произошло какое-то
событие?
«Мозговой
штурм»
Работающая программа

25.

Событие —
это информация, подготовленная системой исполнения, о том,
что происходит во «внешнем мире».
Внешний мир —
это любая подключённая к
компьютеру аппаратура.
Система исполнения:
«Произошло событие!»
(Готовит информацию о нём).
Произошло какое-то
событие?
«Мозговой
штурм»
Работающая программа

26.

Подписка на событие —
это запрос программы, какое событие для неё важно.
Внешний мир —
это любая подключённая к
компьютеру аппаратура.
Система исполнения:
«Произошло событие!»
(Готовит информацию о нём).
«Это важное для меня событие!
Я должна отреагировать».
Произошло какое-то
событие?
«Мозговой
штурм»
Работающая программа:

27.

Обработчик события —
это алгоритм, который описывает реакцию на событие.
Внешний мир —
это любая подключённая к
компьютеру аппаратура.
Система исполнения:
«Произошло событие!»
(Готовит информацию о нём).
«Это важное для меня событие!
Я должна отреагировать».
Произошло какое-то
событие?
РЕАКЦИЯ НА
СОБЫТИЕ
«Мозговой
штурм»
Работающая программа:

28.

Система исполнения программ
Таким образом может происходить переключение между различными
алгоритмами в зависимости от событий извне.
Алгоритм_1
Событие «внешнего мира»
Алгоритм_2
Событие «внешнего мира»
Алгоритм_1
Событие «внешнего мира»
Алгоритм_3
«Мозговой
штурм»
Алгоритм_2

29.

Уже с помощью одного события «клик по черепашке» можно
создать два разных прототипа игры!
«Мозговой
штурм»
«Поймай черепашку» — прототип 1.

30.

Уже с помощью одного события «клик по черепашке» можно
создать два разных прототипа игры!
«Мозговой
штурм»
«Поймай черепашку» — прототип 2.

31.

Создаём прототип 1:
Сначала рассмотрим задачу без события «клик по черепашке».
Как при запуске игры отобразить черепашку в случайном месте?
Как оставить её там на 1,5 секунды?
«Мозговой
штурм»
Как затем переместить в другое случайное место?

32.

Рассмотрим задачу без события «клик по черепашке».
Подключить модули turtle, time, random
Создать игровой объект — черепашку
Задать свойства объекта
(цвет, форма, скорость перемещения)
Для первого шага
достаточно цикла с
всегда истинным
условием.
Определить рамки для перемещения
Да
Приостановить выполнение программы на 1,5 секунды
Переместить объект в случайную точку
«Мозговой
штурм»
Нет
Истина

33.

from turtle import *
from time import sleep
Для черновой версии игры достаточно
цикла с всегда истинным условием.
from random import randint
t = Turtle()
t.color('red')
t.penup()
t.shape('turtle')
t.speed(100)
w = 200
def rand_move():
t.goto(randint(-w, w), randint(-h, h))
while True:
sleep(1.5)
rand_move()
«Мозговой
штурм»
h = 200

34.

Продолжаем!
Рассмотрим задачу с событием «клик по черепашке».
Запрограммируем, чтобы при нажатии на объект отображалось: «А!».
«Мозговой
штурм»
Каких инструментов нам не хватает, чтобы запрограммировать это?

35.

Turtle: новая команда
Команда
write('A!', font)
font=('Arial', 14, 'normal')
Значение
Написать текст указанным шрифтом.
Шрифт задаётся последовательностью:
«название, размер, стиль».
Пример:
«Мозговой
штурм»
t.write('A!', font=('Arial', 14, 'normal'))

36.

Обработка события «клик по черепашке»
➔ Реакция на событие должна поступить сразу после клика пользователя по
черепашке. Как подписаться на клик по черепашке?
«Мозговой
штурм»
➔ В ответ на клик по черепашке должно отображаться сообщение «А!», а сам
клик засчитываться (игра завершается при трёх попаданиях). Как создать
функцию-обработчик с такими командами?

37.

Обработка события «клик по черепашке»
Для обработки клика по объекту создадим функцию catch(), параметрами которой
будут координаты «пойманной» черепашки.
Место клика передаётся системой исполнения по подписке на событие.
Обработка события
def catch(x, y):
t.onclick(catch)
ИМЯ ФУНКЦИИ-ОБРАБОТЧИКА
«Мозговой
штурм»
Подписка на событие

38.

Подключение модулей
Для черновой версии игры достаточно
цикла с всегда истинным условием.
Создание игрового объекта
def rand_move():
t.goto(randint(-w, w), randint(-h, h))
t.write('A!', font=('Arial', 14, 'normal'))
rand_move()
t.onclick(catch)
while True:
sleep(1.5)
rand_move()
Обработка события «клик по
черепашке» функцией
catch().
«Мозговой
штурм»
def catch(x, y):

39.

Как запрограммировать выигрыш?
После трёх кликов по черепашке должна отображаться надпись «WOW!», а игра
завершаться (черепашка исчезает).
«Мозговой
штурм»
Как подсчитать клики по объекту и вовремя выйти из цикла?

40.

Подсчёт кликов
Команда onclick() вызывает функцию-обработчик catch(), передавая ей координаты
места клика.
Подсчёт кликов тоже удобно производить в catch().
Но, если задать счётчик как обычную переменную points, то для изменения его в
функции, потребуется передача его как аргумента.
«Мозговой
штурм»
Это невозможно, т. к. onclick() требует обработчик с двумя аргументами!

41.

Создание нового свойства объекта
В Python можно не только работать с готовым наполнением объектов, но и дополнять
их новыми свойствами!
Создание нового свойства аналогично созданию переменной:
Объект.свойство = значение
«Мозговой
штурм»
У объектов область видимости отличается от функций,
поэтому при изменении его значения проблем не будет!

42.

Подключение модулей
t = Turtle()
Зададим счётчик кликов как новое свойство
объекта-черепашки t.points!
При запуске игры t.points = 0.
Задание внешнего вида объекта
При каждом клике t.points += 1.
t.points = 0
Игра продолжается, пока t.points < 3.
Объявление функции rand_move()
def catch(x, y):
t.write('A!', font=('Arial', 14, 'normal'))
1
rand_move()
t.onclick(catch)
while t.points < 3:
sleep(1.5)
rand_move()
t.write('WOW!', font=('Arial', 16, 'bold'))
t.hideturtle()
«Мозговой
штурм»
t.points +=

43.

Задача:
Запрограммировать прототип игры «Поймай черепашку».
Использовать в программе обработку клика по черепашке.
«Мозговой
штурм»
Если необходимо, использовать документацию.

44.

Модуль 5. Урок 2. ООП. События
Платформа:
Press and Play:
«Поймай черепашку 1»

45.

Выполните задания на платформе
«Press and Play: “Поймай черепашку 1”»
Работаем на
платформе
learn.algoritmika.org

46.

Перерыв

47.

Модуль 5. Урок 2. ООП. События
«Мозговой штурм»:
События и
их обработка

48.

Техническое задание
Игра «Поймай черепашку» (прототип 2). При запуске игры в одной точке появляются три
черепашки, затем они начинают движение в разные стороны. Направление движения
объекта можно менять кликом по нему.
«Мозговой
штурм»
Задача — не дать черепашкам «убежать» за границу экрана.

49.

Игра «Поймай черепашку»
Рассмотрим упрощённую задачу без событий:
при запуске программы черепашки появляются в одной точке и «расползаются» в
разные стороны.
«Мозговой
штурм»
Как это запрограммировать?

50.

Подключить модули turtle, random, time
Создать объекты-черепашки,
задать их внешний вид
Задать начальное положение черепашек:
Первая «смотрит» прямо перед собой,
Вторая — с поворотом на 120 влево,
Третья — с поворотом на 120 вправо.
Да
Переместить каждую черепашку на 7 пикселей вперёд
Поставить игру на паузу на 0,1 сек
Так создаётся
эффект шагов
черепашек.
«Мозговой
штурм»
Нет
Истина

51.

Подключение модулей
w = 200
Для черновой версии игры достаточно
цикла с всегда истинным условием.
h = 200
t1 = Turtle()
t1.color('blue')
t1.width(5)
t1.shape('turtle')
Аналогично, создание t2 и t3
t1.forward(7)
t2.forward(7)
t3.forward(7)
sleep(0.1)
exitonclick()
«Мозговой
штурм»
while True:

52.

Игра «Поймай черепашку»
Добавим обработку события «клик по черепашке» (без выхода из игры):
При клике по черепашке она перемещается в новое место на экране
направление движения.
и меняет
Как подписаться на событие «клик по черепашке», если черепашек три?
«Мозговой
штурм»
Как обработать событие перемещением черепашки?

53.

Обработка события «клик по черепашке»
Во втором прототипе у нас три черепашки.
Клик по объекту сопровождается перемещением именно этого объекта.
«Мозговой
штурм»
Получается, в игре возможны три разных события: «клик по черепашке 1», «клик по
черепашке 2» и «клик по черепашке 3».

54.

Обработка события «клик по черепашке»
Во втором прототипе у нас три черепашки.
Клик по объекту сопровождается перемещением именно этого объекта.
def catch1(x, y):
def catch2(x, y):
def catch3(x, y):
t1.onclick(catch1)
t2.onclick(catch2)
t3.onclick(catch3)
«Мозговой
штурм»
Получается, в игре возможны три разных события: «клик по черепашке 1», «клик по
черепашке 2» и «клик по черепашке 3».

55.

Подключение модулей
Для черновой версии игры достаточно
цикла с всегда истинным условием.
Создание t1, t2 и t3
def catch1(x, y):
t1.penup()
t1.goto(randint(-100,100),randint(-100,100))
t1.pendown()
t1.left(randint(0, 180))
Аналогично, catch2(), catch3()
Аналогично, подписка на
событие для t2 и t3
while True:
t1.forward(7)
Аналогично, перемещение t2 и t3
«Мозговой
штурм»
t1.onclick(catch1)

56.

Игра «Поймай черепашку»
Добавим условие выхода из игры:
хотя бы одна черепашка вышла за пределы экрана.
«Мозговой
штурм»
Какое логическое выражение, означающее выход черепашки за пределы экрана, нужно
добавить в цикл while?

57.

Игра «Поймай черепашку»
-200
400
200
Условия окончания игры для одной
черепашки:
координата Х, взятая без
знака, больше 200;
координата Y, взятая без
знака, больше 200.
«Мозговой
штурм»
-200
400
200
Добавим условие выхода из игры:
хотя бы одна черепашка вышла за пределы экрана.

58.

Игра «Поймай черепашку»
Опишем функцию gameFinished(), возвращающую True, если игра закончена, и False,
если игра продолжается:
def gameFinished(t1, t2, t3):
t1_outside = abs(t1.xcor()) > w or abs(t1.ycor()) > h
t2_outside = abs(t2.xcor()) > w or abs(t2.ycor()) > h
t3_outside = abs(t3.xcor()) > w or abs(t3.ycor()) > h
isOutside = t1_outside or t2_outside or t3_outside
Команда
Назначение
unsigned_number = abs(number)
Функция, отбрасывающая знак числа
(было -5, стало 5).
coord_x = t.xcor(), coord_y = t.ycor()
Функции, возвращающие текущие
координаты Х и Y черепашки.
«Мозговой
штурм»
return isOutside

59.

Игра «Поймай черепашку»
Опишем функцию gameFinished(), возвращающую True, если игра закончена, и False,
если игра продолжается:
def gameFinished(t1, t2, t3):
t1_outside = abs(t1.xcor()) > w or abs(t1.ycor()) > h
t2_outside = abs(t2.xcor()) > w or abs(t2.ycor()) > h
t1_outside равна True,
если черепашка вышла за
пределы экрана
isOutside = t1_outside or t2_outside or t3_outside
return isOutside
Если хотя бы одна
черепашка вышла за
экран, то переменная
isOutside = True.
Игровой цикл
прекращает
работу!
«Мозговой
штурм»
t3_outside = abs(t3.xcor()) > w or abs(t3.ycor()) > h

60.

Подключение модулей
Создание t1, t2 и t3
Функции-обработчики событий
catch1(), catch2(), catch3()
Подписки на события
«клик по черепашке 1, 2, 3»
while gameFinished(t1, t2, t3) != True:
t1.forward(7)
t2.forward(7)
t3.forward(7)
sleep(0.1)
«Мозговой
штурм»
Функция gameFinished(),
определяющая, не вышла ли
одна из черепашек за экран

61.

Задача:
Запрограммировать второй прототип «Поймай черепашку».
Использовать в программе обработку кликов по разным черепашкам.
«Мозговой
штурм»
Если необходимо, использовать документацию.

62.

Модуль 5. Урок 2. ООП. События
Платформа:
Press and Play:
«Поймай черепашку 2»

63.

Выполните задания на платформе
«Press and Play: “Поймай черепашку 2”»
Работаем на
платформе
learn.algoritmika.org

64.

Модуль 5. Урок 2. ООП. События
Завершение
рабочего дня

65.

Для завершения работы
пройдите техническое интервью
1. Что такое система исполнения программ, внешний мир
программы?
Подведение итогов
рабочего дня
1. Что называется событием, подпиской на событие,
обработчиком события?
2. Какая команда подписывает на событие «клик по
черепашке»?
Костя,
Алёна,
старший разработчик
менеджер проектов

66.

Оценка эффективности проделанной
работы
Поделитесь с коллегами:
2. Что получилось не так, как хотелось?
3. Что нужно сделать, чтобы в следующий раз избежать
неудачи?
Подведение итогов
рабочего дня
1. Что у вас получилось лучше всего?

67.

Дополнительные задания для
повышения эффективности
Подведение итогов
рабочего дня
«Бонусные
задачи»
English     Русский Rules