Программирование игр на языке Python (внеурочная деятельность) 34 часа
Программирование игр на языке Python Быстрый старт
Что это?
Исполнитель Черепаха
Что рисуем?
Программирование игр на языке Python Цвет и скорость. Циклы
Повторение
Что сегодня?
Цвет
Некоторые цвета
Ещё цвета?
Новые команды управления Черепахой
Окружность
Цикл
Цикл в Python
Практика
Программирование игр на языке Python Списки
Повторение: новые команды
Повторение: циклы
Окружности разного цвета?
Список цветов
Новая команда
Практика
Программирование игр на языке Python Списки. Обращение к элементу
Обращение к элементу списка
Выбор из короткого списка
Сократить диапазон
Практика
Программирование игр на языке Python Случайность
Случайные явления и числа
Случайный выбор цвета
Практика
Программирование игр на языке Python Процедуры
Много одинаковых фигур
Новая команда (процедура)
Как использовать процедуру?
Как закрашивать области?
Команды для закраски
Практика
Программирование игр на языке Python Процедуры с параметрами
Процедуры, которые мы знаем
Что хочется
Несколько параметров
Как вызывать такую процедуру?
Практика
Одна сложная задачка
Одна сложная задачка
Программирование игр на языке Python Переменные
Что мы уже знаем
Как нарисовать?
Вводим переменную
Меняем переменную
Как это происходит в Python?
Практика
Программирование игр на языке Python Интерактивность
Интерактивность
Вывод текста
Вывод текста и переменной
Строки можно складывать!
Ввод чисел
Ввод чисел
Задание
Задание
Программирование игр на языке Python Выбор вариантов
Выбор одного из двух вариантов
Выбор одного из двух вариантов
Символы сравнения
Как выбрать из трёх вариантов?
Как выбрать из трёх вариантов?
Только два if
Только два if
Задание
Задание
Задание
Задание
Программирование игр на языке Python Цикл с условием
Как устроиться на работу?
Игра «Угадай число»
Человек угадывает число
Ещё одно решение
Ещё одно решение
Задание
Задание
Задание
Программирование игр на языке Python Выход из цикла
Задача
Считаем попытки
Как выйти из цикла?
Программа с бесконечным циклом
Не более 5 попыток
Другой вариант
Задание
Задание
Задание
Задание
Программирование игр на языке Python Викторина (ещё раз про списки)
Еще раз про списки
Что можно делать со списком
Перебор элементов списка
Перебор по индексам
Викторина
Викторина
Викторина с подсчетом
Задание
Программирование игр на языке Python Анимация
Как сделать анимацию?
Перемещение шарика на фоне
Анимации черепашки
Анимации шарика
Как определить координаты?
Через цикл while
Переброска шарика в нужную точку
Задание
Задание
Задание
Программирование игр на языке Python Управление клавишами
Окно «слушает» клавиатуру
Как изменять координаты
Обозначения клавиш
Задание
Задание
Задание
Программирование игр на языке Python Управление «по требованию». Игра «Змейка»
Что такое управление «по требованию»?
Функция «движение»
Основной цикл
Изменение направления
Выход по Esc
Задание
Программирование игр на языке Python Змейка с хвостом
Змейка из трёх квадратов
Движение змейки
Движение целой змейки
Задание
Программирование игр на языке Python Список для хвоста змейки
Список из звеньев змейки
Движение змейки
Движение змейки – цикл по всем звеньям
Цикл «в обратном порядке»
Движение змейки
Еда для Змейки
Змейка ест еду
Изменения в основном цикле
Задание
Программирование игр на языке Python Счёт в игре
Счёт и дисплей для него
Вывод информации на дисплей
Изменение счёта
Завершение игры
Завершение игры
Перезапуск игры
Изменения в основном цикле
Задание
Программирование игр на языке Python Игра «Жизнь» (Game of Life)
Игра «Жизнь» (Game of Life)
Окно для игры
Как храним данные
Размеры поля grid
Таблица grid
Создаем Черепаху, которая рисует
Рисуем одну ячейку
Рисуем одну ячейку (продолжение)
Рисуем всё поле
Задание
Программирование игр на языке Python Щелчки мышью
Щелчки мышью
Процедура-обработчик щелчка
Координаты ячейки
Координаты ячейки
Очистка поля
Задание
Программирование игр на языке Python Следующее поколение
Переход к следующему поколению
Жива ли клетка?
Сколько соседей?
Сколько соседей?
Следующее поколение
Новая таблица newGrid
Строим новую таблицу
Задание
Программирование игр на языке Python Сохранение поля
Загрузка и сохранение поля
Как записать в файл?
Сохранение таблицы
Загрузка таблицы
Обработка ошибок (исключения)
Сообщение на экране
Сообщение на экране
Запрос имени файла
Обработка имени файла
Задание
Программирование игр на языке Python Объекты и классы
Что такое объект?
Что такое класс?
Класс и объект в программе
Свойства – то, что у него есть
Методы – то, что он умеет
Метод __init__ (конструктор)
Значения по умолчанию
Задание
Задание
Задание
Программирование игр на языке Python Класс на основе Черепахи
Мяч – это особая Черепаха (наследование)
Добавляем свойства
Основная программа: используем класс
Добавляем скорость
Основная программа: анимация
Остановка при нажатии Esc
Отскок от стенок
Основная программа: отскок от стенок
Задание
Программирование игр на языке Python Добавляем ракетки
Ракетка – это тоже Черепаха
Основная программа с ракетками
Движение ракетки
Отскок шарика от ракетки
Задание
Программирование игр на языке Python Добавляем счёт
Дисплей – тоже Черепаха
Вывод информации
Увеличение счёта
Подсчёт очков
Задание
Задание
Программирование игр на языке Python Играет компьютер
Гарантированный выигрыш компьютера
Вызов функции 1 раз в 100 мс
Движение вверх и вниз
Движение вверх и вниз
Задание
Программирование игр на языке Python Игра «Арканоид»
Игра «Арканоид»
Этап 1. Шарик
Этап 2. Ракетка
Модульная организация программы
Этап 3. Ракетка отбивает шарик
Этап 3. Ракетка отбивает шарик
Этап 4. Блоки
Этап 4. Блоки
Этап 4. Блоки
Этап 5. Выбивание блоков
Этап 5. Выбивание блоков
Этап 6. Дисплей (счёт, жизни)
Этап 6. Дисплей (счёт, жизни)
Этап 6. Дисплей (счёт, жизни)
Этап 7. Постепенное усложнение игры
Конец фильма
11.27M
Category: programmingprogramming

Программирование игр на языке Python (внеурочная деятельность), 2025

1. Программирование игр на языке Python (внеурочная деятельность) 34 часа

К.Ю. Поляков
Программирование игр на
языке Python
(внеурочная деятельность)
34 часа
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

2. Программирование игр на языке Python Быстрый старт

© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

3. Что это?

3
Программирование игр на языке Python
Что это?
turtle
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

4. Исполнитель Черепаха

4
Программирование игр на языке Python
Исполнитель Черепаха
import turtle
# Импорт библиотеки
t = turtle.Turtle() # Создание черепашки
t.forward(100) # Движение вперед
t.left(90)
# Поворот налево
t.right(90)
# Поворот направо
turtle.done()
# Закончить работу
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

5. Что рисуем?

5
Программирование игр на языке Python
Что рисуем?
первая буква вашего имени
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

6. Программирование игр на языке Python Цвет и скорость. Циклы

© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

7. Повторение

7
Программирование игр на языке Python
Повторение
import turtle
# Импорт библиотеки
t = turtle.Turtle() # Создание черепашки
t.forward(100) # Движение вперед
t.left(90)
# Поворот налево
t.right(90)
# Поворот направо
turtle.done()
# Закончить работу
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

8. Что сегодня?

8
Программирование игр на языке Python
Что сегодня?
Научимся:
▪ изменять цвет
▪ управлять скоростью рисования
▪ поднимать и опускать перо
▪ рисовать разноцветные узоры
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

9. Цвет

9
Программирование игр на языке Python
Цвет
«Цвет» по-английски?
color
t.color("red")
# Цвет Черепашки
t.pencolor("blue")
# Цвет линии
turtle.bgcolor("black") # Цвет фона
pen
© К.Ю. Поляков, 2025
background
http://kpolyakov.spb.ru

10. Некоторые цвета

10
Программирование игр на языке Python
Некоторые цвета
red
blue
green
yellow
purple
orange
© К.Ю. Поляков, 2025
pink
white
black
gray
cyan
magenta
http://kpolyakov.spb.ru

11. Ещё цвета?

11
Программирование игр на языке Python
Ещё цвета?
"alice blue", "antique white", "aqua", "aquamarine", "azure", "beige", "bisque", "black",
"blanched almond", "blue", "blue violet", "brown", "burlywood", "cadet blue", "chartreuse",
"chocolate", "coral", "cornflower blue", "cornsilk", "crimson", "cyan", "dark blue",
"dark cyan", "dark goldenrod", "dark gray", "dark green", "dark grey", "dark khaki",
"dark magenta", "dark olive green", "dark orange", "dark orchid", "dark red", "dark salmon",
"dark sea green", "dark slate blue", "dark slate gray", "dark slate grey", "dark turquoise",
"dark violet", "deep pink", "deep sky blue", "dim gray", "dim grey", "dodger blue", "firebrick",
"floral white", "forest green", "fuchsia", "gainsboro", "ghost white", "gold", "goldenrod",
"gray", "green", "green yellow", "grey", "honeydew", "hot pink", "indian red", "indigo", "ivory",
"khaki", "lavender", "lavender blush", "lawn green", "lemon chiffon", "light blue", "light coral",
"light cyan", "light goldenrod", "light goldenrod yellow", "light gray", "light green",
"light grey", "light pink", "light salmon", "light sea green", "light sky blue", "light slate blue",
"light slate gray", "light slate grey", "light steel blue", "light yellow", "lime", "lime green",
"linen", "magenta", "maroon", "medium aquamarine", "medium blue", "medium orchid",
"medium purple", "medium sea green", "medium slate blue", "medium spring green",
"medium turquoise", "medium violet red", "midnight blue", "mint cream", "misty rose",
"moccasin", "navajo white", "navy", "navy blue", "old lace", "olive", "olive drab", "orange",
"orange red", "orchid", "pale goldenrod", "pale green", "pale turquoise", "pale violet red",
"papaya whip", "peach puff", "peru", "pink", "plum", "powder blue", "purple", "red",
"rosy brown", "royal blue", "saddle brown", "salmon", "sandy brown", "sea green",
"seashell", "sienna", "silver", "sky blue", "slate blue", "slate gray", "slate grey", "snow",
"spring green", "steel blue", "tan", "teal", "thistle", "tomato", "turquoise", "violet", "violet red",
"wheat", "white", "white smoke", "yellow", "yellow green"
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

