Разработка консольной компьютерной игры на внеурочных занятиях по программированию

Организация внеклассной работы в кружке по программированию для обучающихся 14-17 лет


Фомин Андрей Томасович, учитель информатики и физики, МБОУ гимназия №14 им. Ю.А. Гагарина, г. Ейск, Краснодарский край


Программист не играет в игры, он — создает их.

Кто из нас не играл в компьютерные игры? Для кого-то компьютерная игра просто хобби, кто-то использует компьютерные игры для веселого время препровождения, чтобы отвлечься и расслабиться, а кто-то использует игры для обучения — и это мы, учителя!

В этой статье я хочу поделиться своим опытом организации внеурочной деятельности обучающихся по созданию консольной компьютерной игры — как большого проекта, который может быть реализован в работе школьного кружка по программированию.

На мой взгляд, успешная завершаемость проекта складывается из трех факторов. Первый, и самый главный из них, это то, что требуется от любого разработчика — хорошие знания программирования и математических основ информатики. Второй фактор — разумные временные рамки проекта. Поддержка мотивации на должном уровне требует осязаемости текущих и перспективных результатов работы. Третий фактор — умение и желание работать в команде. И это, пожалуй, самое «слабое звено». Создать дружественную атмосферу сотрудничества — непростая задача для педагога.

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

Началом работы над проектом является целеполагание: выбор игры и стратегии реализации. И здесь я «ставку делаю» на консольные игры, т.е. на игры, в которых результаты работы приложения выводятся в текстовой консоли, на экране монитора. Преимуществом такого подходя является то, что для подобных игр не нужна сложная реализация графических интерфейсов (что может значительно увеличить трудоемкость и временные рамки проектной работы), а выбор игры будет зависеть только от уровня развития обучающихся. Младшие школьники могут создавать очень простые игры, без вспомогательных алгоритмов (в пределах главной функции программы). Программы этих игр не обязательно разбивать на подзадачи. Примерами являются программы «Тест по таблице умножения» (и прочие тесты), «Угадай число», игра в кости и даже примитивная реализация «Крестики-нолики».

Консольное программирование способно оттачивать важные умения как из школьной программы, так и получать навыки известных профессиональных техник программирования, не отвлекаясь при этом на технически более сложные вещи, такие как работа с БД, сетью или API операционной системы. Однако работа с консольным приложением может стать и отправной точкой для развития нового проекта, уже с оконным интерфейсом (как следующего этапа развития), так как многие разработанные учащимися программные модули могут быть применены в новом приложении «как есть» или с минимальными «затратами».

На этапе планирования нашей совместной с учащимися работы над проектом становится понятным, что большие задачи проще решать, если их разбить на несколько подзадач. Проявляется необходимость знакомства с различными стилями программирования. Учащиеся переходят в своем развитии «на уровень вверх» и начинают знакомиться с процедурным программированием, а наиболее мотивированные воспитанники могут применять и объектно-ориентированный подход. Программа «Морской бой», которую мы разрабатываем с учащимися старших классов, требует именно такого подхода в разработке.

Следующим этапом является рассмотрение теоретических основ игровой стратегии. Строится упрощенная блок-схема будущей игры. Определяются основные компоненты будущего приложения, которые позволят связать все функции в единое целое. Затем выделяются модули, которые должны разрабатываться в виде отдельных алгоритмов (подзадач). Поскольку подзадачи могут иметь различную сложность, они могут решаться как индивидуально, так и в группах. На заключительном этапе разрабатывается главный модуль программы, который тоже можно разрабатывать коллективно.

Замес из разных стилей не помешает коллективному творчеству в составлении программы, в которой определенные её части могут быть реализованы с применением различных подходов. Используемый нами язык программирования C++ позволяет это сделать с максимальным комфортом.

Классическая версия игры «Морской бой» — это игра для двух участников, в которой игроки по очереди называют координаты на неизвестной им карте соперника. Если у соперника по этим координатам имеется корабль (координаты заняты), то корабль или его часть «топится», а выполнивший точное попадание получает право сделать ещё один ход. Цель игрока — первым потопить все корабли противника.

В нашей версии противником является — компьютер, который должен самостоятельно расставить корабли на своей виртуальной карте (скрытой от игрока), перехватывать инициативу и осуществлять очередной ход. При этом игрок вручную вводит координаты кораблей, расставляя их на своей карте согласно правилам, а также вводит координаты очередного хода (или выстрела).

Игровое поле представляет собой квадрат размером 10х10 (рис. 1).

Рис.1_ Возможный вид карты игрока

На этом поле размещаются корабли:

  • 1 корабль — ряд из 4 клеток («четырёхпалубный»; линкор)
  • 2 корабля — ряд из 3 клеток («трёхпалубные»; крейсера)
  • 3 корабля — ряд из 2 клеток («двухпалубные»; эсминцы)
  • 4 корабля — 1 клетка («однопалубные»; торпедные катера)

Всего на поле в этой версии игры будет занято ровно 20 клеток.

В разрабатываемой нами программе можно условно выделить 10 модулей:

  1. Размещение судов на карте;
  2. Создание карты компьютера;
  3. Создание карты игрока;
  4. Инициализация карт компьютера и игрока;
  5. Вывод карты игрока;
  6. Вывод карты компьютера;
  7. Морская баталия;
  8. Выстрел игрока;
  9. Выстрел компьютера;
  10. Работа с координатной плоскостью.

Каждый из этих модулей — это отдельная подзадача, которую можно решать индивидуально, коллективно или в подгруппах. Результат работы каждого модуля можно визуализировать в консольном окне. Возможная реализация оконного интерфейса консольного приложения игры «Морской бой», показаны на рис. 2 и 3.

После того, как программа будет разработана и протестирована (а это является немаловажной частью проектной работы), можно провести обсуждение «узких» мест готового продукта на предмет их совершенствования. Необходимо дать возможность ребятам предложить свои идеи по изменению программного кода.

Вероятно, в процессе обсуждения появятся новые версии игры «Морского боя». Например, можно предложить ребятам добавить на карту мину или несколько мин, определив соответствующие правила при попадании корабля на мину. Или же увеличить размер поля, скажем, до 25 или 30 «клеток», что может одновременно увеличить размер и число кораблей. Также могут быть добавлены диагональная ориентация кораблей или еще один участник — подводная лодка.

Несложно заметить, что в начальном замысле программы победителем гарантированно будет человек. Дело в том, что компьютеру (в этой версии программы) не хватает «интеллекта», чтобы сражаться с игроком. Выстрел, который делает компьютер — это случайный набор координат (используется генератор случайных чисел). Следовательно, компьютер не может выделить область вокруг поражаемых клеток, не может осуществить возможный «прострел» на выявление многопалубного корабля и т.д. Наконец, не учитывается существующая выигрышная стратегия в классическом «Морском бое». Решения этих интересных задач можно предложить ученикам на следующем этапе разработки ПО.

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

 

Литература:

  • Доусон М. Изучаем С++ через программирование игр. — СПб.: Питер, 2016
  • Костюк Ю.Л. Основы разработки алгоритмов: учебное пособие/Ю.Л. Костюк, И.Л. Фукс. — М.Ж БИНОМ. Лаборатория знаний, 2010. — 286 с.
  • Подготовка школьников к олимпиадам по информатике с использованием веб-сайта: учебно-методическое пособие для учащихся 7-11 классов./А.В. Алексеев, С.Н. Беляев. – Ханты-Мансийск: РИО ИРО, 2008
  • У. Сэнд, К. Сэнд Hello World! Занимательное программирование. — СПб.: Питер, 2016. (Серия «Вы и ваш ребенок»)