Similar presentations:
Объектно-ориентированное программирование. Классы. Модуль 5. Урок 4
1.
Модуль 5. Урок 4.Объектно-ориентированное
программирование. Классы
Ссылка на методичку
2.
Модуль 5. Урок 4. ООП. КлассыОбсуждение:
Новый отдел
в ProTeam
3.
Уважаемые коллеги!Ваше сотрудничество со студией разработки игр получилось настолько
успешным, что руководство ProTeam решило создать собственный отдел
гейм-девелопмента.
Обсуждение
рабочих задач
Вы, как эксперты, работавшие над играми, станете его частью!
Алёна,
менеджер проектов
4.
Уважаемые коллеги!Ваше сотрудничество со студией разработки игр получилось настолько
успешным, что руководство ProTeam решило создать собственный отдел
гейм-девелопмента.
Обсуждение
рабочих задач
Вы, как эксперты, работавшие над играми, станете его частью!
Что вам известно о создании игр? Предположите:
Какие жанры игр существуют?
Чем геймдизайнер отличается от разработчика игр?
Что такое игровой цикл?
Алёна,
менеджер проектов
5.
Ваша роль в команде —разработчик игр
Менеджер
проекта
Менеджер
проекта
Продюсер
Команда разработки
Разработчик
Геймдизайнер
Художник
Тестировщик
Обсуждение
рабочих задач
Управление разработкой
6.
Ваша роль в команде —разработчик игр
Обсуждение
рабочих задач
Почти всегда перед вами будет техническое задание с функционалом и
иллюстрации с ожидаемой работой игры.
7.
Ваша роль в команде —разработчик игр
Почти всегда перед вами будет техническое задание с функционалом и
иллюстрации с ожидаемой работой игры.
➔ создание игровых объектов (персонажи и
их окружение);
➔ создание геймплея (взаимодействие
игрока с игрой);
➔ симуляция физики объектов (движение,
столкновения);
➔ управление игрой с помощью аппаратуры
(обработка событий).
Обсуждение
рабочих задач
Задачи разработчика игр:
8.
Создание собственных объектов — фундаментразработки игр
Как создать собственный игровой объект?
Обсуждение
рабочих задач
Можно ли с помощью известных инструментов создать объекты: «Рейнджер»,
«Ракета», «Автомобиль», «Лучник», «Замок», «Дракон»?
9.
Создание собственных объектов — фундаментразработки игр
Как создать собственный игровой объект?
Модуля Turtle и его черепашек не хватит…
Также не понятно, как задать этим типам
объектов их собственные методы.
Обсуждение
рабочих задач
Можно ли с помощью известных инструментов создать объекты: «Рейнджер»,
«Ракета», «Автомобиль», «Лучник», «Замок», «Дракон»?
10.
Создание собственных объектов — фундаментразработки игр
Как создать собственный игровой объект?
Нужно научиться
создавать классы объектов
и задавать им свойства и методы.
Модуля Turtle и его черепашек не хватит…
Также не понятно, как задать этим типам
объектов их собственные методы.
Обсуждение
рабочих задач
Можно ли с помощью известных инструментов создать объекты: «Рейнджер»,
«Ракета», «Автомобиль», «Лучник», «Замок», «Дракон»?
11.
Цель рабочего дня —изучить и применить на практике создание классов.
Для быстрого погружения в гейм-девелопмент организован трёхдневный
тренинг по созданию собственных объектов.
● узнаете, что такое класс, экземпляр класса,
конструктор класса;
● создадите собственный класс с полями (свойствами)
и методами;
● используете классы в создании текстового квеста
«Рыцарь и дракон».
Обсуждение
рабочих задач
Сегодня вы:
12.
Модуль 5. Урок 4. ООП. Классы«Мозговой штурм»:
Создание
классов
13.
Как создать собственный объект?Для этого необходимо знать:
«Мозговой
штурм»
➔ Какой этот объект? Какие данные его описывают?
➔ Что умеет делать этот объект? Какие действия он выполняет?
Порассуждаем на примере всем знакомого объекта
14.
Чтобы создать собственный объект, нужноописать его данные и действия.
➢ есть колеса
➢ есть фары
➢ есть двери
➢ умеет ездить
➢ в неё могут
сесть люди
— это
машина
➢ есть зеркала
«Мозговой
штурм»
➢ заводится
15.
Класс— единое название для многих объектов;
— в программировании: общее описание того, как должны быть
устроены эти объекты.
Объект
Класс объекта
Знания про все такие объекты
«Мозговой
штурм»
ЭТО — машина
16.
Экземпляр класса«Мозговой
штурм»
— это объект, созданный по описанию, запрограммированному в
классе.
Экземпляр класса
Класс
17.
Экземпляр класса— это объект, созданный по описанию, запрограммированному в
классе.
экземпляр = Класс()
Свойства
Методы
Создаём
объект
Свойства
Методы
«Мозговой
штурм»
Описываем класс:
Объект получает всё, что
знает и умеет класс.
18.
Какой класс вам уже известен?«Мозговой
штурм»
Вы уже давно работаете с экземплярами одного известного класса!
19.
«Черепашка» — это класс TurtleРассмотрим создание экземпляра класса Turtle:
t1 = Turtle()
Конструктор
класса
Имя класса со скобками является командой, создающей
новый объект этого класса.
Результат работы — ссылка, указывающая на объект
(хранится в переменной).
«Мозговой
штурм»
Экземпляр
класса
20.
Конструктор— это метод, который автоматически вызывается при создании
объекта. Он создаёт экземпляр класса.
«Мозговой
штурм»
Часто в конструкторе задаются свойства создаваемого объекта.
21.
Создание классаclass (в англ. — «класс») — команда, создающая класс.
self (в англ. — «сам, себя») — текущий объект класса.
Имя класса
():
def __init__(self,
self.
Данные
Свойство
):
Данные
= name
def print_info(self):
print('Информация об объекте:', self. Свойство
Экземпляр
=
Имя класса
(
Свойство
)
)
«Мозговой
штурм»
class
22.
Создание классаclass (в англ. — «класс») — команда, создающая класс.
self (в англ. — «сам, себя») — текущий объект класса.
Имя класса
def __init__(self,
self.
Данные
Свойство
):
Данные
= name
def print_info(self):
print('Информация об объекте:', self. Свойство
Экземпляр
=
Имя класса
(
Свойство
)
)
«Мозговой
штурм»
class
Команда, с которой
начинается описание
класса.
():
23.
Создание классаclass (в англ. — «класс») — команда, создающая класс.
self (в англ. — «сам, себя») — текущий объект класса.
Имя класса
():
def __init__(self,
self.
Данные
Свойство
):
Конструктор с
процессом создания
экземпляра класса.
Данные
= name
def print_info(self):
print('Информация об объекте:', self. Свойство
Экземпляр
=
Имя класса
(
Свойство
)
)
«Мозговой
штурм»
class
24.
Создание классаclass (в англ. — «класс») — команда, создающая класс.
self (в англ. — «сам, себя») — текущий объект класса.
Имя класса
():
def __init__(self,
self.
Данные
Свойство
):
Данные
= name
def print_info(self):
print('Информация об объекте:', self. Свойство
Экземпляр
=
Имя класса
(
Свойство
)
)
Метод
класса
(может
быть
любой!)
«Мозговой
штурм»
class
25.
Создание классаclass (в англ. — «класс») — команда, создающая класс.
self (в англ. — «сам, себя») — текущий объект класса.
Имя класса
():
def __init__(self,
self.
Данные
Свойство
):
Данные
= name
def print_info(self):
print('Информация об объекте:', self. Свойство
Экземпляр
=
Имя класса
(
Свойство
)
)
Создание экземпляра
класса с указанным
свойством.
«Мозговой
штурм»
class
26.
Текстовый квест «Рыцарь и дракон»Суть квеста:
➔ Рыцарь направляется в логово дракона, чтобы
сразиться с ним и забрать его сокровища.
➔ За победу над разбойником рыцарь получает
опыт. Его броня становится крепче, а удар —
сильнее. Но в схватке можно и погибнуть и не
добраться до дракона.
«Мозговой
штурм»
➔ По пути в логово встречаются разбойники.
Рыцарь может проехать мимо или вступать с
ними в схватку.
27.
Текстовый квест «Рыцарь и дракон»Что будем делать?
➔ Создадим класс Hero («Персонаж»).
➔ Опишем в конструкторе поля класса.
➔ Зададим методы класса.
➔ Создадим экземпляры класса Hero: рыцарь,
разбойники, дракон.
«Мозговой
штурм»
➔ Запрограммируем «поединки» между
экземплярами класса.
28.
Класс HeroЗапрограммируем класс с полями и методами, изложенными в mind map.
Имя персонажа
Поля класса
(свойства)
Уровень здоровья
Класс брони
Сила удара
Печать информации о персонаже
Методы класса
Нанести удар по врагу
«Мозговой
штурм»
Оружие
Класс Hero
29.
Класс Hero: конструктор и печать данныхПри создании экземпляра класса должен создаваться персонаж с указанными
свойствами.
Здоровье: 50
Ричард
Броня: 25
«Мозговой
штурм»
Оружие: меч
Сила удара: 20
30.
class Hero():def __init__(self, name, health, armor, power, weapon):
self.name = name
self.health = health #число
self.armor = armor #число
self.power = power #число
self.weapon = weapon #строка
print('Поприветствуйте героя ->', self.name)
print('Уровень здоровья:', self.health)
#продолжите самостоятельно
knight = Hero('Ричард', 50, 25, 20, 'меч')
knight.print_info()
«Мозговой
штурм»
def print_info(self):
31.
Класс Hero: метод strike()Ричард
Хелен
Здоровье: 50
Здоровье: 20
Оружие: меч
Оружие: лук
Броня: 25
Броня: 5
Сила удара: 20
Сила удара: 5
«Мозговой
штурм»
Создадим два экземпляра класса и запрограммируем нанесение удара одним героем по
другому.
32.
Класс Hero: метод strike()Ричард
Хелен
Здоровье: 50
Здоровье: 5
Оружие: меч
Оружие: лук
Броня: 25
Броня: 0
Сила удара: 20
Сила удара: 5
Удар!
«Мозговой
штурм»
Создадим два экземпляра класса и запрограммируем нанесение удара одним героем по
другому.
33.
Добавим в класс метод, атакующий врага.Сперва урон наносится по броне, а когда её не остаётся, то по здоровью.
def strike(self, enemy):
Укажем как параметр объект Hero, по
которому наносится удар.
print(
'-> УДАР! ' + self.name + ' атакует ' + enemy.name +
enemy.armor -= self.power
if enemy.armor < 0:
enemy.health += enemy.armor
enemy.armor = 0
Урон наносится по броне.
Если брони не осталось, то
вычитаем остальное из
здоровья.
print(
enemy.name + ' покачнулся(-ась).\nКласс брони упал до '
+ str(enemy.armor) + ', а уровень здоровья до '
+ str(enemy.health) + '\n')
«Мозговой
штурм»
' с силой ' + str(self.power) + ', используя ' + self.weapon + '\n')
34.
class Hero():def __init__(self, name, health, armor, power, weapon):
Тело метода
def print_info(self):
Тело метода
def strike(self, enemy):
knight = Hero('Ричард', 50, 25, 20, 'меч')
knight.print_info()
rascal = Hero('Хелен', 20, 5, 5, 'лук')
rascal.print_info()
knight.strike(rascal)
«Мозговой
штурм»
Тело метода
35.
Задачи:➔ Создайте класс Hero с перечисленными полями и методами.
➔ Создайте два экземпляра класса: рыцаря и разбойника.
➔ Потренируйтесь «наносить удары» методом strike():
«Мозговой
штурм»
◆ Правило поединка: удары наносятся по очереди.
36.
Модуль 5. Урок 4. ООП. КлассыПлатформа:
Квест:
«Рыцарь и дракон»
37.
Выполните задания на платформе«Квест: Рыцарь и Дракон»
Работаем на
платформе
learn.algoritmika.org
38.
Перерыв39.
Модуль 5. Урок 2. ООП. События«Мозговой штурм»:
Квест
«Рыцарь и Дракон»
40.
Игра-квест «Рыцарь и дракон»Рыцарь начинает путь
Пусть на пути у рыцаря
встретится коварный
разбойник Питер, вооружённый
ножом.
Рыцарь встречает
Разбойника и начинает бой
нет
да
Погиб Разбойник?
Рыцарь встречает Дракона и
начинает бой
ПРОИГРЫШ
нет
ПРОИГРЫШ
Погиб
Дракон?
да
ПОБЕДА
«Мозговой
штурм»
Рыцарь повышает класс
брони и силу удара
41.
Игра-квест «Рыцарь и дракон»Рыцарь начинает путь
Рыцарь встречает
Разбойника и начинает бой
ПРОИГРЫШ
да
Погиб Разбойник?
Возможно, если
Рыцарь стал сильнее
в схватке с
разбойником.
Рыцарь повышает класс
брони и силу удара
Рыцарь встречает Дракона и
начинает бой
нет
ПРОИГРЫШ
Погиб
Дракон?
да
ПОБЕДА
«Мозговой
штурм»
нет
42.
Шаг 1 — сохраним Hero как модуль➔ Оставьте в уровне только класс Hero.
Сохраните его как модуль Hero.
«Мозговой
штурм»
➔ В следующем уровне подключите модуль
Hero, создайте персонажей Рыцарь,
Разбойник и Дракон, и напечатайте
информацию о них.
43.
Шаг 1 — сохраним Hero как модуль➔ Оставьте в уровне только класс Hero.
Сохраните его как модуль Hero.
➔ В следующем уровне подключите модуль
Hero, создайте персонажей Рыцарь,
Разбойник и Дракон и напечатайте
информацию о них.
knight = Hero('Ричард', 50, 25, 20, 'меч')
rascal = Hero('Питер', 20, 5, 5, 'нож')
dragon = Hero('Дракон', 100, 25, 10, 'пламя')
#печать данных дополните самостоятельно
«Мозговой
штурм»
from hero import Hero
44.
Шаг 2 — создадим метод fight()Суть метода:
Как запрограммировать такой метод?
Можно ли вызывать метод strike() в методе fight()?
«Мозговой
штурм»
❖ Участники схватки наносят друг другу удары (метод strike()), пока не
останется жив только один из них.
45.
Дополним класс Hero методом fight()В его теле будем использовать метод strike().
Имя персонажа
Поля класса
(свойства)
Уровень здоровья
Класс брони
Сила удара
Печать информации о персонаже
Методы класса
Нанести удар по врагу
Сразиться с врагом
«Мозговой
штурм»
Оружие
Класс Hero
46.
Дополним класс Hero методом fight()В его теле будем использовать метод strike().
def fight(self, enemy):
while self.health and enemy.health > 0:
Пока уровень здоровья
противников выше 0.
self.strike(enemy)
print(enemy.name, 'пал в этом нелегком бою!\n')
Персонажи атакуют друг
друга по очереди.
Если уровень здоровья
одного из них стал
меньше 0, битва
окончена.
break
sleep(5)
enemy.strike(self)
if self.health <= 0:
print(self.name, 'пал в этом нелегком бою!\n')
break
sleep(5)
Расставим паузы, чтобы
была интрига.
«Мозговой
штурм»
if enemy.health <= 0:
47.
class Hero(): #модуль Herodef __init__(self, name, health, armor, power, weapon):
Тело метода
def print_info(self):
Тело метода
def strike(self, enemy):
def fight(self, enemy):
Тело метода
Запрограммируем в следующем уровне
битву Рыцаря и Разбойника.
«Мозговой
штурм»
Тело метода
48.
Основная часть программы:from hero import Hero
knight = Hero('Ричард', 50, 25, 20, 'меч')
knight.print_info()
rascal = Hero('Питер', 20, 5, 5, 'нож')
sleep(5)
knight.fight(rascal)
«Мозговой
штурм»
rascal.print_info()
49.
Шаг 3 — улучшение удара и брониСуть метода:
❖ если рыцарь выжил, то:
Как запрограммировать восстановление здоровья
и улучшение брони и удара?
«Мозговой
штурм»
➢ здоровье восстанавливается до начального значения;
➢ класс брони увеличивается в два раза;
➢ сила удара увеличивается в два раза.
50.
Дополним основную часть программыif knight.health > 0:
knight.health = 100
knight.power *= 2
Если рыцарь выжил.
Восстанавливаем
здоровье, увеличиваем
силу и удваиваем броню.
knight.armor = 10 * 2
print(
'\n' + knight.name +
' восстановил силы и стал опытнее. Теперь сила его
str(knight.power) + ', а класс брони:' +
str(knight.armor) + '\n')
«Мозговой
штурм»
удара: ' +
Уведомляем
пользователя об
изменениях.
51.
«Мозговойштурм»
Дополняем код схваткой с Драконом,
и оформляем повествование:
52.
Задачи:➔ Вынесите класс Hero в отдельный модуль.
➔ Дополните модуль Hero методом fight().
➔ Запрограммируйте квест!
◆ Запрограммируйте поединок Рыцаря и Разбойника.
Если победил Рыцарь, повысьте ему класс брони и силу.
«Мозговой
штурм»
◆ Запрограммируйте поединок Рыцаря и Дракона.
53.
Модуль 5. Урок 4. ООП. КлассыПлатформа:
Квест:
«Рыцарь и дракон»
54.
Выполните задания на платформе«Квест: Рыцарь и Дракон»
Работаем на
платформе
learn.algoritmika.org
55.
Модуль 5. Урок 4. ООП. КлассыЗавершение
рабочего дня
56.
Для завершения работыпройдите техническое интервью
1. Что такое класс, экземпляр класса, конструктор
класса?
Подведение итогов
рабочего дня
1. Как связаны объекты и классы? Какой класс
стандартной библиотеки Python вы уже знаете?
2. Как создать свой класс? Где описываются свойства
(поля) класса?
Костя,
Алёна,
старший разработчик
менеджер проектов
57.
Оценка эффективности проделаннойработы
Поделитесь с коллегами:
2. Что получилось не так, как хотелось?
3. Что нужно сделать, чтобы в следующий раз избежать
неудачи?
Подведение итогов
рабочего дня
1. Что у вас получилось лучше всего?
58.
«Бонусныезадачи»
Подведение итогов
рабочего дня
Дополнительные задания для
повышения эффективности
programming