12. Новые команды управления Черепахой

12
Программирование игр на языке Python
Новые команды управления Черепахой
t.speed(5)
t.speed(0)
t.penup()
t.pendown()
t.pensize(3)
© К.Ю. Поляков, 2025
# Скорость (1-10)
# Скорость – max!
# Поднять перо
# Опустить перо
# Толщина линии
http://kpolyakov.spb.ru

13. Окружность

13
Программирование игр на языке Python
Окружность
t.circle(50)
# Окружность
# радиуса 50
▪ Рисование начинается с текущей
позиции.
▪ Окружность рисуется против
часовой стрелки.
▪ Возвращается в исходную точку
t.circle(-50)
© К.Ю. Поляков, 2025
# по часовой
http://kpolyakov.spb.ru

14. Цикл

14
Программирование игр на языке Python
Цикл
повтори 10 раз
t.forward(50)
t.left(36)
так не
работает!
? Что нарисует?
? Как выполнить 10 раз?
0 1 2 3 4 5 6 7 8 9 10
храним в ячейке памяти
(в переменной)
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

15. Цикл в Python

15
Программирование игр на языке Python
Цикл в Python
счётчик в
переменной i
for i in range(10):
t.forward(50)
t.left(36)
# повтори 10 раз
отступ 2 или 4
символа
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

16. Практика

16
Программирование игр на языке Python
Практика
1)
5)
2)
3)
4)
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

17. Программирование игр на языке Python Списки

© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

18. Повторение: новые команды

18
Программирование игр на языке Python
Повторение: новые команды
t.color("red")
# Цвет Черепашки
t.pencolor("blue")
# Цвет линии
turtle.bgcolor("black") # Цвет фона
t.speed(5)
t.speed(0)
t.penup()
t.pendown()
t.pensize(3)
turtle.done()
© К.Ю. Поляков, 2025
# Скорость (1-10)
# Скорость – max!
# Поднять перо
# Опустить перо
# Толщина линии
# Закончить работу
http://kpolyakov.spb.ru

19. Повторение: циклы

19
Программирование игр на языке Python
Повторение: циклы
for i in range(10):
t.forward(50)
t.left(72)
# повтори 10 раз
? Что нарисует?
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

20. Окружности разного цвета?

20
Программирование игр на языке Python
Окружности разного цвета?
("red")
t.pencolor("red")
t.circle(50)
t.penup()
t.forward(100)
t.pendown()
t.pencolor("green")
("green")
t.circle(50)
t.penup()
t.forward(100)
t.pendown()
? Что мешает
использовать цикл?
t.pencolor("blue")
("blue")
t.circle(50)
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

21. Список цветов

21
Программирование игр на языке Python
Список цветов
colors = ["red", "green", "blue"]
for c in colors:
t.pencolor(c)
t.circle(50)
t.penup()
t.forward(100)
t.pendown()
© К.Ю. Поляков, 2025
# для каждого цвета
# сначала c = "red"
http://kpolyakov.spb.ru

22. Новая команда

22
Программирование игр на языке Python
Новая команда
t.backward(100)
© К.Ю. Поляков, 2025
# Назад на 100 шагов
http://kpolyakov.spb.ru

23. Практика

23
Программирование игр на языке Python
Практика
все цвета разные
1)
2)
3)
4)
5 квадратов
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

24. Программирование игр на языке Python Списки. Обращение к элементу

© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

25. Обращение к элементу списка

25
Программирование игр на языке Python
Обращение к элементу списка
colors[0]
colors[1]
colors[2]
colors = ["red", "green", "blue"]
t.pencolor("red")
t.pencolor("green")
t.pencolor("blue")
t.pencolor(colors[0])
t.pencolor(colors[1])
t.pencolor(colors[2])
0, 1, 2
for i in range(3): # 3 раза
t.pencolor(colors[i])
colors[i]
...
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

26. Выбор из короткого списка

26
Программирование игр на языке Python
Выбор из короткого списка
0, 1, 2, 3, 4, 5, …, 29
for i in range(30): # 30 раз
t.pencolor(colors[???])
t.circle(50)
0, 1, 2, 0, 1, 2, …
t.penup()
t.forward(100)
t.pendown()
? А если colors[i]?
© К.Ю. Поляков, 2025
нет colors[3]
http://kpolyakov.spb.ru

27. Сократить диапазон

27
Программирование игр на языке Python
Сократить диапазон
i 0
c 0
1
1
range(30)
2 3 4 5 … 28 29
2 0 1 2 … 1 2
for i in range(30): # 30 раз
t.pencolor(colors[i???
% 3])
t.circle(50)
остаток от
t.penup()
деления на 3
t.forward(100)
t.pendown()
© К.Ю. Поляков, 2025
? Как?
http://kpolyakov.spb.ru

28. Практика

28
Программирование игр на языке Python
Практика
только 3 цвета
1)
2)
20 линий
3)
4)
10 углов,
4 цвета
© К.Ю. Поляков, 2025
20 квадратов,
4 цвета
http://kpolyakov.spb.ru

29. Программирование игр на языке Python Случайность

© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

30. Случайные явления и числа

30
Программирование игр на языке Python
Случайные явления и числа
• встретил слона – не встретил слона
• жеребьёвка на соревнованиях
• лотерея
• случайная скорость (направление выстрела ) в игре
• …
Случайные числа — это последовательность чисел, в
которой невозможно предсказать следующее число,
даже зная все предыдущие.
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

31. Случайный выбор цвета

31
Программирование игр на языке Python
Случайный выбор цвета
подключение
библиотеки
import random
colors = ["red", "green", "blue"]
for i in range(10): # 10 раз
t.pencolor( random.choice(colors) )
t.circle(50)
? Что нарисует?
t.left(36)
? Почему 36 градусов?
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

32. Практика

32
Программирование игр на языке Python
Практика
5 цветов, случайный выбор
1)
2)
60 линий
60 кругов
3)
4)
20 углов
© К.Ю. Поляков, 2025
5)
8-угольники
(20 шт)
http://kpolyakov.spb.ru

33. Программирование игр на языке Python Процедуры

© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

34. Много одинаковых фигур

34
Программирование игр на языке Python
Много одинаковых фигур
rose()
rose()
rose()
rose()
? Как?
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

35. Новая команда (процедура)

35
Программирование игр на языке Python
Новая команда (процедура)
def rose
rose():
colors = ["red", "green", "blue"]
t.pendown()
for i in range(5):
t.pencolor( random.choice(colors) )
t.circle(50)
t.right(72)
t.penup()
? Что нарисует?
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

36. Как использовать процедуру?

36
Программирование игр на языке Python
Как использовать процедуру?
rose()
t.left(60)
t.forward(100)
rose()
t.right(120)
t.forward(100)
rose()
© К.Ю. Поляков, 2025
? Что нарисует?
http://kpolyakov.spb.ru

37. Как закрашивать области?

37
Программирование игр на языке Python
Как закрашивать области?
import turtle
t = turtle.Turtle()
for i in range(4):
t.forward(100)
t.right(90)
turtle.done()
? Что нарисует?
? Как?
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

38. Команды для закраски

38
Программирование игр на языке Python
Команды для закраски
import turtle
t = turtle.Turtle()
t.fillcolor('red') # цвет заливки
t.begin_fill()
# начало контура
for i in range(4):
тут рисуем
t.forward(100)
контур
t.right(90)
t.end_fill()
# конец контура
turtle.done()
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

39. Практика

39
Программирование игр на языке Python
Практика
5 цветов, случайный выбор
1)
3)
© К.Ю. Поляков, 2025
2)
4)
http://kpolyakov.spb.ru

40. Программирование игр на языке Python Процедуры с параметрами

© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

41. Процедуры, которые мы знаем

Программирование игр на языке Python
41
Процедуры, которые мы знаем
def square():
t.pendown()
for i in range(4):
t.forward(100) ! Всегда 100!
t.right(90)
t.penup()
square()
? Что нарисует?
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

42. Что хочется

42
Программирование игр на языке Python
Что хочется
! Одной процедурой!
параметр
def square( size ):
t.pendown()
for i in range(4):
t.forward(size)
size
t.right(90)
t.penup()
square(100)
t.forward(150)
square(50)
t.forward(75)
square(25)
! Параметры – это данные, изменяющие
работу процедуры!
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

43. Несколько параметров

43
Программирование игр на языке Python
Несколько параметров
! Одной процедурой!
параметры
def square( size, color ):
t.pendown()
сначала – размер,
color
t.fillcolor(color)
потом – цвет
t.begin_fill()
for i in range(4):
t.forward(size)
size
t.right(90)
t.end_fill()
t.penup()
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

44. Как вызывать такую процедуру?

Программирование игр на языке Python
44
Как вызывать такую процедуру?
сначала – размер,
потом – цвет
square(100, "green")
t.forward(150)
square(50, "magenta")
t.forward(75)
square(25, "cyan")
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

45. Практика

45
Программирование игр на языке Python
Практика
цвет – параметр процедуры
1)
3)
© К.Ю. Поляков, 2025
2)
4)
http://kpolyakov.spb.ru

46. Одна сложная задачка

46
Программирование игр на языке Python
Одна сложная задачка
180 –
180 – 2
2
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

47. Одна сложная задачка

47
Программирование игр на языке Python
Одна сложная задачка
def romb( size, a ):
t.pendown()
t.left( a )
for i in range(3):
t.forward( size )
t.right( 2*a )
t.forward( size )
t.right( 180-2*a )
t.left( 180-a )
t.penup()
! Добавьте заливку!
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

48. Программирование игр на языке Python Переменные

© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

49. Что мы уже знаем

49
Программирование игр на языке Python
Что мы уже знаем
def square( size ):
t.pendown()
for i in range(4):
t.forward(size)
size
t.right(90)
t.penup()
это изменяемая
(переменная)
величина
square(100)
? Что нарисует?
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

50. Как нарисовать?

50
Программирование игр на языке Python
Как нарисовать?
colors = ["red", "green", "blue"]
for i in range(60):
t.color(random.choice(colors))
120
t.forward(120)
!
Длина должна
t.backward(120)
120
изменяться!
t.right(6)
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

51. Вводим переменную

51
Программирование игр на языке Python
Вводим переменную
colors = ["red", "green", "blue"]
L = 120 # присваивание значения
for i in range(60):
t.color(random.choice(colors))
t.forward(L)
L
! L – это переменная!
t.backward(L)
L
t.right(6)
? Что нарисует?
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

52. Меняем переменную

52
Программирование игр на языке Python
Меняем переменную
colors = ["red", "green", "blue"]
L = 120 # начальное значения
for i in range(60):
t.color(random.choice(colors))
t.forward(L)
t.backward(L)
изменение
t.right(6)
значения
переменной
L = L - 2
? Что нарисует?
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

53. Как это происходит в Python?

