Программируем на Python

М. Доусон

Обложка:


Оглавление
Благодарности . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
Об авторе . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
Введение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
От издательства . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
Глава 1. Начало работы. Программа Game Over . . . . . . . . . . . . . . . 30
Изучаем программу Game Over . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
Знакомство с Python......................................... 31
Python прост в использовании . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
Python — мощный язык . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
Python — объектно-ориентированный язык . . . . . . . . . . . . . . . . . . 32
Python — «склеивающий» язык . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
Python работает на всех платформах . . . . . . . . . . . . . . . . . . . . . . 33
Сообщество программистов на Python . . . . . . . . . . . . . . . . . . . . . . 33
Python — бесплатная система с открытым исходным кодом . . . . . . 33
Установка Python в Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
Установка Python в других операционных системах . . . . . . . . . . . . . . . . . 34
Знакомство с IDLE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
Программирование в интерактивном режиме . . . . . . . . . . . . . . . . 35
Программирование в сценарном режиме . . . . . . . . . . . . . . . . . . . . 38
Вернемся к программе Game Over . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
Использование комментариев . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
Пустые строки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
Печать строки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
Ожидаем пользователя . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
8 Оглавление
Глава 2. Типы, переменные и основы ввода-вывода.
Программа «Бесполезные факты».................... 43
Знакомство с программой «Бесполезные факты» . . . . . . . . . . . . . . . . . . . 43
Строки и кавычки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
Знакомство с программой Game Over 2.0 . . . . . . . . . . . . . . . . . . . . 44
Кавычки внутри строк . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
Вывод на экран нескольких значений . . . . . . . . . . . . . . . . . . . . . . 46
Задание завершающей строки при выводе . . . . . . . . . . . . . . . . . . 47
Создание строк в тройных кавычках . . . . . . . . . . . . . . . . . . . . . . . 47
Escape-последовательности в строках . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
Знакомство с программой «Воображаемые благодарности» . . . . . . 48
Вставка табуляционного отступа . . . . . . . . . . . . . . . . . . . . . . . . . . 49
Вывод обратного слеша . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
Вставка пустой строки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
Вставка кавычек . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
Звук системного динамика . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
Сцепление и повторение строк . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
Знакомство с программой «Забавные строки» . . . . . . . . . . . . . . . . 51
Сцепление строк . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
Символ продолжения строки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
Повторение строк . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
Работа с числами . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
Знакомство с программой «Текстовые задачи» . . . . . . . . . . . . . . . 53
Числовые типы данных . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
Применение математических операторов . . . . . . . . . . . . . . . . . . . 55
Переменные . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
Знакомство с программой «Привет» . . . . . . . . . . . . . . . . . . . . . . . 56
Создание переменных . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
Использование переменных . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
Имена переменных . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
Получение пользовательского ввода . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
Знакомство с программой «Персональный привет» . . . . . . . . . . . . 59
Применение функции input() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
Применение строковых методов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
Знакомство с программой «Манипуляции с цитатой» . . . . . . . . . . . 61
Создание новых строк с помощью строковых методов . . . . . . . . . . 62
Правильно выбранный тип . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
Оглавление 9
Знакомство с программой «Рантье» (версия с ошибкой) . . . . . . . . 64
Обнаружение и устранение логических ошибок . . . . . . . . . . . . . . . 65
Конвертация значений . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
Знакомство с программой «Рантье» (версия без ошибки) . . . . . . . 66
Преобразование строк в целые числа . . . . . . . . . . . . . . . . . . . . . . 67
Составные операторы присвоения . . . . . . . . . . . . . . . . . . . . . . . . 68
Вернемся к программе «Бесполезные факты» . . . . . . . . . . . . . . . . . . . . . 68
Начальные комментарии . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
Получение пользовательского ввода . . . . . . . . . . . . . . . . . . . . . . . 69
Вывод name на экран в нижнем и верхнем регистре . . . . . . . . . . . 69
Пятикратный вывод имени . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
Подсчет количества секунд . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
Вычисление значений moon_weight и sun_weight . . . . . . . . . . . . . 70
Ожидание выхода . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
Глава 3. Ветвление, циклы с оператором while и псевдокод.
Игра «Отгадай число» . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
Генерирование случайных чисел . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
Знакомство с программой «Кости» . . . . . . . . . . . . . . . . . . . . . . . . 73
Импорт модуля random . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
Применение функции randint() . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
Применение функции randrange() . . . . . . . . . . . . . . . . . . . . . . . . . 75
Условные конструкции с if . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
Знакомство с программой «Пароль» . . . . . . . . . . . . . . . . . . . . . . . 75
Разбираемся, как работает конструкция if . . . . . . . . . . . . . . . . . . . 77
Создание условий . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
Операторы сравнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
Создание блоков кода с помощью отступов . . . . . . . . . . . . . . . . . . 78
Создание собственных условных конструкций . . . . . . . . . . . . . . . . 79
Конструкции if с условием else . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
Знакомство с программой «Открыто/Закрыто» . . . . . . . . . . . . . . . 79
Разбираемся в условиях else . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
Использование выражения elif . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
Знакомство с программой «Компьютерный датчик
настроения» . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
Разбираемся в условиях elif . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
10 Оглавление
Создание циклов с использованием while . . . . . . . . . . . . . . . . . . . . . . . . . 84
Знакомство с программой «Симулятор трехлетнего ребенка» . . . . 84
Разбираемся в работе цикла while . . . . . . . . . . . . . . . . . . . . . . . . . 85
Инициализация управляющей переменной . . . . . . . . . . . . . . . . . . 85
Проверка значения управляющей переменной . . . . . . . . . . . . . . . 86
Изменение значения управляющей переменной . . . . . . . . . . . . . . 86
Борьба с бесконечными циклами . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
Знакомство с программой «Проигранное сражение» . . . . . . . . . . . 87
Трассировка программы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
Условия, которые могут становиться ложными . . . . . . . . . . . . . . . 88
Значения как условия . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
Знакомство с программой «Метрдотель» . . . . . . . . . . . . . . . . . . . . 90
Истинные и ложные значения . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
Намеренное создание бесконечных циклов . . . . . . . . . . . . . . . . . . . . . . . 91
Знакомство с программой «Привередливая считалка» . . . . . . . . . . 92
Выход из цикла с помощью команды break . . . . . . . . . . . . . . . . . . 93
Команда continue и возврат к началу цикла.................. 93
Как пользоваться командами break и continue . . . . . . . . . . . . . . . . 93
Составные условия . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
Знакомство с программой «Эксклюзивная сеть» . . . . . . . . . . . . . . 94
Логический оператор not . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
Логический оператор and . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
Логический оператор or . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
Планирование программ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
Алгоритмы на псевдокоде . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
Пошаговая доработка алгоритма . . . . . . . . . . . . . . . . . . . . . . . . . . 99
Вернемся к игре «Отгадай число» . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
План программы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
Начальный блок комментариев . . . . . . . . . . . . . . . . . . . . . . . . . . 101
Импорт модуля random . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
Объяснение правил . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
Установка начальных значений . . . . . . . . . . . . . . . . . . . . . . . . . . 101
Цикл отгадывания . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
Поздравления победителю . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
Ожидание выхода . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
Оглавление 11
Глава 4. Циклы с оператором for, строки и кортежи.
Игра «Анаграммы» . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
Знакомство с игрой «Анаграммы» . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
Применение циклов for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
Знакомство с программой «Слово по буквам» . . . . . . . . . . . . . . . 105
Разбираемся в работе цикла for . . . . . . . . . . . . . . . . . . . . . . . . . 106
Создание цикла for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
Счет с помощью цикла for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
Знакомство с программой «Считалка» . . . . . . . . . . . . . . . . . . . . . 107
Счет по возрастанию . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
Счет по числам, кратным пяти . . . . . . . . . . . . . . . . . . . . . . . . . . 109
Счет по убыванию . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
Операторы и функции для работы с последовательностями:
применение к строкам . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
Знакомство с программой «Анализатор текста» . . . . . . . . . . . . . . 110
Применение функции len() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
Применение оператора in . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
Индексация строк . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
Знакомство с программой «Случайные буквы» . . . . . . . . . . . . . . 111
Позиции с положительными номерами . . . . . . . . . . . . . . . . . . . . 112
Позиции с отрицательными номерами . . . . . . . . . . . . . . . . . . . . . 113
Случайный элемент строки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
Что такое неизменяемость строк . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
Конструируем новую строку . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
Знакомство с программой «Только согласные» . . . . . . . . . . . . . . 116
Создание констант . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
Создание новых строк из существующих . . . . . . . . . . . . . . . . . . . 118
Срезы строк . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
Знакомство с программой «Резчик пиццы» . . . . . . . . . . . . . . . . . 119
Значение None . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
Разбираемся в срезах . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
Создание срезов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
Сокращения в записи срезов . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
Создание кортежей . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
Знакомство с программой «Арсенал героя» . . . . . . . . . . . . . . . . . 123
Создание пустого кортежа . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
Кортеж как условие . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
12 Оглавление
Создание непустого кортежа . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
Вывод элементов кортежа на экран . . . . . . . . . . . . . . . . . . . . . . 125
Перебор элементов кортежа . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
Использование кортежей . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
Знакомство с программой «Арсенал героя 2.0» . . . . . . . . . . . . . . 126
Настройка программы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
Применение функции len() к кортежам . . . . . . . . . . . . . . . . . . . . 127
Применение оператора in к кортежам . . . . . . . . . . . . . . . . . . . . . 128
Индексация кортежей . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
Срезы кортежей . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
Неизменяемость кортежей . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
Сцепление кортежей.................................. 129
Вернемся к игре «Анаграммы» . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
Настройка программы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
Как сформировать анаграмму . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
Создание пустой строки для анаграммы . . . . . . . . . . . . . . . . . . . 131
Настройка цикла . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
Выбор случайной позиции в слове . . . . . . . . . . . . . . . . . . . . . . . 132
Новая версия jumble . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
Новая версия word . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
Программа приветствует игрока . . . . . . . . . . . . . . . . . . . . . . . . . 132
Получение пользовательского ввода . . . . . . . . . . . . . . . . . . . . . . 132
Поздравление с правильно отгаданным словом . . . . . . . . . . . . . . 133
Конец игры . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
Глава 5. Списки и словари. Игра «Виселица» . . . . . . . . . . . . . . . . . 134
Знакомство с игрой «Виселица» . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
Использование списков . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
Знакомство с программой «Арсенал героя 3.0» . . . . . . . . . . . . . . 136
Создание списка . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
Применение функции len() к спискам . . . . . . . . . . . . . . . . . . . . . 137
Применение оператора in к спискам . . . . . . . . . . . . . . . . . . . . . . 137
Индексация списков . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
Срезы списков . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
Сцепление списков . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
Изменяемость списков . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
Оглавление 13
Присвоение нового значения элементу,
выбранному по индексу . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
Присвоение новых значений срезу списка . . . . . . . . . . . . . . . . . . 139
Удаление элемента списка . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
Удаление среза списка . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
Применение списочных методов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
Знакомство с программой «Рекорды» . . . . . . . . . . . . . . . . . . . . . 140
Настройка программы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
Отображение меню . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
Выход из программы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
Отображение списка рекордов . . . . . . . . . . . . . . . . . . . . . . . . . . 142
Добавление рекорда . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
Удаление рекорда . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
Сортировка списка рекордов . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
Обработка ошибочного выбора . . . . . . . . . . . . . . . . . . . . . . . . . . 144
Ожидаем пользователя . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
Когда использовать кортежи, а когда — списки . . . . . . . . . . . . . . . . . . . 144
Вложенные последовательности . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
Знакомство с программой «Рекорды 2.0» . . . . . . . . . . . . . . . . . . 145
Создаем вложенные последовательности . . . . . . . . . . . . . . . . . . 146
Доступ к вложенным элементам . . . . . . . . . . . . . . . . . . . . . . . . . 147
Распаковка последовательности . . . . . . . . . . . . . . . . . . . . . . . . . 147
Настройка программы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
Вывод результатов, содержащихся во вложенных кортежах . . . . 148
Добавление результата как вложенного кортежа . . . . . . . . . . . . 149
Обработка ошибочного выбора . . . . . . . . . . . . . . . . . . . . . . . . . . 149
Ожидаем пользователя . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
Распределенные ссылки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
Использование словарей . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152
Знакомство с программой «Переводчик с гикского на русский» . . . 152
Создание словарей . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152
Доступ к значениям в словаре . . . . . . . . . . . . . . . . . . . . . . . . . . 153
Настройка программы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
Поиск значения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
Добавление пары «ключ — значение» . . . . . . . . . . . . . . . . . . . . 156
Замена пары «ключ — значение» . . . . . . . . . . . . . . . . . . . . . . . . 157
Удаление пары «ключ — значение» . . . . . . . . . . . . . . . . . . . . . . 157
14 Оглавление
Обработка ошибочного выбора . . . . . . . . . . . . . . . . . . . . . . . . . . 158
Особенности словарей . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
Вернемся к игре «Виселица» . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
Настройка программы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
Создание констант . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
Инициализация переменных . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162
Создание основного цикла . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162
Получение ответа игрока . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
Проверка наличия буквы в слове . . . . . . . . . . . . . . . . . . . . . . . . 163
Завершение игры . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
Глава 6. Функции. Игра «Крестики-нолики» . . . . . . . . . . . . . . . . . . 165
Знакомство с игрой «Крестики-нолики» . . . . . . . . . . . . . . . . . . . . . . . . . 165
Создание функций . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
Знакомство с программой «Инструкция» . . . . . . . . . . . . . . . . . . . 167
Объявление функции . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168
Документирование функции . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168
Вызов нестандартной функции . . . . . . . . . . . . . . . . . . . . . . . . . . 169
Что такое абстракция . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169
Параметры и возвращаемые значения . . . . . . . . . . . . . . . . . . . . . . . . . . 169
Знакомство с программой «Принимай — возвращай» . . . . . . . . . 170
Передача данных с помощью параметров . . . . . . . . . . . . . . . . . . 170
Возврат значений функциями . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
Что такое инкапсуляция . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172
Функции, которые и принимают и возвращают значения . . . . . . . 172
Что такое повторное использование кода . . . . . . . . . . . . . . . . . . 173
Именованные аргументы и значения параметров по умолчанию . . . . . . . 174
Знакомство с программой «День рождения» . . . . . . . . . . . . . . . . 174
Позиционные параметры и позиционные аргументы . . . . . . . . . . 175
Позиционные параметры и именованные аргументы . . . . . . . . . . 175
Значения параметров по умолчанию . . . . . . . . . . . . . . . . . . . . . . 176
Использование глобальных переменных и констант . . . . . . . . . . . . . . . . 177
Что такое области видимости . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
Знакомство с программой «Доступ отовсюду» . . . . . . . . . . . . . . . 179
Чтение глобальной переменной внутри функции . . . . . . . . . . . . . 180
Затенение глобальной переменной внутри функции . . . . . . . . . . 180
Оглавление 15
Изменение глобальной переменной внутри функции . . . . . . . . . . 181
Когда использовать глобальные переменные и константы . . . . . . 181
Вернемся к игре «Крестики-нолики» . . . . . . . . . . . . . . . . . . . . . . . . . . . 182
План программы «Крестики-нолики»...................... 182
Настройка программы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184
Функция display_instruct() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185
Функция ask_yes_no() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185
Функция ask_number() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185
Функция pieces() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186
Функция new_board() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186
Функция display_board() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186
Функция legal_moves() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186
Функция winner() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187
Функция human_move() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188
Функция computer_move() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188
Функция next_turn() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
Функция congrat_winner() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
Функция main() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192
Запуск программы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192
Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192
Глава 7. Файлы и исключения. Игра «Викторина» . . . . . . . . . . . . 194
Знакомство с игрой «Викторина» . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194
Чтение текстового файла . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194
Знакомство с программой «Прочитаем» . . . . . . . . . . . . . . . . . . . 195
Открытие и закрытие файла . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197
Чтение текстового файла . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198
Посимвольное чтение строки . . . . . . . . . . . . . . . . . . . . . . . . . . . 199
Чтение всех строк файла в список . . . . . . . . . . . . . . . . . . . . . . . 200
Перебор строк файла . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200
Запись в текстовый файл . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200
Знакомство с программой «Запишем» . . . . . . . . . . . . . . . . . . . . . 201
Запись строк в файл . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201
Запись списка строк в файл . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202
Хранение структурированных данных в файлах . . . . . . . . . . . . . . . . . . . 203
Знакомство с программой «Законсервируем» . . . . . . . . . . . . . . . 203
Консервация данных и запись в файл . . . . . . . . . . . . . . . . . . . . . 204
16 Оглавление
Чтение и расконсервация данных из файла . . . . . . . . . . . . . . . . . 205
Полка для хранения консервированных данных . . . . . . . . . . . . . 206
Извлечение консервированных данных
через интерфейс полки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207
Обработка исключений . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208
Знакомство с программой «Обработаем» . . . . . . . . . . . . . . . . . . 208
Применение конструкций try/except . . . . . . . . . . . . . . . . . . . . . . 208
Типы исключений . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209
Обработка нескольких типов исключений . . . . . . . . . . . . . . . . . . 211
Аргумент исключения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212
Добавление блока else . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212
Вернемся к игре «Викторина» . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212
Как организованы данные в текстовом файле . . . . . . . . . . . . . . . 213
Функция open_file() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214
Функция next_line() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215
Функция next_block() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215
Функция welcome() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216
Настройка игры . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216
Задание вопроса . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216
Получение ответа . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216
Проверка ответа . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217
Переход к следующему вопросу . . . . . . . . . . . . . . . . . . . . . . . . . 217
Завершение игры . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217
Запуск функции main() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217
Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217
Глава 8. Программные объекты. Программа
«Моя зверюшка» . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219
Знакомство с программой «Моя зверюшка» . . . . . . . . . . . . . . . . . . . . . . 219
Основы объектно-ориентированного подхода . . . . . . . . . . . . . . . . . . . . . 221
Создание классов, методов и объектов.......................... 221
Знакомство с программой «Просто зверюшка» . . . . . . . . . . . . . . 221
Объявление класса . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222
Объявление метода . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223
Создание объекта . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223
Вызов метода . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224
Применение конструкторов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224
Знакомство с программой «Зверюшка с конструктором» . . . . . . . 224
Оглавление 17
Создание конструктора . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225
Создание нескольких объектов . . . . . . . . . . . . . . . . . . . . . . . . . . 225
Применение атрибутов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226
Знакомство с программой «Зверюшка с атрибутом» . . . . . . . . . . 226
Инициализация атрибутов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227
Доступ к атрибутам . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228
Вывод объекта на экран . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228
Применение атрибутов класса и статических методов . . . . . . . . . . . . . . 229
Знакомство с программой «Классово верная зверюшка» . . . . . . . 229
Создание атрибута класса . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231
Доступ к атрибуту класса . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231
Создание статического метода . . . . . . . . . . . . . . . . . . . . . . . . . . 232
Вызов статического метода . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232
Что такое инкапсуляция объектов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232
Применение закрытых атрибутов и методов . . . . . . . . . . . . . . . . . . . . . . 233
Знакомство с программой «Закрытая зверюшка»............. 233
Создание закрытых атрибутов . . . . . . . . . . . . . . . . . . . . . . . . . . 234
Доступ к закрытым атрибутам . . . . . . . . . . . . . . . . . . . . . . . . . . . 234
Создание закрытых методов . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235
Доступ к закрытым методам . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235
Соблюдаем приватность . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236
В каких случаях нужны закрытые атрибуты и методы . . . . . . . . . 237
Управление доступом к атрибутам . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237
Знакомство с программой «Зверюшка со свойствами» . . . . . . . . . 237
Создание свойств . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238
Доступ к свойствам . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239
Вернемся к программе «Моя зверюшка» . . . . . . . . . . . . . . . . . . . . . . . . 240
Класс Critter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241
Создание зверюшки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242
Создание меню . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243
Запуск программы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243
Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244
Глава 9. Объектно-ориентированное программирование.
Игра «Блек-джек» . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245
Знакомство с игрой «Блек-джек» . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245
Отправка и прием сообщений . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246
18 Оглавление
Знакомство с программой «Гибель пришельца» . . . . . . . . . . . . . 247
Отправка сообщения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248
Прием сообщения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249
Сочетание объектов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249
Знакомство с программой «Карты» . . . . . . . . . . . . . . . . . . . . . . . 249
Создание класса Card . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250
Создание класса Hand . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250
Применение объектов-карт . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251
Сочетание объектов-карт в объекте Hand . . . . . . . . . . . . . . . . . . 251
Создание новых классов с помощью наследования . . . . . . . . . . . . . . . . . 252
Расширение класса через наследование . . . . . . . . . . . . . . . . . . . . . . . . . 253
Знакомство с программой «Карты 2.0» . . . . . . . . . . . . . . . . . . . . 253
Создание базового класса . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253
Наследование от базового класса . . . . . . . . . . . . . . . . . . . . . . . . 255
Расширение производного класса . . . . . . . . . . . . . . . . . . . . . . . . 255
Применение производного класса . . . . . . . . . . . . . . . . . . . . . . . . 256
Переопределение унаследованных методов . . . . . . . . . . . . . . . . . . . . . . 258
Знакомство с программой «Карты 3.0» . . . . . . . . . . . . . . . . . . . . 258
Создание базового класса . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258
Переопределение методов базового класса . . . . . . . . . . . . . . . . . 259
Вызов методов базового класса . . . . . . . . . . . . . . . . . . . . . . . . . 260
Применение производного класса . . . . . . . . . . . . . . . . . . . . . . . . 261
Что такое полиморфизм . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262
Создание модулей . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262
Знакомство с программой «Простая игра» . . . . . . . . . . . . . . . . . . 263
Пишем модуль . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263
Импорт модулей . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265
Применение импортированных функций и классов . . . . . . . . . . . 265
Вернемся к игре «Блек-джек» . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266
Модуль cards . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266
Продумаем систему классов . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267
Напишем псевдокод для основного цикла игры . . . . . . . . . . . . . . 268
Импорт модулей cards и games . . . . . . . . . . . . . . . . . . . . . . . . . . 269
Класс BJ_Card . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269
Класс BJ_Deck . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270
Класс BJ_Hand . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270
Класс BJ_Player . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272
Оглавление 19
Класс BJ_Dealer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272
Класс BJ_Game . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273
Функция main() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275
Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276
Глава 10. Разработка графических интерфейсов.
Программа «Сумасшедший сказочник» . . . . . . . . . . . . . . 277
Знакомство с программой «Сумасшедший сказочник» . . . . . . . . . . . . . . 277
GUI в подробностях . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279
Что такое событийно-ориентированное программирование . . . . . . . . . . 280
Базовое окно . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281
Знакомство с программой «Простейший GUI» . . . . . . . . . . . . . . . . . . . . . 281
Импорт модуля tkinter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282
Создание базового окна . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283
Изменение вида базового окна . . . . . . . . . . . . . . . . . . . . . . . . . . 283
Запуск событийного цикла базового окна . . . . . . . . . . . . . . . . . . 283
Применение меток . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284
Знакомство с программой «Это я, метка» . . . . . . . . . . . . . . . . . . 284
Настройка программы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284
Создание рамки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284
Создание метки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285
Запуск событийного цикла базового окна . . . . . . . . . . . . . . . . . . 285
Применение кнопок . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285
Знакомство с программой «Бесполезные кнопки» . . . . . . . . . . . . 286
Настройка программы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286
Создание кнопок . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286
Запуск событийного цикла базового окна . . . . . . . . . . . . . . . . . . 287
Создание GUI с помощью класса . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287
Знакомство с программой «Бесполезные кнопки — 2» . . . . . . . . . 288
Импорт модуля tkinter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288
Объявление класса Application . . . . . . . . . . . . . . . . . . . . . . . . . . 288
Объявление метода-конструктора . . . . . . . . . . . . . . . . . . . . . . . . 288
Объявление метода, создающего элементы управления . . . . . . . 289
Создание объекта класса Application . . . . . . . . . . . . . . . . . . . . . . 289
Связывание элементов управления с обработчиками событий . . . . . . . . 290
Знакомство с программой «Счетчик щелчков»............... 290
Настройка программы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290
Связывание обработчика с событием . . . . . . . . . . . . . . . . . . . . . 291
20 Оглавление
Создание обработчика события . . . . . . . . . . . . . . . . . . . . . . . . . . 291
Обертка программы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291
Текстовые поля и области. Менеджер размещения Grid . . . . . . . . . . . . . 291
Знакомство с программой «Долгожитель» . . . . . . . . . . . . . . . . . . 292
Настройка программы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293
Размещение элементов управления
с помощью менеджера Grid . . . . . . . . . . . . . . . . . . . . . . . . . . 293
Создание текстового поля . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294
Создание текстовой области . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295
Текстовые элементы: извлечение и вставка данных . . . . . . . . . . 295
Обертка программы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296
Применение флажков . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296
Знакомство с программой «Киноман» . . . . . . . . . . . . . . . . . . . . . 297
Настройка программы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297
Ссылка только на родительский объект элемента управления . . . 297
Создание флажков . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298
Получение статуса флажка . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299
Обертка программы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 300
Применение переключателей . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 300
Знакомство с программой «Киноман-2» . . . . . . . . . . . . . . . . . . . . 300
Настройка программы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301
Создание переключателя . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301
Доступ к значениям в переключателе . . . . . . . . . . . . . . . . . . . . . 303
Обертка программы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303
Вернемся к программе «Сумасшедший сказочник» . . . . . . . . . . . . . . . . . 303
Импорт модуля tkinter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303
Метод-конструктор класса Application . . . . . . . . . . . . . . . . . . . . . 304
Метод create_widgets() класса Application . . . . . . . . . . . . . . . . . . 304
Метод tell_story() класса Application . . . . . . . . . . . . . . . . . . . . . . . 305
Основная часть программы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 306
Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 307
Глава 11. Графика. Игра «Паника в пиццерии» . . . . . . . . . . . . . . . . 308
Знакомство с игрой «Паника в пиццерии» . . . . . . . . . . . . . . . . . . . . . . . 308
Знакомство с пакетами pygame и livewires . . . . . . . . . . . . . . . . . . . . . . . 308
Создание графического окна . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310
Знакомство с программой «Новое графическое окно» . . . . . . . . . 310
Импорт модуля games . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311
Оглавление 21
Инициализация графического экрана . . . . . . . . . . . . . . . . . . . . . 312
Запуск основного цикла . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312
Назначение фоновой картинки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313
Знакомство с программой «Фоновая картинка» . . . . . . . . . . . . . . 313
Загрузка изображения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313
Установка фона . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315
Что такое система координат графики . . . . . . . . . . . . . . . . . . . . . . . . . . 315
Отображение спрайта . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315
Знакомство с программой «Спрайт-пицца» . . . . . . . . . . . . . . . . . 317
Загрузка изображения для спрайта . . . . . . . . . . . . . . . . . . . . . . . 318
Создание спрайта . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318
Добавление спрайта на экран . . . . . . . . . . . . . . . . . . . . . . . . . . . 319
Отображение текста . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320
Знакомство с программой «Ничего себе результат!» . . . . . . . . . . 320
Импорт модуля color . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321
Создание объекта Text . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322
Добавление объекта Text на экран . . . . . . . . . . . . . . . . . . . . . . . 322
Вывод сообщения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323
Знакомство с программой «Победа» . . . . . . . . . . . . . . . . . . . . . . 323
Импорт модуля color . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324
Создание объекта Message . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324
Ширина и высота графического экрана . . . . . . . . . . . . . . . . . . . . 325
Добавление объекта Message на экран . . . . . . . . . . . . . . . . . . . . 325
Подвижные спрайты . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325
Знакомство с программой «Летающая пицца» . . . . . . . . . . . . . . . 326
Настройка скорости движения спрайта . . . . . . . . . . . . . . . . . . . . 327
Учет границ экрана . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327
Программа «Скачущая пицца» . . . . . . . . . . . . . . . . . . . . . . . . . . 327
Настройка программы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328
Создание подкласса Sprite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328
Переопределение метода update() . . . . . . . . . . . . . . . . . . . . . . . 329
Обертка программы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329
Обработка ввода с помощью мыши . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330
Знакомство с программой «Подвижная сковорода» . . . . . . . . . . . 330
Настройка программы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330
Чтение координат указателя . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331
Настройка видимости указателя . . . . . . . . . . . . . . . . . . . . . . . . . 332
22 Оглавление
Перенаправление ввода в графическое окно . . . . . . . . . . . . . . . . 332
Обертка программы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332
Регистрация столкновений . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333
Знакомство с программой «Ускользающая пицца» . . . . . . . . . . . . 333
Настройка программы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333
Регистрация столкновений . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335
Обработка столкновений . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335
Обертка программы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335
Вернемся к игре «Паника в пиццерии» . . . . . . . . . . . . . . . . . . . . . . . . . . 336
Настройка программы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336
Класс Pan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336
Класс Pizza . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 338
Класс Chef . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340
Функция main() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 341
Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342
Глава 12. Звук, анимация, разработка больших программ.
Игра «Прерванный полет» . . . . . . . . . . . . . . . . . . . . . . . . . 343
Знакомство с игрой «Прерванный полет» . . . . . . . . . . . . . . . . . . . . . . . . 343
Чтение с клавиатуры . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345
Знакомство с программой «Читаю с клавиатуры» . . . . . . . . . . . . 345
Настройка программы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346
Регистрация нажатий . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346
Обертка программы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 347
Вращение спрайта . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 347
Знакомство с программой «Крутящийся спрайт» . . . . . . . . . . . . . 347
Применение свойства angle у спрайтов . . . . . . . . . . . . . . . . . . . . 349
Создание анимации . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349
Знакомство с программой «Взрыв» . . . . . . . . . . . . . . . . . . . . . . . 349
Посмотрим на картинки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 350
Настройка программы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 350
Создание списка изображений . . . . . . . . . . . . . . . . . . . . . . . . . . 351
Создание анимированного объекта . . . . . . . . . . . . . . . . . . . . . . . 352
Работа со звуком и музыкой . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 352
Знакомство с программой «Звук и музыка» . . . . . . . . . . . . . . . . . 352
Работа со звуком . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353
Работа с музыкой . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355
Обертка программы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357
Оглавление 23
Разработка игры «Прерванный полет» . . . . . . . . . . . . . . . . . . . . . . . . . . 357
Функциональность игры . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357
Классы игры . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 358
Медиаресурсы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 358
Создание астероидов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 358
Программа «Прерванный полет — 1» . . . . . . . . . . . . . . . . . . . . . 359
Настройка программы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359
Класс Asteroid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360
Функция main() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 361
Вращение корабля . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 361
Программа «Прерванный полет — 2» . . . . . . . . . . . . . . . . . . . . . 361
Класс Ship . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362
Инстанцирование класса Ship . . . . . . . . . . . . . . . . . . . . . . . . . . . 362
Движение корабля . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363
Программа «Прерванный полет — 3» . . . . . . . . . . . . . . . . . . . . . 363
Импорт модуля math . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 364
Добавление переменной и константы в класс Ship . . . . . . . . . . . 364
Изменение метода update() объекта Ship . . . . . . . . . . . . . . . . . . . 364
Стрельба ракетами . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365
Программа «Прерванн