Занятие «Рекурсия. Основы работы с PyGame»

Практики реализации дистанционного обучения - Программирование
Печать

Представленный педагогом опыт актуален для занятий по программам технической направленности, связанными с обучением компьютерным технологиям. Материал предназначен для уверенных пользователей, владеющих основами компьютерной грамотности.

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

Занятие сочетает теорию и практику, причем освоение теоретического материала позволяет обучающимся реализовать полученные знания на практике.

Взаимодействие с обучающимися происходит с помощью Google-сервисов, ресурсов Интернета и социальной сети «ВКонтакте», ссылки на которые представлены в конспекте занятия.


Название объединения: «Азы программирование» 
Год обучения: 2
Тема занятия: «Рекурсия. Основы работы с Pygame»


Цель занятия

• Изучение рекурсивной функции как необходимого механизма программирования;
• Решение задач с помощью рекурсии;
• Освоение инструментария платформера Pygame для создания игр;
• Установка PyGame.

План занятия

Теория.
1. Рекурсия.
2. Задача «Числа Фибоначчи».
3. PyGame. Что такое PyGame?

Практика.
1. Установка PyGame.
2. Создание шаблона PyGame.
3. Инструментарий PyGame.


Теория

Полный конспект занятия опубликован по ссылке: https://vk.com/@prog_spbcdtt-2-god-obucheniya-rekursiya-osnovy-raboty-s-pygame

1. Рекурсия
Прием вызова функцией самой себя называется рекурсией, а сама функция называется рекурсивной.
Рекурсивные функции являются мощным механизмом в программировании. К сожалению, они не всегда эффективны. Также часто использование рекурсии приводит к ошибкам. Наиболее распространенная из таких ошибок – бесконечная рекурсия, когда цепочка вызовов функций никогда не завершается и продолжается, пока не кончится свободная память в компьютере. Пример бесконечной рекурсии приведен в эпиграфе к этому разделу. Две наиболее распространенные причины для бесконечной рекурсии:
• Неправильное оформление выхода из рекурсии.
• Рекурсивный вызов с неправильными параметрами.
Поэтому при разработке рекурсивной функции необходимо прежде всего оформлять условия завершения рекурсии и думать, почему рекурсия когда-либо завершит работу.

2. Задача «Числа Фибоначчи»
Чи́сла Фибона́ччи (иногда пишут Фибона́чи) — элементы числовой последовательности 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946, 17711, … в которой первые два числа равны либо 1 и 1, либо 0 и 1, а каждое последующее число равно сумме двух предыдущих чисел. Названы в честь средневекового математика Леонардо Пизанского (известного как Фибоначчи).
В данной задаче примем, что первые два числа — 1 и 1. С помощью рекурсии (это вызов функции внутри другой функции, см. выше) нужно посчитать сумму двух предыдущих чисел. n-м членом последовательности называется n-й по порядковому номеру в ряду.

3. Pygame. Что такое Pygame?
Pygame — это «игровая библиотека», набор инструментов, помогающих программистам создавать игры. В него входит?
• Графика и анимация
• Звук (включая музыку)
• Управление (мышь, клавиатура, геймпад и etc…)
Игровой цикл
В сердце каждой игры лежит цикл, который принято называть «игровым циклом». Он запускается снова и снова, делая все, чтобы работала игра. Каждый цикл в игре называется кадром.
В каждом кадре происходит масса вещей, но их можно разбить на три категории:
Обработка ввода (события)
Речь идет обо всем, что происходит вне игры — тех событиях, на которые она должна реагировать. Это могут быть нажатия клавиш на клавиатуре, клики мышью и так далее.
Обновление игры
Изменение всего, что должно измениться в течение одного кадра. Если персонаж в воздухе, гравитация должна потянуть его вниз. Если два объекта встречаются на большой скорости, они должны взорваться.
Рендеринг (прорисовка)
В этом шаге все выводится на экран: фоны, персонажи, меню. Все, что игрок должен видеть, появляется на экране в нужном месте.
Время
Еще один важный аспект игрового цикла — скорость его работы. Многие наверняка знакомы с термином FPS, который расшифровывается как Frames Per Second (кадры в секунду). Он указывает на то, сколько раз цикл должен повториться за одну секунду. Это важно, чтобы игра не была слишком медленной или быстрой. Важно и то, чтобы игра не работала с разной скоростью на разных ПК. Если персонажу необходимо 10 секунд на то, чтобы пересечь экран, эти 10 секунд должны быть неизменными для всех компьютеров.