53
Программирование игр на языке Python
Как это происходит в Python?
Оперативная память
120
L
свободна
118
свободна
L
свободна
свободна
? Что если
L = 120
M = L – 2 ?
L = L – 2
L – 2
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

54. Практика

54
Программирование игр на языке Python
Практика
1)
3)
© К.Ю. Поляков, 2025
2)
4)
http://kpolyakov.spb.ru

55. Программирование игр на языке Python Интерактивность

© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

56. Интерактивность

56
Программирование игр на языке Python
Интерактивность
! Интерактивность – это диалог (обмен
данными) между человеком и компьютером
во время работы программы!
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

57. Вывод текста

Программирование игр на языке Python
57
Вывод текста
print( "Привет!" )
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

58. Вывод текста и переменной

58
Программирование игр на языке Python
Вывод текста и переменной
name = "Федот"
print( "Привет,",
, name )
? Как добавить «!» в конце?
добавлен
пробел!
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

59. Строки можно складывать!

Программирование игр на языке Python
59
Строки можно складывать!
name = input( "Ваше имя: " )
+"!" )
print( "Привет,", name+"!"
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

60. Ввод чисел

60
Программирование игр на языке Python
Ввод чисел
age = input( "Сколько тебе лет? " )
print( "Через 5 лет тебе будет ",
age + 5, "лет" )
TypeError: can only concatenate str (not "int")
to str
str – строка символов (string)
int – целое число (integer)
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

61. Ввод чисел

61
Программирование игр на языке Python
Ввод чисел
преобразовать в
целое число
age = int
int(input( "Сколько тебе лет? " ))
print( "Через 5 лет тебе будет ",
age + 5, "лет" )
? Что если ввести «Архип»?
ValueError: invalid literal for int()
with base 10: 'Архип'
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

62. Задание

62
Программирование игр на языке Python
Задание
1) Диалог программы с человеком:
=== ПРОГРАММА-ЗНАКОМСТВО ===
Как тебя зовут? Петя
Сколько тебе лет? 14
Что ты любишь делать? играть в футбол
Привет, Петя!
Ты родился в 2011 году и ты любишь
играть в футбол.
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

63. Задание

Программирование игр на языке Python
63
Задание
2) Диалог программы с человеком:
=== ПРОСТОЙ КАЛЬКУЛЯТОР ===
Введи первое число (a): 7
Введи второе число (b): 5
a + b = 12
a – b = 2
a * b = 35
a в степени b
a ** b = 16807
a / b = 1.4
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

64. Программирование игр на языке Python Выбор вариантов

© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

65. Выбор одного из двух вариантов

65
Программирование игр на языке Python
Выбор одного из двух вариантов
if – если…
? Если age<14?
age = int(input( "Сколько тебе лет? " ))
if age >= 14:
блок
print( "Ты уже большой!" )
print( "У тебя есть паспорт!" )
if age < 14:
print( "У тебя пока нет паспорта..." )
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

66. Выбор одного из двух вариантов

66
Программирование игр на языке Python
Выбор одного из двух вариантов
Лучше так:
age = int(input( "Сколько тебе лет? " ))
if age >= 14:
if-блок
print( "Ты уже большой!" )
print( "У тебя есть паспорт!" )
else:
print( "У тебя пока нет паспорта..." )
if – если…
else – иначе…
! Между if-блоком и else не
else-блок
могут стоять другие команды!
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

67. Символы сравнения

67
Программирование игр на языке Python
Символы сравнения
if a >=
? b:
...
> – больше
< – меньше
>= – больше или равно
<= – меньше или равно
if a == b:
...
== – равно
if a != b:
...
!= – не равно
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

68. Как выбрать из трёх вариантов?

68
Программирование игр на языке Python
Как выбрать из трёх вариантов?
Известно, сколько лет Андрею
(переменная a) и Борису (b).
Программа должна определить,
кто из них старше.
! Какие варианты?
1) Андрей старше (a > b)
2) Борис старше (a < b)
3) одного возраста (a == b)
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

69. Как выбрать из трёх вариантов?

69
Программирование игр на языке Python
Как выбрать из трёх вариантов?
a = int(input( "Возраст Андрея > " ))
b = int(input( "Возраст Андрея > " ))
if a > b:
print( "Андрей старше" )
if a < b:
print( "Борис старше" )
if a == b:
print( "Они одного возраста" )
? Можно с двумя if?
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

70. Только два if

70
Программирование игр на языке Python
Только два if
if a > b:
print( "Андрей старше" )
else:
if aa << b:
b:
if
print( "Борис
"Борис старше"
старше" ))
print(
else:
else:
print( "Они
"Они одного
одного возраста"
возраста" ))
print(
вложенный условный
оператор
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

71. Только два if

Программирование игр на языке Python
71
Только два if
if a > b:
print( "Андрей старше" )
elif a < b:
print( "Борис старше" )
else:
print( "Они одного возраста" )
elif = elseif
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

72. Задание

72
Программирование игр на языке Python
Задание
1) Программа определяет, положительно ли
введённое число
Введите число: 123
Это положительное число!
Введите число: 0
Это не положительное число!
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

73. Задание

73
Программирование игр на языке Python
Задание
2) Программа различает положительные числа,
отрицательные числа и 0
Введите число: 123
Это положительное число!
Введите число: -5
Это отрицательное число!
Введите число: 0
Это ноль!
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

74. Задание

74
Программирование игр на языке Python
Задание
3) Программа вводит отметку (число от 2 до 5) и
выводит её значение (слово)
Введите отметку: 5
Отлично!
Введите отметку: 3
Удовлетворительно.
Введите отметку: 123
Нет такой отметки!
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

75. Задание

75
Программирование игр на языке Python
Задание
4) Игра «Камень-ножницы-бумага»
Ход первого игрока: ножницы
Ход второго игрока: бумага
Игрок 1 победил! Ножницы режут бумагу!
Ход первого игрока: ножницы
Ход второго игрока: ножницы
Ничья!
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

76. Программирование игр на языке Python Цикл с условием

© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

77. Как устроиться на работу?

77
Программирование игр на языке Python
Как устроиться на работу?
? Сколько резюме
нужно послать?
! Повторяем, пока не получим
предложение о работе («оффер»)!
пока не получили оффер:
послать(резюме)
© К.Ю. Поляков, 2025
while – пока…
http://kpolyakov.spb.ru

78. Игра «Угадай число»

78
Программирование игр на языке Python
Игра «Угадай число»
Компьютер «задумывает» число от 0 до 10.
Человек пытается угадать его. Если угадал,
программа заканчивает работу.
Сохраняем случайное число в переменной
from random import randint
x = randint( 0, 10 )
Пока не ввели число, равное x
? Когда
while число != x:
остановится?
ввести число
сдвиг
блока
© К.Ю. Поляков, 2025
это «псевдокод»
(нельзя выполнить)
http://kpolyakov.spb.ru

79. Человек угадывает число

79
Программирование игр на языке Python
Человек угадывает число
from random import randint
x = randint( 0, 10 )
? Что плохо?
guess = 1000
while guess != x:
input( "Ваше
число:
" ) " ))
guess = int(input(
"Ваше
число:
if guess == x:
print( "Вы угадали!" )
else:
print( "Вы не угадали. " )
? Как должна реагировать программа?
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

80. Ещё одно решение

80
Программирование игр на языке Python
Ещё одно решение
from random import randint
x = randint( 0, 10 )
guess = 1000
# вне отрезка [0; 10]
while guess != x:
guess = int(input( "Ваше число: " ))
if guess != x:
print( "Вы не угадали. " )
print( "Вы угадали!" )
? Что изменилось?
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

81. Ещё одно решение

81
Программирование игр на языке Python
Ещё одно решение
from random import randint
x = randint( 0, 10 )
guess = int(input( "Ваше число: " ))
while guess != x:
guess = int(input( "Ваше число: " ))
if guess != x:
print( "Вы не угадали. " )
print( "Вы угадали!" )
? Что изменилось?
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

82. Задание

Программирование игр на языке Python
82
Задание
1) Угадай число от 1 до 100
Я задумал число от 1 до 100.
Ваше число: 35
Неверно. Попробуйте ещё раз!
Ваше число: 56
Неверно. Попробуйте ещё раз!
Ваше число: 73
Угадали!
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

83. Задание

83
Программирование игр на языке Python
Задание
2) Угадай число от 1 до 100 с подсказкой.
Я задумал число от 1 до 100.
Ваше число: 35
Неверно. Моё число больше!
Попробуйте ещё раз!
Ваше число: 56
Неверно. Моё число меньше!
Попробуйте ещё раз!
Ваше число: 47
Угадали!
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

84. Задание

84
Программирование игр на языке Python
Задание
3) Угадай число от 1 до 100 с подсказкой и
подсчётом числа попыток.
Я задумал число от 1 до 100.
Ваше число: 35
Неверно. Моё число больше!
Попробуйте ещё раз!
Ваше число: 56
Неверно. Моё число меньше!
Попробуйте ещё раз!
Ваше число: 47
Угадали! Попыток: 3.
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

85. Программирование игр на языке Python Выход из цикла

© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

86. Задача

86
Программирование игр на языке Python
Задача
Компьютер «задумывает» число от 1 до 100.
Человек пытается угадать его. Если угадал,
программа заканчивает работу.
Кроме того, программа заканчивает работу
после 5 неудачных попыток.
? Как считать неудачные попытки?
1) вводим переменную count
2) сначала count = 0
?
3) при вводе числа
count = count + 1
увеличить
на 1
или count += 1
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

87. Считаем попытки

87
Программирование игр на языке Python
Считаем попытки
count = 0
while guess != x:
guess = int(input( "Ваше число: " ))
count += 1
увеличить на 1
if guess != x:
print( "Вы не угадали. " )
! count – это переменная-счётчик!
? Как разрешить не больше 5 попыток?
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

88. Как выйти из цикла?

88
Программирование игр на языке Python
Как выйти из цикла?
«истина»
! Это бесконечный цикл!
while True:
guess = int(input( "Ваше число: " ))
if guess == 5:
print( "Вы ввели число 5" )
break
break
закончить
цикл
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

89. Программа с бесконечным циклом

89
Программирование игр на языке Python
Программа с бесконечным циклом
это не нужно
guess = 1000
while True
True:
guess = int(input( "Ваше число: " ))
if guess == x:
закончить цикл
break
break
print( "Вы не угадали. " )
print( "Вы угадали!" )
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

90. Не более 5 попыток

90
Программирование игр на языке Python
Не более 5 попыток
count = 0
while True:
guess = int(input( "Ваше число: " ))
count += 1
if guess == x: break
break
print( "Вы не угадали. " )
закончить
if count == 5:
цикл
break
print(
"Вы
)
if guess
==угадали!"
x:
print( "Вы угадали!" )
?
Что
плохо?
else:
print( "Вы не угадали за 5 попыток." )
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

91. Другой вариант

