Similar presentations:
Объектно-ориентированное программирование. Классы
1.
Объектно-ориентированноепрограммирование. Классы
Ссылка на методичку
2.
ООП. КлассыОбсуждение:
Новый отдел
в ProTeam
3.
Уважаемые коллеги!Ваше сотрудничество со студией разработки игр получилось
настолько успешным, что руководство ProTeam решило создать
собственный отдел гейм-девелопмента.
Обсуждение
рабочих задач
Вы, как эксперты, работавшие над играми, станете его частью!
Алёна,
менеджер проектов
4.
Уважаемые коллеги!Ваше сотрудничество со студией разработки игр получилось
настолько успешным, что руководство ProTeam решило создать
собственный отдел гейм-девелопмента.
Обсуждение
рабочих задач
Вы, как эксперты, работавшие над играми, станете его частью!
Что вам известно о создании игр? Предположите:
Какие жанры игр существуют?
Чем геймдизайнер отличается от разработчика игр?
Что такое игровой цикл?
Алёна,
менеджер проектов
5.
Ваша роль в команде —разработчик игр
Менеджер
проекта
Менеджер
проекта
Продюсер
Команда разработки
Разработчик
Геймдизайнер
Художник
Тестировщик
Обсуждение
рабочих задач
Управление разработкой
6.
Ваша роль в команде —разработчик игр
Обсуждение
рабочих задач
Почти всегда перед вами будет техническое задание с функционалом
и иллюстрации с ожидаемой работой игры.
7.
Ваша роль в команде —разработчик игр
Почти всегда перед вами будет техническое задание с функционалом
и иллюстрации с ожидаемой работой игры.
➔ создание игровых объектов
(персонажи и их окружение);
➔ создание геймплея (взаимодействие
игрока с игрой);
➔ симуляция физики объектов
(движение, столкновения);
➔ управление игрой с помощью
аппаратуры (обработка событий).
Обсуждение
рабочих задач
Задачи разработчика игр:
8.
Создание собственных объектов —фундамент разработки игр
Как создать собственный игровой объект?
Обсуждение
рабочих задач
Можно ли с помощью известных инструментов создать объекты:
«Рейнджер», «Ракета», «Автомобиль», «Лучник», «Замок»,
«Дракон»?
9.
Создание собственных объектов —фундамент разработки игр
Как создать собственный игровой объект?
Модуля Turtle и его черепашек не хватит…
Также не понятно, как задать этим типам
объектов их собственные методы.
Обсуждение
рабочих задач
Можно ли с помощью известных инструментов создать объекты:
«Рейнджер», «Ракета», «Автомобиль», «Лучник», «Замок»,
«Дракон»?
10.
Создание собственных объектов —фундамент разработки игр
Как создать собственный игровой объект?
Нужно научиться
создавать классы объектов
и задавать им свойства и методы.
Модуля Turtle и его черепашек не хватит…
Также не понятно, как задать этим типам
объектов их собственные методы.
Обсуждение
рабочих задач
Можно ли с помощью известных инструментов создать объекты:
«Рейнджер», «Ракета», «Автомобиль», «Лучник», «Замок»,
«Дракон»?
11.
Цель рабочего дня —изучить и применить на практике создание классов.
Сегодня вы:
● узнаете, что такое класс, экземпляр класса,
конструктор класса;
● создадите собственный класс с полями
(свойствами) и методами;
● используете классы в создании текстового
квеста «Рыцарь и дракон».
Обсуждение
рабочих задач
Для быстрого погружения в гейм-девелопмент организован
трёхдневный тренинг по созданию собственных объектов.
12.
ООП. Классы«Мозговой штурм»:
Создание
классов
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.
ООП. КлассыПлатформа:
Квест:
«Рыцарь и дракон»
37.
Выполните задания на платформе«Квест: Рыцарь и Дракон»
Работаем на
платформе
learn.algoritmika.org
38.
Перерыв39.
ООП. События«Мозговой штурм»:
Квест
«Рыцарь и Дракон»
40.
Игра-квест «Рыцарь и дракон»Рыцарь начинает путь
Пусть на пути у рыцаря
встретится коварный
разбойник Питер,
вооружённый ножом.
Рыцарь встречает
Разбойника и начинает бой
нет
да
Погиб Разбойник?
Рыцарь встречает Дракона и
начинает бой
ПРОИГРЫШ
нет
ПРОИГРЫШ
Погиб
Дракон?
да
ПОБЕДА
«Мозговой
штурм»
Рыцарь повышает класс
брони и силу удара
41.
Игра-квест «Рыцарь и дракон»Рыцарь начинает путь
Рыцарь встречает
Разбойника и начинает бой
ПРОИГРЫШ
да
Погиб Разбойник?
Возможно, если
Рыцарь стал
сильнее в схватке с
разбойником.
Рыцарь повышает класс
брони и силу удара
Рыцарь встречает Дракона и
начинает бой
нет
ПРОИГРЫШ
Погиб
Дракон?
да
ПОБЕДА
«Мозговой
штурм»
нет
42.
Шаг 1 — сохраним Hero как модуль➔ Оставьте в уровне только класс Hero.
Сохраните его как модуль Hero.
«Мозговой
штурм»
➔ В следующем уровне подключите
модуль Hero, создайте персонажей
Рыцарь, Разбойник и Дракон, и
напечатайте информацию о них.
43.
Шаг 1 — сохраним Hero как модуль➔ Оставьте в уровне только класс Hero.
Сохраните его как модуль Hero.
from hero import Hero
knight = Hero('Ричард', 50, 25, 20, 'меч')
rascal = Hero('Питер', 20, 5, 5, 'нож')
dragon = Hero('Дракон', 100, 25, 10, 'пламя')
#печать данных дополните самостоятельно
«Мозговой
штурм»
➔ В следующем уровне подключите
модуль Hero, создайте персонажей
Рыцарь, Разбойник и Дракон и
напечатайте информацию о них.
44.
Шаг 2 — создадим метод fight()Суть метода:
Как запрограммировать такой метод?
Можно ли вызывать метод strike() в методе fight()?
«Мозговой
штурм»
❖ Участники схватки наносят друг другу удары (метод strike()),
пока не останется жив только один из них.
45.
Дополним класс Hero методом fight()В его теле будем использовать метод strike().
Имя персонажа
Поля класса
(свойства)
Уровень здоровья
Класс брони
Оружие
Класс Hero
Печать информации о персонаже
Методы класса
Нанести удар по врагу
Сразиться с врагом
«Мозговой
штурм»
Сила удара
46.
Дополним класс Hero методом fight()В его теле будем использовать метод strike().
def fight(self, enemy):
while self.health > 0 and enemy.health > 0:
Пока уровень здоровья
противников выше 0.
self.strike(enemy)
Персонажи атакуют
друг друга по
print(enemy.name, 'пал в этом нелегком бою!\n') очереди.
break
Если уровень
здоровья одного из
них стал меньше 0,
битва окончена.
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.
Дополним основную часть программыknight.health = 50
knight.power *= 2
knight.armor *= 2
print(
'\n' + knight.name +
' восстановил силы и стал опытнее. Теперь сила его
удара: ' +
str(knight.power) + ', а класс брони:' +
str(knight.armor) + '\n')
Если рыцарь выжил.
Восстанавливаем
здоровье,
увеличиваем силу и
удваиваем броню.
Уведомляем
пользователя об
изменениях.
«Мозговой
штурм»
if knight.health > 0:
51.
«Мозговойштурм»
Дополняем код схваткой с Драконом,
и оформляем повествование:
52.
Задачи:➔ Вынесите класс Hero в отдельный модуль.
➔ Дополните модуль Hero методом fight().
◆
Запрограммируйте поединок Рыцаря и Разбойника.
Если победил Рыцарь, повысьте ему класс брони и силу.
◆
Запрограммируйте поединок Рыцаря и Дракона.
«Мозговой
штурм»
➔ Запрограммируйте квест!
53.
ООП. КлассыПлатформа:
Квест:
«Рыцарь и дракон»
54.
Выполните задания на платформе«Квест: Рыцарь и Дракон»
Работаем на
платформе
learn.algoritmika.org
55.
ООП. КлассыЗавершение
рабочего дня
56.
Для завершения работыпройдите техническое интервью
Подведение итогов
рабочего дня
1. Что такое класс, экземпляр класса, конструктор
класса?
1. Как связаны объекты и классы? Какой класс
стандартной библиотеки Python вы уже знаете?
2. Как создать свой класс? Где описываются
свойства (поля) класса?
Костя,
Алёна,
старший разработчик менеджер проектов
57.
Оценка эффективностипроделанной работы
1. Что у вас получилось лучше всего?
2. Что получилось не так, как хотелось?
3. Что нужно сделать, чтобы в следующий раз
избежать неудачи?
Подведение итогов
рабочего дня
Поделитесь с коллегами:
58.
«Бонусныезадачи»
Подведение итогов
рабочего дня
Дополнительные задания для
повышения эффективности
programming