Практика

1. Установка PyGame
Я рекомендую поставить среду программирования PyCharm. Как поставить и его использовать описано в этом видео: https://www.youtube.com/watch?v=uWLwvhbbEe4 Среда программирования является свободным и бесплатным ПО (community version).
После этого необходимо поставить библиотеку. Установка библиотеки описана в инструкции в следующем видео: https://www.youtube.com/watch?v=lEJeiGmXInE

2. Создание шаблона Pygame
Перейдём к созданию самой базовой вещи.
Для начала напишем программу, которая всего лишь открывает окно и запускает игровой цикл. Это отправная точка для любого проекта pygame.
В начале программы нужно импортировать необходимые библиотеки и задать базовые переменные настроек игры.
Программу смотри по ссылке https://vk.com/@prog_spbcdtt-2-god-obucheniya-rekursiya-osnovy-raboty-s-pygame

3. Инструментарий Pygame
Рендеринг (отрисовка)
Начнем с раздела отрисовки. Персонажей пока нет, поэтому экран можно заполнить сплошным цветом. Чтобы сделать это, нужно разобраться, как компьютер обрабатывает цвета. Экраны компьютеров сделаны из пикселей, каждый из которых содержит 3 элемента: красный, зеленый и синий. Цвет пикселя определяется тем, как горит каждый из элементов. Каждый из трех основных цветов может иметь значение от 0 (выключен) до 255 (включен на 100%), так что для каждого элемента есть 256 вариантов. Если нужно нарисовать на экране много всего, это займет много времени. Исправить это можно оригинальным способом, который называется — двойная буферизация. Звучит необычно, но вот что это такое.
Представьте, что у вас есть двусторонняя доска, которую можно поворачивать, показывая то одну, то вторую сторону. Одна будет дисплеем (то, что видит игрок), а вторая — оставаться скрытой, ее сможет «видеть» только компьютер. С каждым кадром рендеринг будет происходить на задней части доски. Когда отрисовка завершается, доска поворачивается и ее содержимое демонстрируется игроку. А это значит, что процесс отрисовки происходит один раз за кадр, а не при добавлении каждого элемента. В pygame это происходит автоматически. Нужно всего лишь сказать доске, чтобы она перевернулась, когда отрисовка завершена.
Ввод (события)
Игры еще нет, поэтому пока сложно сказать, какие кнопки или другие элементы управления понадобятся. Но нужно настроить одно важное событие. Если попытаться запустить программу сейчас, то станет понятно, что нет возможности закрыть окно. Нажать на крестик в верхнем углу недостаточно. Это тоже событие, и необходимо сообщить программе, чтобы она считала его и, соответственно, закрыла игру.
События происходят постоянно. Что, если игрок нажимает кнопку прыжка во время отрисовки? Это нельзя игнорировать, иначе игрок будет разочарован. Для этого pygame сохраняет все события, произошедшие с момента последнего кадра. Даже если игрок будет лупить по кнопкам, вы не пропустите ни одну из них. Создается список, и с помощью цикла for можно пройтись по всем из них.
Контроль FPS
Нужно убедиться, что настройка FPS контролирует скорость игры. Наконец, нужно убедиться, что когда игровой цикл завершается, окно игры закрывается. Теперь запустите этот файл и проверьте, что он работает. Должно появиться окно, залитое фоном и которое можно будет закрыть. Сохраните этот файл с каким-нибудь понятным именем. На основе него будут реализовываться следующие итерации.

Код нужно загрузить в папку выполненных заданий. Файл должен называться в виде фамилии.