91
Программирование игр на языке Python
Другой вариант
count = 5
while True:
guess = int(input( "Ваше число: " ))
count -= 1
if guess == x: break
print( "Вы не угадали. " )
if count
count ==
== 00 :
? Что изменилось?
break
if guess == x:
print( "Вы угадали!" )
else:
print( "Вы не угадали за 5 попыток." )
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

92. Задание

92
Программирование игр на языке Python
Задание
1) Угадай число от 1 до 100 с подсказкой.
Не более 7 попыток.
Я задумал число от 1 до 100.
Ваше число: 35
Неверно. Моё число больше!
Попробуйте ещё раз!
Ваше число: 56
Неверно. Моё число меньше!
Попробуйте ещё раз!
Ваше число: 47
Угадали!
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

93. Задание

93
Программирование игр на языке Python
Задание
2) «Угадай животное». Не более 6 попыток.
Я задумал животное из этого списка:
лев, заяц, лиса, волк, коза, корова
Кто это? волк
Неверно. Попробуйте ещё раз!
Кто это? лиса
Неверно. Попробуйте ещё раз!
Кто это? коза
Угадали!
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

94. Задание

94
Программирование игр на языке Python
Задание
3) Сумматор до нуля. Программа вводит числа и
складывает их, пока не будет введён 0.
Ваше число: 35
Текущая сумма: 35
Ваше число: 56
Текущая сумма: 91
Ваше число: 0
Чисел в сумме: 2
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

95. Задание

95
Программирование игр на языке Python
Задание
4) Сумматор. Программа вводит числа и
складывает их, пока не получит сумму 100 или
больше.
Ваше число: 35
Текущая сумма: 35
Ваше число: 56
Текущая сумма: 91
Ваше число: 19
Текущая сумма: 110
Чисел в сумме: 3
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

96. Программирование игр на языке Python Викторина (ещё раз про списки)

© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

97. Еще раз про списки

97
Программирование игр на языке Python
Еще раз про списки
questions = [
"Сколько будет 2+2?",
"Какой язык мы изучаем?",
"Вена – это столица какой страны?"
]
answers = [
"4",
"Python",
"Австрия"
]
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

98. Что можно делать со списком

98
Программирование игр на языке Python
Что можно делать со списком
Добавить элемент
questions.append(
"Какое животное говорит 'му-у-у'?" )
answers.append( "корова" )
Обратиться к элементу
print( questions[0] ) # Сколько будет 2+2?
print( answers[1] )
# Python
Заменить элемент
answers[1] = "C++"
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

99. Перебор элементов списка

99
Программирование игр на языке Python
Перебор элементов списка
Сколько будет 2+2?
Какой язык
мы изучаем?
Вена – это столица
какой страны?
Какое животное
говорит 'му-у-у'?
questions
for q in questions:
print( q )
Сколько будет 2+2?
Какой язык мы изучаем?
Вена – это столица какой страны?
Какое животное говорит 'му-у-у'?
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

100. Перебор по индексам

100
Программирование игр на языке Python
Перебор по индексам
0, 1, 2, 3
4
индекс
сколько раз
len – длина
(length)
for i in range( len(questions) ):
print( questions[i] )
questions[0]
Сколько будет 2+2?
Какой язык мы изучаем?
Вена – это столица какой страны?
Какое животное говорит 'му-у-у'?
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

101. Викторина

101
Программирование игр на языке Python
Викторина
for i in range( len(questions) ):
# вывести вопрос questions[ ii]
# ввести ответ answers[ii ]
# если ответ верный, увеличить счёт
# сообщить окончательный счёт
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

102. Викторина

102
Программирование игр на языке Python
Викторина
for i in range( len(questions) ):
print( questions[i] )
ans = input()
реакция на
if ans == answers[i]:
print( "Правильно!" ) каждый ответ
else:
print( "К сожалению, неверно..." )
? Как подсчитать правильные ответы?
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

103. Викторина с подсчетом

103
Программирование игр на языке Python
Викторина с подсчетом
score
score == 00
for i in range( len(questions) ):
print( questions[i] )
ans = input()
if ans == answers[i]:
print( "Правильно!" )
score == score
score
score ++1 1
else:
print( "К сожалению, неверно..." )
print( "Ваш
) )
print(
"Ваш результат:",
результат:",score
score
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

104. Задание

104
Программирование игр на языке Python
Задание
1) Своя викторина (3-4 вопроса и ответы). В
конце выводится счёт.
2) Своя викторина (3-4 вопроса и ответы), где
каждый вопрос имеет свою «стоимость» в
баллах. В конце выводится счёт.
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

105. Программирование игр на языке Python Анимация

© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

106. Как сделать анимацию?

106
Программирование игр на языке Python
Как сделать анимацию?
Анимация — это быстрая смена изображений
(«кадров») на экране.
а)
б)
? Насколько быстрая?
© К.Ю. Поляков, 2025
в)
г)
≥ 16 кадров/c
http://kpolyakov.spb.ru

107. Перемещение шарика на фоне

107
Программирование игр на языке Python
Перемещение шарика на фоне
Где-то сохранить:
выводим тут
• запомнить фон под
шариком
• нарисовать шарик
Переместить:
• восстановить фон под шариком (стереть)
• изменить координаты
• запомнить фон под новым местом
• нарисовать шарик
не нужно
запоминать!
? Если фон одноцветный?
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

108. Анимации черепашки

108
Программирование игр на языке Python
Анимации черепашки
import turtle
import time
# Библиотека для работы
# с таймером
t = turtle.Turtle()
for i in range(200):
t.forward(1)
# Двигаем черепашку
time.sleep(0.01) # Задержка 0,01 с
turtle.done()
целая и дробная части
числа разделяются
точкой!
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

109. Анимации шарика

109
Программирование игр на языке Python
Анимации шарика
import turtle
import time
# Библиотека для работы
# с таймером
ball = turtle.Turtle()
ball.shape("circle") # #форма
- круг
ball.shape("circle")
форма
- круг
ball.color("red")
# #цвет
- красный
ball.color("red")
цвет
- красный
ball.penup()
# #поднять
перо
ball.penup()
поднять
перо
for i in range(200):
ball.forward(1) # Двигаем шарик
time.sleep(0.01) # Задержка 0,01 с
turtle.done()
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

110. Как определить координаты?

110
Программирование игр на языке Python
Как определить координаты?
Y
(x,y)
x
(0,0)
ball.xcor()
ball.ycor()
y
X
print( ball.xcor(), ball.ycor() )
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

111. Через цикл while

111
Программирование игр на языке Python
Через цикл while
Настройка окна:
Переменная для
управления окном
window = turtle.Screen()
window.bgcolor( "gray" )
window.setup( 600, 400 )
# фон
# размеры
ball.color( "red" )
while
while ball.xcor()
ball.xcor() << 200:
200:
ball.forward(1)
# Двигаем шарик
time.sleep(0.01) # Задержка 0,01 с
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

112. Переброска шарика в нужную точку

112
Программирование игр на языке Python
Переброска шарика в нужную точку
ball.setx(150)
ball.sety(120)
Y
150
120
© К.Ю. Поляков, 2025
X
http://kpolyakov.spb.ru

113. Задание

113
Программирование игр на языке Python
Задание
1) Установите размер экрана 580 на 580,
зелёный цвет фона. Шарик белого цвета
движется от левой границы экрана до правой.
Программа заканчивает работу, когда шарик
упирается в левую границу окна.
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

114. Задание

114
Программирование игр на языке Python
Задание
2) Два шарика едут с одинаковой скоростью:
один справа налево, второй – снизу вверх.
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

115. Задание

115
Программирование игр на языке Python
Задание
3) Ещё два шарика едут по диагоналям. Все 4
должны остановиться в конце на краю поля.
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

116. Программирование игр на языке Python Управление клавишами

© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

117. Окно «слушает» клавиатуру

117
Программирование игр на языке Python
Окно «слушает» клавиатуру
window = turtle.Screen()
def moveUp():
... # что делать при нажатии ↑
def moveDown():
... # что делать при нажатии ↓
window.listen() # Начинаем слушать
window.onkey( moveUp, "Up" ) # вверх
window.onkey( moveDown, "Down" ) # вниз
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

118. Как изменять координаты

118
Программирование игр на языке Python
Как изменять координаты
def moveUp(): # что делать при нажатии ↑
y = player.ycor()
player.sety( y + 10 )
def moveDown(): # при нажатии ↓
y = player.ycor()
player.sety( y - 10 )
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

119. Обозначения клавиш

119
Программирование игр на языке Python
Обозначения клавиш
Стрелки:
"Up", "Down", "Left", "Right"
Спецклавиши: "space" (пробел), "Escape",
"Return" (Enter), "Backspace"
Функциональные: "F1" … "F12"
Цифры: "0" … "9"
Буквы: "a" … "z", "A" … "Z"
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

120. Задание

120
Программирование игр на языке Python
Задание
1) Установите размер экрана 600 на 600, синий
цвет фона. Квадрат белого цвета управляется
клавишами-стрелками. В начале квадрат
находится в правом нижнем углу экрана.
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

121. Задание

121
Программирование игр на языке Python
Задание
2) В начале квадрат находится в центре экрана.
При движении он не может выйти за пределы
экрана.
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

122. Задание

122
Программирование игр на языке Python
Задание
3) Два квадрата разного цвета управляются
разными клавишами. При движении они не могут
выйти за пределы экрана.
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

123. Программирование игр на языке Python Управление «по требованию». Игра «Змейка»

© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

124. Что такое управление «по требованию»?

124
Программирование игр на языке Python
Что такое управление «по требованию»?
При нажатии клавиши управления Змейка
изменяет режим движения, в остальное время
двигается так же, как и раньше.
? Как запомнить, куда двигаться?
# Голова змейки
! Переменная,
связанная с
head = turtle.Turtle()
объектом –
head.shape("square")
свойство!
head.color("white")
direction
head.penup()
направление:
head.dir = "stop"
"up", "down",
"left", "right"
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

125. Функция «движение»

125
Программирование игр на языке Python
Функция «движение»
def move():
if head.dir == "up":
размер
y = head.ycor()
20 20
head.sety(y + 20)
elif head.dir == "down":
y = head.ycor()
head.sety(y - 20)
... # самостоятельно влево и вправо
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

126. Основной цикл

126
Программирование игр на языке Python
Основной цикл
window = turtle.Screen()
window.bgcolor( "black" )
window.setup( 580, 580 )
window.tracer( 0 )
...
Когда закончится цикл?
?
while True:
move() # двигаем Змейку
window.update()
# обновляем окно
time.sleep( 0.1 ) # ждём 0,1 с
turtle.done()
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

127. Изменение направления

127
Программирование игр на языке Python
Изменение направления
def up():
head.dir = "up"
def down():
head.dir = "down"
# Привязка клавиш
window.listen()
window.onkey( up, "Up" )
window.onkey( down, "Down" )
... # самостоятельно влево и вправо
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

