Обучение программированию в процессе профессиональной подготовки будущих учителей информатики часто бывает сопряжено с проблемой повышения мотивации студентов к изучению дисциплины. Для успешного освоения необходима постоянная практика и решение нетривиальных задач, однако традиционно в процессе обучения программированию предлагаются разрозненные задачи, не связанные между собой какими-либо общими целями (помимо непосредственно изучения программирования). Подобные задачи в целом, как показывает практика, могут быть успешно использованы в учебном процессе, однако замотивировать студентов на повторное обращение к ним (например, с целью доработки, развития и т. п.) может быть затруднено из-за неясности конечной цели.
Одним из способов повышения мотивации студентов к изучению программирования является использование элементов компьютерных игр в качестве учебных примеров или лабораторных работ. Это также позволяет решить и некоторые другие задачи, например, наглядно показать практическую применимость алгоритмов, изучаемых в рамках других дисциплин [1].
Основные свойства учебных задач, основанных на элементах компьютерных игр, включают междисциплинарность, выразительность, а также возможность дальнейшей доработки элементов с целью создания полноценной компьютерной игры, если у учащихся возникнет такое желание. Это позволяет в определённой степени мотивировать студентов на изучение и иных дисциплин.
На примере процесса разработки игровой программы в процессе обучения могут быть продемонстрированы основные подходы и алгоритмы, применяемые также в процессе создания произвольного программного обеспечения. Это также включает в себя проектную деятельность [2, 3], использование средств взаимодействия между разработчиками (включая системы управления версиями, такие, как git), а также тестирование и отладку.
Лабораторные и практические задания, связанные с элементами компьютерных игр, предполагают наличие у учащихся уже сформированного представления как об изучаемом языке программирования, так и о программировании в целом, т. е. не предполагается использование таких заданий в рамках базового курса. Однако некоторые уже пройденные темы могут быть повторно рассмотрены в целях закрепления материала, уже в контексте практического применения полученных знаний.
Рассмотрим несколько тем, которые могут быть использованы в качестве основы для лабораторных и практических заданий. Каждая тема предполагает разработку программы, предоставляющей базовые средства для отображения графики и обработки ввода. Используемые для этого средства зависят от изучаемого языка программирования и операционной системы, например, для языка C++ это может быть библиотека SDL2 или SDL3, а для Python — tkinter.
Первая из предлагаемых тем предполагает разработку основы для игровой программы, которая подразумевает сравнительно простую логику перемещения графических объектов по экрану. Один из объектов должен быть управляемым (предполагается реализация опроса устройств ввода, например, клавиатуры, джойстика, мыши или иных манипуляторов), с перемещением его непосредственно в заданном направлении с постоянной скоростью. Т.е. изначально на экране демонстрируется некоторый простой объект (прямоугольник или иной примитив, не требующий значительных усилий для отрисовки), затем в программу добавляется логика управления этим объектом, а также задаются ограничения, чтобы объект не покидал заданную область на экране. Следом добавляются другие, неуправляемые объекты, от которых либо предполагается уклоняться, либо, наоборот, перехватывать. Далее следует рассмотреть добавление каких-либо объектов фона, элементов графического оформления (растровые или векторные изображения вместо простых примитивов) и спецэффектов.
Таким образом, в рамках данной темы предполагается изучение структуры основного цикла игровой программы, организации неблокирующего ввода, базовой работы с графикой.
Вторая предлагаемая тема предполагает разработку основы для компьютерной игры в жанре гоночной аркады. В рамках этой темы предполагается изучение структур данных, позволяющих в удобной форме хранить конфигурацию «дороги» (в простейшем случае — список, содержащий длины отрезков и направление/крутизну поворота), а также способов использования этих данных. При выполнении работы по этой теме предполагается сначала изобразить вид фрагмента хранимой «дороги», к которому необходимо применить математическое преобразование, создающее эффект перспективы (предполагается, что в процессе выполнения работы на данном этапе не используются никакие API для реализации трёхмерной графики). Далее следует добавить возможность движения «вперёд», при этом эффект перспективы должен по-прежнему соблюдаться. Для изображения поворотов также применяются математические преобразования. Впоследствии добавляется управляемое пользователем изображение «автомобиля», перемещение которого на экране должно быть соответствующим образом ограничено.
Третья предлагаемая тема предполагает разработку программы, демонстрирующей алгоритм «бросания лучей» (ray casting). Вначале учащиеся должны каким-либо образом задать конфигурацию лабиринта — в простейшем случае он задаётся на прямоугольной сетке, что предполагает хранение его в памяти в виде двумерного массива. Эта конфигурация может быть изображена на экране с помощью примитивов. Затем в программу добавляется сущность «наблюдателя», управляемого пользователем. Задаётся логика для его перемещения внутри лабиринта, с учётом невозможности перемещения по ячейкам, отмеченных в конфигурации лабиринта как «стена». Реализуется алгоритм «бросания лучей» и отображение его результатов на экране. При выполнении данной работы сущности «карта», «наблюдатель» и т. п. могут быть оформлены в виде классов.
Примеры программного кода, демонстрирующие предлагаемые темы, размещены в репозиториях по адресам:
·
https://gitflic.ru/project/evilunyuu/game-programming-examples-2026-python·
https://gitflic.ru/project/evilunyuu/game-programming-examples-2026-cppВ этих репозиториях располагаются проекты программ, соответствующие рассмотренным в данной статье темам для лабораторных работ, на двух языках программирования — Python и C++ соответственно.
Внедрение данных тем в учебный процесс в рамках дисциплины «Программирование» позволило отметить повышение мотивации к выполнению заданий по сравнению с «классическими» типами задач.
Литература:1. Алексеевский, П. И. Использование компонентов компьютерных игр при обучении программированию / П. И. Алексеевский // Ученые записки ИИО РАО. – 2009. – № 30-2. – С. 181-183. – EDN MUMRZN.
2. Царик, С. В. Компьютерная игра как объект проектирования в проектном методе обучения программированию / С. В. Царик // Веб-программирование и интернет-технологии WebConf2018 : тезисы докладов 4-й Международной научно-практической конференции, Минск, 14–18 мая 2018 года. – Минск: Белорусский государственный университет, 2018. – С. 81. – EDN XMVMLR.
3. Шабалина, О. А. Обучение разработчиков программного обеспечения: применение компьютерных игр и процесса их разработки / О. А. Шабалина, А. В. Катаев, П. Н. Воробкалов // Известия Волгоградского государственного технического университета. – 2010. – № 11(71). – С. 117-124. – EDN PANQTL.