128. Выход по Esc

Программирование игр на языке Python
128
Выход по Esc
def escape():
head.dir = "exit"
window.onkey( escape, "Escape" )
...
while head.dir != "exit":
move()
window.update()
time.sleep( 0.1 )
turtle.done()
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

129. Задание

129
Программирование игр на языке Python
Задание
1) Установите размер экрана 580 на 580, чёрный
цвет фона. Квадрат белого цвета управляется
клавишами-стрелками. Соберите программу
движения Змейки.
2) Сделайте так, чтобы Змейка не могла выйти
за пределы поля.
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

130. Программирование игр на языке Python Змейка с хвостом

© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

131. Змейка из трёх квадратов

131
Программирование игр на языке Python
Змейка из трёх квадратов
20 20
head
tail1
tail2
head = turtle.Turtle()
head.shape("square")
head.color("yellow")
head.penup()
head.dir = "stop"
tail1 = turtle.Turtle()
tail1.shape("square")
tail1.color("darkgreen")
tail1.penup()
tail1.sety( -20 )
© К.Ю. Поляков, 2025
это не простая
переменная, а
свойство объекта
head!
? tail2?
http://kpolyakov.spb.ru

132. Движение змейки

132
Программирование игр на языке Python
Движение змейки
head
tail1
tail2
? Куда движется
head?
в направлении
head.dir
© К.Ю. Поляков, 2025
tail1.setx(head.xcor())
tail1.sety(head.ycor())
x1 = tail1.xcor()
y1 = tail1.ycor()
tail2.setx( x1 )
tail2.sety( y1 )
? В каком порядке
передвигать?
tail2
tail1
head
http://kpolyakov.spb.ru

133. Движение целой змейки

Программирование игр на языке Python
133
Движение целой змейки
def move():
if head.dir != "stop":
tail2.setx( tail1.xcor() )
tail2.sety( tail1.ycor() )
tail1.setx( head.xcor() )
tail1.sety( head.ycor() )
... # тут всё, как раньше:
# двигаем head <- head.dir
? Почему сначала tail2?
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

134. Задание

134
Программирование игр на языке Python
Задание
1) Сделайте Змейку из трёх звеньев.
2) Сделайте Змейку из четырёх звеньев разного
цвета.
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

135. Программирование игр на языке Python Список для хвоста змейки

© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

136. Список из звеньев змейки

136
Программирование игр на языке Python
Список из звеньев змейки
head
tail1
tail2
список
0
1
2
snake = [head, tail1, tail2]
snake[0]
© К.Ю. Поляков, 2025
snake[1]
индексы
snake[2]
http://kpolyakov.spb.ru

137. Движение змейки

137
Программирование игр на языке Python
Движение змейки
0
1
2
snake = [head, tail1, tail2]
tail2.setx(tail1.xcor())
tail2.sety(tail1.ycor())
двигаем
tail2
snake[2].setx(snake[1].xcor())
snake[2].sety(snake[1].ycor())
tail1.setx(head.xcor())
tail1.sety(head.ycor())
двигаем
tail1
snake[1].setx(snake[0].xcor())
snake[1].sety(snake[0].ycor())
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

138. Движение змейки – цикл по всем звеньям

138
Программирование игр на языке Python
Движение змейки – цикл по всем звеньям
i=2
i-1
snake[2].setx(snake[1].xcor())
snake[2].sety(snake[1].ycor())
i=1
двигаем
tail2
i-1
snake[1].setx(snake[0].xcor())
snake[1].sety(snake[0].ycor())
двигаем
tail1
! Различие только в индексах!
изменение i: 2, 1 (в обратном порядке)
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

139. Цикл «в обратном порядке»

139
Программирование игр на языке Python
Цикл «в обратном порядке»
N = 5
for i in range(N):
print( i )
? Что напечатает?
N = 4
for i in range(N,0,-1):
print( i )
© К.Ю. Поляков, 2025
0
1
2
3
4
4
3
2
1
от 0 до N-1
от N до 1
http://kpolyakov.spb.ru

140. Движение змейки

140
Программирование игр на языке Python
Движение змейки
snake[2].setx(snake[1].xcor())
snake[2].sety(snake[1].ycor())
snake[1].setx(snake[0].xcor())
snake[1].sety(snake[0].ycor())
3
N = len(snake)
for i in range(N-1, 0, -1):
snake[i].setx(snake[i-1].xcor())
snake[i].sety(snake[i-1].ycor())
2
© К.Ю. Поляков, 2025
!
1
1
0
Для любой длины змейки!
http://kpolyakov.spb.ru

141. Еда для Змейки

Программирование игр на языке Python
141
Еда для Змейки
food = turtle.Turtle()
food.speed(0)
food.shape("circle")
food.color("red")
food.penup()
food.goto(0, 100) # еда здесь
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

142. Змейка ест еду

142
Программирование игр на языке Python
Змейка ест еду
ближе 20 пикс
def checkFood():
if head.distance(food) < 20:
x = random.randint(-280, 280) в другое
место
y = random.randint(-280, 280)
food.goto(x, y)
new = turtle.Turtle()
ещё одно
new.speed(0)
звено
new.shape("square")
new.color("darkgreen")
new.penup()
добавить в
список
snake.append(new)
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

143. Изменения в основном цикле

Программирование игр на языке Python
143
Изменения в основном цикле
...
while head.dir != "exit":
checkFood()
checkFood()
move()
window.update()
time.sleep( 0.1 )
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

144. Задание

144
Программирование игр на языке Python
Задание
1) Запустите программу, где Змейка есть еду и
удлиняется.
2) Сделайте, чтобы Змейка была разноцветной.
Названия тёмных цветов начинаются с “dark”.
3) Сделайте, чтобы на поле было две порции
еды.
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

145. Программирование игр на языке Python Счёт в игре

© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

146. Счёт и дисплей для него

146
Программирование игр на языке Python
Счёт и дисплей для него
текущий
счёт
лучший
счёт
score = best = 0
display = turtle.Turtle()
display.hideturtle() # скрыть Черепаху
display.goto( 0, 250 ) # центр текста
display.color( "white" ) # цвет текста
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

147. Вывод информации на дисплей

147
Программирование игр на языке Python
Вывод информации на дисплей
текущий
счёт
лучший
счёт
def showScore():
display.clear() # очистить дисплей
display.write(
f"Счет: {score} Рекорд: {best}",
align="center",
font=("Courier", 24) )
showScore() # вывести начальный счёт
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

148. Изменение счёта

148
Программирование игр на языке Python
Изменение счёта
? В какой момент изменяется счёт?
def checkFood():
if head.distance(food) < 20:
...
глобальные
snake.append(new)
переменные
global score, best
score += 10
best = max( best, score )
showScore()
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

149. Завершение игры

149
Программирование игр на языке Python
Завершение игры
Попытка заканчивается, когда
1) Змейка пересекает сама себя.
2) Змейка выходит за границы поля
? Что делать в этом случае?
1) От Змейки оставить только голову, остальные
звенья удалить.
2) Поставить Змейку в начальное положение
(0,0).
3) Счёт = 0.
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

150. Завершение игры

150
Программирование игр на языке Python
Завершение игры
def checkError():
x = head.xcor()
y = head.ycor()
# проверка выхода за границы
if x < -280 or x > 280 or \
перенос на
y < -280 or y > 280:
следующую
строку
restart()
restart()
# проверка самопересечения
for t in snake[1:]: # кроме головы
if head.distance(t) < 20:
restart()
restart()
break
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

151. Перезапуск игры

151
Программирование игр на языке Python
Перезапуск игры
def restart():
global snake, score
time.sleep(1)
# ждем 1 с
head.goto(0, 0)
# голову в (0,0)
head.dir = "stop"
удаляем все,
for t in snake[1:]:
кроме головы
t.setx(1000)
t.sety(1000) # за границы поля
del t
# удалить
snake = [head]
score = 0
# обновить счёт
showScore()
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

152. Изменения в основном цикле

Программирование игр на языке Python
152
Изменения в основном цикле
...
while head.dir != "exit":
checkFood()
checkError()
move()
window.update()
time.sleep( 0.1 )
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

153. Задание

153
Программирование игр на языке Python
Задание
1) Соберите программу, где счёт увеличивается
после того, как Змейка съела еду.
2) Сделайте так, чтобы при ошибке
(самопересечении или выходе за границы
поля) начиналась новая попытка.
3) Сделайте так, чтобы при выходе за границы
поля змейка появлялась с другой стороны.
4) Сделайте так, чтобы при рестарте программы
длина змейки была равна 3.
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

154. Программирование игр на языке Python Игра «Жизнь» (Game of Life)

© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

155. Игра «Жизнь» (Game of Life)

155
Программирование игр на языке Python
Игра «Жизнь» (Game of Life)
Дж. Конвей, 1970 г.
Клетка зарождается,
если ровно 3 соседа.
?
Клетка выживает,
если 2 или 3 соседа.
?
?
?
?
?
?
?
Клетка погибает от
одиночества, если
< 2 соседей.
Клетка погибает от
перенаселения, если
> 3 соседей.
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

156. Окно для игры

156
Программирование игр на языке Python
Окно для игры
import turtle
window = turtle.Screen()
window.title( "Игра Жизнь" )
window.bgcolor( "white" )
window.setup( width=600, height=600 )
window.tracer(0)
... # здесь drawGrid и другие процедуры
drawGrid()
# рисуем поле
window.mainloop() # запуск игры
turtle.done()
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

157. Как храним данные

157
Программирование игр на языке Python
Как храним данные
HEIGHT
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
1
1
1
0
0
0
0
0
0
0
0
1
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
переменная
grid
WIDTH
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

158. Размеры поля grid

158
Программирование игр на языке Python
Размеры поля grid
константы
(постоянные)
WIDTH = 20
HEIGHT = 20
SIZE = 20
# ширина
# высота
# размер клетки в пикселях
Левый верхний угол поля
x0 = - WIDTH*SIZE / 2
y0 = HEIGHT*SIZE / 2
© К.Ю. Поляков, 2025
(x0, y0)
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
1
1
1
0
0
0
0
0
0
1
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
(0,0 0)
http://kpolyakov.spb.ru

159. Таблица grid

159
Программирование игр на языке Python
Таблица grid
Можно так (но плохо):
grid = [ [0, 0, 0, …, 0],
[0, 0, 0, …, 0]
...
[0, 0, 0, …, 0]
]
Лучше так:
это одна
строка
grid = [ [0]*WIDTH
for row in range(HEIGHT) ]
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

160. Создаем Черепаху, которая рисует

160
Программирование игр на языке Python
Создаем Черепаху, которая рисует
t = turtle.Turtle()
t.speed(0)
t.penup() # без следа
t.hideturtle()
включим след,
когда нужно
скрыть
Черепаху
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

161. Рисуем одну ячейку

161
Программирование игр на языке Python
Рисуем одну ячейку
def drawCell( row, col,
isAlive ):
x = x0 + col*SIZE
y = y0 - row*SIZE
t.goto(x, y)
...
col
0
1
2
3
4
5
6
7
8
9
0
0
0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
2
0
0
0
1
0
0
0
0
0
0
3
0
0
1
1
1
0
0
0
0
0
4
0
0
0
1
1
0
0
0
0
0
row 5
0
0
0
0
0
0
0
0
0
0
6
0
0
0
0
0
0
0
0
0
0
7
0
0
0
0
0
0
0
0
0
0
row – строка
8
0 0 0 0 0 0 0 0 0 0
9
0 0 0 0 0 0 0 0 0 0
col – столбец
isAlive = 0 – клетка мертва
isAlive = 1 – клетка жива
(x, y) – левый верхний угол клетки
? Куда смотрит Черепаха?
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

162. Рисуем одну ячейку (продолжение)

162
Программирование игр на языке Python
Рисуем одну ячейку (продолжение)
def drawCell( row, col,
isAlive ):
...
t.pendown()
t.fillcolor(
"black" if isAlive
else "white" )
t.begin_fill()
for i in range(4):
t.forward( SIZE )
t.right(90)
t.end_fill()
t.penup()
© К.Ю. Поляков, 2025
col
0
1
2
3
4
5
6
7
8
9
0
0
0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
2
0
0
0
1
0
0
0
0
0
0
3
0
0
1
1
1
0
0
0
0
0
4
0
0
0
1
1
0
0
0
0
0
row 5
0
0
0
0
0
0
0
0
0
0
6
0
0
0
0
0
0
0
0
0
0
7
0
0
0
0
0
0
0
0
0
0
8
0
0
0
0
0
0
0
0
0
0
9
0
0
0
0
0
0
0
0
0
0
http://kpolyakov.spb.ru

163. Рисуем всё поле

163
Программирование игр на языке Python
Рисуем всё поле
цикл по всем
строкам
цикл по всем
столбцам
def drawGrid():
for row in range(HEIGHT):
for col in range(WIDTH):
drawCell( row, col, grid[row][col] )
рисуем одну
ячейку
© К.Ю. Поляков, 2025
это данные из
таблицы
http://kpolyakov.spb.ru

164. Задание

164
Программирование игр на языке Python
Задание
1) Соберите программу, которая рисует поле.
2) Попробуйте изменить размер поля и клеток,
как вам больше нравится.
3) Выберите другой цвет для живой клетки
(вместо чёрного).
4) Попробуйте сделать рисунок на поле,
заполняя единицами нужные ячейки таблицы:
grid[10][5] = 1
grid[10][6] = 1
...
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

165. Программирование игр на языке Python Щелчки мышью

© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

166. Щелчки мышью

166
Программирование игр на языке Python
Щелчки мышью
1) Определить координаты точки, где щёлкнули
(x, y)
2) Если попали мимо поля, ничего не делаем.
3) Определили координаты ячейки, по которой
щелкнули (строку row, столбец col)
4) Изменить состояние ячейки
1→0
0→1
© К.Ю. Поляков, 2025
? Где?
в таблице
grid
http://kpolyakov.spb.ru

167. Процедура-обработчик щелчка

167
Программирование игр на языке Python
Процедура-обработчик щелчка
def onClick( x, y ):
... # содержание дальше
window.listen()
window.onscreenclick( onClick, btn=1 )
щелчок мышь
по экрану
© К.Ю. Поляков, 2025
1 – левая
кнопка мыши
http://kpolyakov.spb.ru

168. Координаты ячейки

168
Программирование игр на языке Python
Координаты ячейки
def onClick( x, y ):
row = int( (y0 - y) // SIZE )
col = int( (x - x0) // SIZE )
...
? Как понять, что
(x0, y0)
© К.Ю. Поляков, 2025
col
0
1
2
3
4
5
6
7
8
9
0
0
0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
2
0
0
0
1
0
0
0
0
0
0
3
0
0
1
1
1
0
0
0
4
0
0
0
1
1
0
0
0
0 0y)
(x,
row 5
0
0
0
0
0
0
0
6
0
0
0
0
0
0
7
0
0
0
0
0
8
0
0
0
0
9
0
0
0
0
не попали?
row < 0
row > HEIGHT
col < 0
col > WIDTH
x – x0
y0 – y
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
http://kpolyakov.spb.ru

169. Координаты ячейки

169
Программирование игр на языке Python
Координаты ячейки
def onClick( x, y ):
row = int( (y0 - y) // SIZE )
col = int( (x - x0) // SIZE )
0→1
if 0 <= row < HEIGHT and \
1→0
0 <= col < WIDTH:
grid[row][col] = 1 - grid[row][col]
drawCell( row, col, grid[row][col] )
сразу
перерисовать
ячейку
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

170. Очистка поля

170
Программирование игр на языке Python
Очистка поля
def clearField():
global grid
...
? Что тут?
drawGrid()
window.listen()
window.onscreenclick( onClick, btn=1 )
window.onkey( clearField, 'c' )
при нажатии
клавиши «с»
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

171. Задание

171
Программирование игр на языке Python
Задание
1) Сделайте так, чтобы состояние клеток поля
можно было изменять щелчками мышкой.
2) Добавьте процедуру очистки поля по клавише
«c».
3) Добавьте процедуру, которая заполняет все
поле живыми клетками при нажатии клавиши
«f».
4) *Добавьте процедуру, которая заполняет все
поле живыми клетками в шахматном порядке
при нажатии клавиши «x».
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

172. Программирование игр на языке Python Следующее поколение

© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

173. Переход к следующему поколению

173
Программирование игр на языке Python
Переход к следующему поколению
1) Клетка зарождается, если ровно 3 соседа.
2) Живая клетка выживает, если у нее
2 или 3 соседа.
? Какие проблемы на краях?
?
?
?
?
?
?
?
?
Для каждой клетки:
1) Найти число соседей k
2) Если клетка = 0 и k = 3, то клетка = 1.
3) Если клетка = 1 и (k < 2 или k > 3),
то клетка = 0.
grid[row][col]
? Что изменить?
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

174. Жива ли клетка?

174
Программирование игр на языке Python
Жива ли клетка?
def isAlive( row, col ):
if 0 <= row < HEIGHT and \
0 <= col < WIDTH:
return grid[row][col]
else:
return 0
если эта клетка
клетка внутри
поля, то …
вне поля, то 0
! Решили проблему с краями!
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

175. Сколько соседей?

175
Программирование игр на языке Python
Сколько соседей?
def neighbors( row, col ):
count = isAlive( row-1, col-1 ) + \
isAlive( row-1, col ) + \
isAlive( row-1, col+1 ) + \
isAlive( row, col-1 ) + \
...
return count
col-1 col col+1
row-1 ? ? ?
row
?
row+1
?
© К.Ю. Поляков, 2025
?
?
! Длинно и
некрасиво!
?
http://kpolyakov.spb.ru

176. Сколько соседей?

176
Программирование игр на языке Python
Сколько соседей?
def neighbors( row, col ):
по всем 9
клеткам
count = 0
for r in range(row-1, row+2):
for c in range(col-1, col+2):
count += isAlive( r, c )
return count - isAlive(row, col)
col-1 col col+1
row-1 ? ? ?
row
?
row+1
?
© К.Ю. Поляков, 2025
1, если клетка жива,
или 0, если нет
?
?
?
http://kpolyakov.spb.ru

177. Следующее поколение

177
Программирование игр на языке Python
Следующее поколение
цикл по всем
def nextGeneration():
строкам
global grid
for row in range(HEIGHT):
цикл по всем
столбцам
for col in range(WIDTH):
k = neighbors( row, col )
if grid[row][col] == 1:
клетка
if not(2 <= k <= 3):
жива
grid[row][col] = 0
клетка не жива
elif k == 3:
и 3 соседа
grid[row][col] = 1
? Что плохо?
© К.Ю. Поляков, 2025
таблица
меняется
неверно
определяем
соседей
http://kpolyakov.spb.ru

178. Новая таблица newGrid

178
Программирование игр на языке Python
Новая таблица newGrid
заполняем новую
def nextGeneration():
таблицу нулями
global grid
newGrid = [ [0]*WIDTH
for row in range(HEIGHT) ]
...
# строим новую таблицу
grid = newGrid
заменяем старую
drawGrid()
таблицу новой
перерисовываем
сетку на поле
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

179. Строим новую таблицу

179
Программирование игр на языке Python
Строим новую таблицу
def nextGeneration():
двойной цикл по
...
всем ячейкам
for row in range(HEIGHT):
for col in range(WIDTH):
k = neighbors( row, col )
if grid[row][col] == 1:
клетка
if 2 <= k <= 3:
жива
newGrid[row][col] = 1
newGrid[row][col]
клетка не
elif k == 3:
жива и 3
newGrid[row][col] = 1
newGrid[row][col]
соседа
...
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

180. Задание

180
Программирование игр на языке Python
Задание
1) Сделайте так, чтобы процедура
newGeneration срабатывала при нажатии на
клавишу «пробел».
2) Сделайте так, чтобы при нажатии на клавишу
«m» поле «переживало» сразу 5 поколений.
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

181. Программирование игр на языке Python Сохранение поля

© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

182. Загрузка и сохранение поля

182
Программирование игр на языке Python
Загрузка и сохранение поля
1) При нажатии клавиши «s» (Save…)
сохраняем состояние поля в файле life.sav.
2) При нажатии «l» (Load…) программа
загружает состояние поля из файла life.sav.
[[1, 1, 0, ..., 0],
[0, 1, 1, ..., 0],
[0, 0, 1, ..., 0],
...
]
в файле будет всё в
одну строчку
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

183. Как записать в файл?

183
Программирование игр на языке Python
Как записать в файл?
открыть файл
работа с файлом
закрыть файл
"r" - чтение
"w" – запись
"a" – добавление
fileName = "life.sav"
with open( fileName, "w" ) as F:
файловый
file=F )
print( "Привет!", file=F
объект
...
файл закроется
автоматически
© К.Ю. Поляков, 2025
вывод в
файл
http://kpolyakov.spb.ru

184. Сохранение таблицы

184
Программирование игр на языке Python
Сохранение таблицы
def saveGrid():
global grid
fileName = "life.sav"
with open( fileName, "w" ) as F:
print( grid, file=F )
print( f"Файл {fileName} сохранён." )
window.listen()
...
window.onkey( saveGrid, 's' )
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

185. Загрузка таблицы

185
Программирование игр на языке Python
Загрузка таблицы
def loadGrid():
global grid
чтение
fileName = "life.sav"
with open( fileName, "r" ) as F:
все данные
grid
grid == eval(
eval( F.read()
F.read() ))
файла
drawGrid()
print( f"Файл {fileName} загружен." )
window.onkey( loadGrid, 'l' )
! Данные должны быть
правильные!
© К.Ю. Поляков, 2025
? А если нет?
http://kpolyakov.spb.ru

186. Обработка ошибок (исключения)

186
Программирование игр на языке Python
Обработка ошибок (исключения)
def loadGrid():
global grid
fileName = "life.sav"
try: # попытаться сделать...
... # загружаем данные из файла
drawGrid()
print( f"Файл {fileName} загружен." )
except: # если произошла ошибка...
print( f"Не удалось загрузить "
f"файл {fileName}." )
! «Исключение» – ошибка во время работы!
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

187. Сообщение на экране

Программирование игр на языке Python
187
Сообщение на экране
дисплей –
это тоже
Черепаха
display = turtle.Turtle()
display.penup()
display.hideturtle()
display.speed( 0 )
display.goto( 0, -290 )
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

188. Сообщение на экране

188
Программирование игр на языке Python
Сообщение на экране
def showInfo( s ):
display.clear()
display.write( s, align="center",
font=("Courier", 16) )
Вместо
print( f"..." )
используем
showInfo( f"..." )
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

189. Запрос имени файла

189
Программирование игр на языке Python
Запрос имени файла
from tkinter.filedialog import askopenfilename
from tkinter.filedialog import asksaveasfilename
from pathlib import Path
для записи
Вместо
fileName = "life.sav"
используем
для чтения
fileName = askopenfilename (
filetypes = [ ("Файлы SAV", "*.sav"),
("Все файлы", "*.*") ] )
if fileName: # если имя не пустое!
... # здесь выполняем чтение/запись файла
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

190. Обработка имени файла

190
Программирование игр на языке Python
Обработка имени файла
fileName = askopenfilename ( ... )
fileName = asksaveasfilename ( ... )
! Получаем полное имя файла!
D:\Works\Games\Life\life1.sav
не хватает
места
showInfo( f"Файл {fileName} загружен." )
Получить только само имя:
fileName = Path(fileName).name
showInfo( f"Файл {fileName} загружен." )
всё хорошо
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

191. Задание

191
Программирование игр на языке Python
Задание
1) Сделайте так, чтобы состояние поля можно
было сохранить в файле life.sav и
восстановить из него.
2) Добавьте информационную строку внизу
окна.
3) Добавьте обработку ошибок (при неверных
данных в файле программа не должна
завершаться аварийно).
4) Добавьте возможность выбора файла с
помощью диалогового окна.
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

192. Программирование игр на языке Python Объекты и классы

© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

193. Что такое объект?

193
Программирование игр на языке Python
Что такое объект?
Объект – это что-то, имеющее границы. Объект
можно выделить из окружающей среды.
• человек, собака, кошка
• ручка, тетрадь, портфель
• машина, самолёт, корабль
•…
Можно сказать
•как он выглядит?
•из чего состоит?
•что умеет делать (что с ним можно
делать?)
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

194. Что такое класс?

194
Программирование игр на языке Python
Что такое класс?
Класс – это описание общих свойств группы
объектов.
Класс «автомобиль»
• имеет кузов, двигатель, колеса, руль, …
• можно ездить вперёд и назад, …
Объекты класса «автомобиль»:
! Класс – «чертёж» (шаблон), по которому
можно создавать объекты этого класса.
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

195. Класс и объект в программе

195
Программирование игр на языке Python
Класс и объект в программе
Класс «Мяч»
class Ball:
описание
класса
pass
print( Ball )
<class '__main__.Ball'>
b = Ball()
print( b )
создание
объекта
<__main__.Ball object at 0x0000005F>
адрес в
памяти
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

196. Свойства – то, что у него есть

Программирование игр на языке Python
196
Свойства – то, что у него есть
class Ball:
x = 0
свойства
y = 0
создаём объект
b = Ball()
print( b.x, b.y )
0 0
b.x = 100
меняем свойства
b.y = 200
print( b.x, b.y )
100 200
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

197. Методы – то, что он умеет

197
Программирование игр на языке Python
Методы – то, что он умеет
class Ball:
x = 0
используем
метод
y = 0
свойства
def say(
say( self
self ):
):
def
print( f"Я
f"Я вв точке
точке ({self.x},{self.y})"
({self.x},{self.y})" ))
print(
! Self – это слово для обращения к свойствам
объекта, который вызвал метод.
b = Ball()
b.say()
Я в точке(0,0)
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

198. Метод __init__ (конструктор)

198
Программирование игр на языке Python
Метод __init__ (конструктор)
конструктор
class Ball:
def __init__( self, x0, y0 ):
self.x = x0
self.y = y0
def say( self ):
print( f"Я в точке ({self.x},{self.y})" )
! Конструктор – это метод, который
вызывается при создании объекта
b = Ball( 20, 150 )
b.say()
# Я в точке (20, 150)
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

199. Значения по умолчанию

Программирование игр на языке Python
199
Значения по умолчанию
class Ball:
def __init__( self, x0=0,
x0=0, y0=0
y0=0 ):
self.x = x0
если не
self.y = y0
указать…
...
b = Ball( 20, 150 )
b.say()
# Я в точке (20, 150)
b2 = Ball()
b2.say()
# Я в точке (0, 0)
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

200. Задание

200
Программирование игр на языке Python
Задание
1) Постройте класс Попугай (Parrot), который умеет говорить
какую-то фразу, заранее определённую при описании
класса.
Пример:
p = Parrot()
p.say()
Привет, друзья!
2) Измените класс так, чтобы фраза задавалась при создании
конкретного экземпляра.
Пример:
p1 = Parrot( "Гав!" )
p2 = Parrot( "Мяу!" )
p1.say()
Гав!
p2.say()
Мяу!
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

201. Задание

201
Программирование игр на языке Python
Задание
3) Измените класс так, чтобы фразу можно было изменять во
время работы программы.
Пример:
p = Parrot( "Гав!" )
p.say()
Гав!
p.newText( "Мяу!" )
p.say()
Мяу!
4) Измените класс так, чтобы при вызове метода say можно
было задать число повторений.
Пример:
p = Parrot( "Гав!" )
p.say()
Гав!
p.newText( "Мяу!" )
p.say( 3 )
Мяу! Мяу! Мяу!
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

202. Задание

202
Программирование игр на языке Python
Задание
5) *Изменить класс так, чтобы можно было добавлять фразы в
набор фраз, которые знает попугай. При вызове метода say
попугай выдаёт случайную фразу из своего набора.
Пример:
p = Parrot( "Гав!" )
p.say()
Гав!
p.learn( "Мяу!" )
p.say()
Гав!
p.say(3)
Мяу! Мяу! Мяу!
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

203. Программирование игр на языке Python Класс на основе Черепахи

© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

204. Мяч – это особая Черепаха (наследование)

204
Программирование игр на языке Python
Мяч – это особая Черепаха (наследование)
базовый
класс
import turtle
class Ball( turtle.Turtle ):
...
производный
класс
! Мяч – это объект, который имеет
(«наследует») все свойства и методы,
которые есть у Черепахи!
Мяч – это «разновидность» Черепахи!
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

205. Добавляем свойства

205
Программирование игр на языке Python
Добавляем свойства
цвет
import turtle
class Ball( turtle.Turtle ):
def __init__( self, x0, y0, color0 ):
super().__init__()
# создаем Черепаху
self.shape( "circle" )
self.color( color0 )
методы
self.penup()
Черепахи
self.speed( 0 )
self.goto( x0, y0 )
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

206. Основная программа: используем класс

206
Программирование игр на языке Python
Основная программа: используем класс
window = turtle.Screen()
window.bgcolor( "black" )
window.setup( 800, 600 )
# фон
# размеры
ball = Ball( 0, 0, "white" )
ball2 = Ball( -100, 100, "red" )
turtle.done()
! Второй объект
добавляется одной
строчкой!
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

207. Добавляем скорость

207
Программирование игр на языке Python
Добавляем скорость
import turtle
class Ball( turtle.Turtle ):
def __init__( self, x0, y0, color0 ):
...
скорости по оси
self.vx = 5
X
и
по
оси
Y
self.vy = -5
def move( self ):
x = self.xcor()
новый метод движение
self.setx( x+self.vx )
y = self.ycor()
self.sety( y+self.vy )
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

208. Основная программа: анимация

208
Программирование игр на языке Python
Основная программа: анимация
window = turtle.Screen()
window.bgcolor( "black" )
window.setup( 800, 600 )
turtle.tracer(0)
# фон
# размеры
ball = Ball( 0, 0, "white" )
while True:
ball.move()
window.update()
time.sleep( 0.05 )
turtle.done()
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

209. Остановка при нажатии Esc

209
Программирование игр на языке Python
Остановка при нажатии Esc
stop = False
def escape():
global stop
stop = True
срабатывает при
нажатии Esc
window.listen()
window.onkey( escape, "Escape" )
while not stop :
ball.move()
window.update()
time.sleep( 0.05 )
turtle.done()
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

210. Отскок от стенок

210
Программирование игр на языке Python
Отскок от стенок
vx
vx
vy
vy
vx
vx
vy
vy
vx
vy
vy
def checkCollision():
x = ball.xcor()
if x <= -390 or x >= 390:
ball.vx = -ball.vx
... # самостоятельно!
© К.Ю. Поляков, 2025
vx
vx
vy
vy
vx
http://kpolyakov.spb.ru

211. Основная программа: отскок от стенок

211
Программирование игр на языке Python
Основная программа: отскок от стенок
def checkCollision():
...
while True:
ball.move()
checkCollision()
window.update()
time.sleep( 0.05 )
turtle.done()
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

212. Задание

212
Программирование игр на языке Python
Задание
1) Соберите программу, в которой летает шарик
и отскакивает от стенок.
2) Постройте программу, в которой летают 5
шариков разного цвета и отскакивают от
стенок. Перенесите проверку столкновений в
метод move класса Ball.
3) Измените конструктор класса Ball так, чтобы
каждый шарик получал случайное
направление движения.
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

213. Программирование игр на языке Python Добавляем ракетки

© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

214. Ракетка – это тоже Черепаха

214
Программирование игр на языке Python
Ракетка – это тоже Черепаха
«наследник»
Черепахи
конструктор
import turtle
class Paddle( turtle.Turtle ):
def __init__( self, x0, y0, color0 ):
super().__init__()
увеличить
self.shape( "square" )
ширину в
5 раз
self.shapesize( stretch_wid=5,
(20 100)
stretch_len=1 )
self.color( color0 )
self.penup()
self.speed( 0 )
self.goto( x0, y0 )
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

215. Основная программа с ракетками

215
Программирование игр на языке Python
Основная программа с ракетками
ball = Ball( 0, 0, "white" )
leftPaddle = Paddle( -350, 0, "blue" )
rightPaddle = Paddle( 350, 0, "red" )
while True:
ball.move()
checkCollision()
window.update()
time.sleep( 0.05 )
turtle.done()
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

216. Движение ракетки

216
Программирование игр на языке Python
Движение ракетки
class Paddle( turtle.Turtle ):
def __init__( self, x0, y0, color0 ):
...
def moveUp( self ):
y = self.ycor()
self.sety( y + 20 )
def moveDown( self ):
... # самостоятельно!
window.listen()
window.onkey( escape, "Escape" )
window.onkey( rightPaddle.moveUp, "Up" )
window.onkey( rightPaddle.moveDown, "Down" )
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

217. Отскок шарика от ракетки

217
Программирование игр на языке Python
Отскок шарика от ракетки
правая
ракетка
def checkCollision():
x = ball.xcor()
y = ball.xcor()
yRight = rightPaddle.ycor()
if x > 340 and \
yRight-50 <= y <= yRight+50:
ball.vx = - ball.vx
... # самостоятельно!
y+50
y
y–50
левая
ракетка
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

218. Задание

218
Программирование игр на языке Python
Задание
1) Соберите программу, в которой летает шарик
и отскакивает от стенок и ракеток.
2) Измените программу так, чтобы вторая
ракетка тоже двигалась. Выберите для нее
клавиши управления.
3) Измените программу так, чтобы ракетки не
могли выйти за границы поля.
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

219. Программирование игр на языке Python Добавляем счёт

© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

220. Дисплей – тоже Черепаха

220
Программирование игр на языке Python
Дисплей – тоже Черепаха
class Display( turtle.Turtle ):
def __init__( self, x0, y0, color0 ):
super().__init__()
self.color( color0 )
self.penup()
self.hideturtle()
self.speed( 0 )
очков
self.goto( x0, y0 )
слева и
self.scoreLeft == 00
self.scoreLeft
справа
self.scoreRight == 00
self.scoreRight
self.update()
self.update()
обновить
на экране
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

221. Вывод информации

221
Программирование игр на языке Python
Вывод информации
class Display( turtle.Turtle ):
...
def update( self ):
self.clear()
self.write( f"Игрок Л: {self.scoreLeft} "
f"Игрок П: {self.scoreRight}",
align="center",
font=("Courier", 24) )
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

222. Увеличение счёта

Программирование игр на языке Python
222
Увеличение счёта
class Display( turtle.Turtle ):
...
def addPointLeft( self ):
self.scoreLeft += 1
self.update()
def addPointRight( self ):
# самостоятельно!
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

223. Подсчёт очков

223
Программирование игр на языке Python
Подсчёт очков
def checkCollision():
прошёл ракетку и
...
ушёл за поле
if x > 390:
display.addPointLeft()
ball.goto( 0, 0 )
... # так же и для второго игрока
! Убрать отскок от боковых стенок!
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

224. Задание

224
Программирование игр на языке Python
Задание
1) Соберите полную программу.
2) Измените программу так, чтобы после гола
шарик летел в сторону того, кто забил этот
гол.
3) Измените программу так, чтобы после того,
как кто-то наберет 5 очков, игра
заканчивалась и на месте счета появлялась
надпись «Выиграл игрок Л (или П)». Через 2
секунды игра должна начинаться заново с
нулевого счёта. Добавьте в класс Display
метод reset, который обнуляет счёт.
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

225. Задание

225
Программирование игр на языке Python
Задание
4) Сделайте так, чтобы после выигрыша какогото игрока новая игра запускалась только
после нажатия на пробел ("space").
Учтите, что программа обрабатывает нажатия
клавиш только при вызове
window.update()
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

226. Программирование игр на языке Python Играет компьютер

© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

227. Гарантированный выигрыш компьютера

227
Программирование игр на языке Python
Гарантированный выигрыш компьютера
def autoPlay():
if ball.ycor() < leftPaddle.ycor():
leftPaddle.moveDown()
elif ... # самостоятельно!
? Что плохо?
def autoPlay():
if ball.ycor() < leftPaddle.ycor()-30:
-30:
leftPaddle.moveDown()
elif ... # самостоятельно!
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

228. Вызов функции 1 раз в 100 мс

228
Программирование игр на языке Python
Вызов функции 1 раз в 100 мс
вызвать еще раз
def autoPlay():
через 100 мс
...
window.ontimer( autoPlay, 100 )
Первый вызов:
window.ontimer( autoPlay, 100 )
while True:
...
window.update()
time.sleep( 0.05 )
основной
цикл
turtle.done()
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

229. Движение вверх и вниз

229
Программирование игр на языке Python
Движение вверх и вниз
import turtle
class Paddle( turtle.Turtle ):
def __init__( self, x0, y0, color0 ):
super().__init__()
...
направление
self.dir = 0
движения
1 # вверх
-1 # вниз
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

230. Движение вверх и вниз

230
Программирование игр на языке Python
Движение вверх и вниз
def autoPlay():
y = leftPaddle.ycor()
if y <= -240:
leftPaddle.dir = 1
# самостоятельно другую сторону!
if leftPaddle.dir == 1:
leftPaddle.moveUp()
# самостоятельно другую сторону!
window.ontimer( autoPlay, 100 )
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

231. Задание

231
Программирование игр на языке Python
Задание
1) Соберите программу, в которой
гарантированно выигрывает компьютер.
2) Соберите программу, в которой левая ракетка
движется поочередно вверх и вниз через всё
поле.
3) Соберите программу, в которой в движение
левой ракетки добавлена случайность: в
среднем один раз из трёх выбирается
неверное направление. Используйте условие
if randint(0, 2) == 0: ...
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

232. Программирование игр на языке Python Игра «Арканоид»

© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

233. Игра «Арканоид»

233
Программирование игр на языке Python
Игра «Арканоид»
блоки для
«выбивания»
шарик
ракетка
(движется)
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

234. Этап 1. Шарик

Программирование игр на языке Python
234
Этап 1. Шарик
Экран 600 800.
Шарик (объект класса
Ball) летает и
отталкивается от стенок
поля.
При нажатии клавиши
Escape программа
заканчивает работу.
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

235. Этап 2. Ракетка

Программирование игр на языке Python
235
Этап 2. Ракетка
Добавляем ракетку
(объект класса Paddle).
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

236. Модульная организация программы

236
Программирование игр на языке Python
Модульная организация программы
from ballcls import Ball
from paddlecls import Paddle
основная
программа
модули
main.py
ballcls.py
paddlecls.py
класс Ball
класс Paddle
import turtle
class Ball( turtle.Turtle ):
def __ init__( self, ... )
...
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

237. Этап 3. Ракетка отбивает шарик

Программирование игр на языке Python
237
Этап 3. Ракетка отбивает шарик
Шарик отталкивается от
ракетки. Коррекция
скорости:
x = ball.xcor()
xp = paddle.xcor()
ball.vx += (x - xp) / 10
! Полёт шарика
зависит от того,
какая часть ракетки
по нему попала!
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

238. Этап 3. Ракетка отбивает шарик

238
Программирование игр на языке Python
Этап 3. Ракетка отбивает шарик
Ракетка следует за мышью.
event.x
x
def movePaddle(event):
x = event.x - 300
paddle.setx( x )
canvas = window.getcanvas()
canvas.bind( "<Motion>", movePaddle )
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

239. Этап 4. Блоки

Программирование игр на языке Python
239
Этап 4. Блоки
Добавить блоки разного
цвета (7 рядов по 10
блоков случайного
цвета).
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

240. Этап 4. Блоки

240
Программирование игр на языке Python
Этап 4. Блоки
Класс Block в файле blockcls.py
import turtle
class Block( turtle.Turtle ):
def __init__( self, x0, y0, color ):
super().__init__()
self.shape( "square" )
self.color(color )
self.shapesize( stretch_wid=1,
stretch_len=2 )
self.penup()
блок 20 40
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

241. Этап 4. Блоки

241
Программирование игр на языке Python
Этап 4. Блоки
Добавить блоки разного цвета (7 рядов по 10
блоков случайного цвета).
blocks = [] # пустой список
colors = ["red", "orange", "yellow", "green",
"cyan", "blue", "purple"]
for row in range(7):
for col in range(10):
случайный
x = -230 + col*50
цвет
y = 250 - row*25
block = Block( x, y, random.choice(colors) )
blocks.append( block )
добавить в
список блоков
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

242. Этап 5. Выбивание блоков

Программирование игр на языке Python
242
Этап 5. Выбивание блоков
Шарик выбивает блоки и
отталкивается от них
(скорость .vy меняется
на обратную).
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

243. Этап 5. Выбивание блоков

243
Программирование игр на языке Python
Этап 5. Выбивание блоков
x = ball.xcor()
y = ball.ycor()
проверить
все блоки
for block in blocks:
xBlock = block.xcor()
yBlock = block.ycor()
если шарик
попал на блок
if xBlock-25 < x < xBlock+25 and \
yBlock-10 < y < yBlock+10:
block.goto( 1000, 1000 ) # убрать далеко
blocks.remove( block )
# удалить
ball.vy = -ball.vy # отскок
break # дальше не проверять
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

244. Этап 6. Дисплей (счёт, жизни)

Программирование игр на языке Python
244
Этап 6. Дисплей (счёт, жизни)
Табло со счётом (число
выбитых блоков). Всего
3 «жизни», «жизнь»
теряется, если шарик
проходит линию ракетки.
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

245. Этап 6. Дисплей (счёт, жизни)

245
Программирование игр на языке Python
Этап 6. Дисплей (счёт, жизни)
Табло со счётом (число выбитых блоков). Всего
3 «жизни», «жизнь» теряется, если шарик
проходит линию ракетки.
Файл displaycls.py
import turtle
class Display( turtle.Turtle ):
def __init__( self, x0, y0, color0 ):
super().__init__()
...
self.score = 0
# счёт
self.lives = 3
# жизни
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

246. Этап 6. Дисплей (счёт, жизни)

246
Программирование игр на языке Python
Этап 6. Дисплей (счёт, жизни)
Шарик прошёл линию ракетки.
display.lives -= 1
окончание
display.update()
игры
if display.lives == 0:
ball.vx = ball.vy = 0
global stop
закончить
игру
stop = True
display.gameOver()
остановить
шарик
сообщение об
окончании игры
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

247. Этап 7. Постепенное усложнение игры

247
Программирование игр на языке Python
Этап 7. Постепенное усложнение игры
После каждых 5 набранных очков скорость
движения шарика увеличивается на 5%.
ball.vx *= 1.05
ball.vy *= 1.05
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru

248. Конец фильма

248
Программирование игр на языке Python
Конец фильма
ПОЛЯКОВ Константин Юрьевич
д. т. н., учитель информатики
г. Санкт-Петербург
kpolyakov@mail.ru
© К.Ю. Поляков, 2025
http://kpolyakov.spb.ru
English     Русский Rules