Цель: Повышение мотивации у обучающихся 1 курса к изучению программирования через выполнение на практике небольшого проекта по разработке игры средствами VBA.

Задачи мероприятия:

Образовательные:

  • Обучить конкретным навыкам и способам достижения намеченных результатов.
  • Сформировать мотивацию в освоении и применении профессиональных навыков.

Развивающие:

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

Воспитательные:

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

Методы мероприятия:

  • Практические (рассмотрение проблемных ситуаций, опыт).
  • Наглядные (иллюстрация, демонстрация).
  • Словесный (дискуссия).
  • Поисковые.

Оснащение мероприятия: Персональные компьютеры обучающихся, имеющие подключение к сети Интернет, оснащенные пакетом прикладных программ MS Office, проектор и мультимедийная доска.

Формы обучения: Групповая, индивидуальная, самостоятельная работа обучающихся.

Ожидаемые результаты:

  • Участники мастер-класса получат знания о нестандартных возможностях табличного процессора MS Excel.
  • Мотивация участников мастер-класса к творческой деятельности при изучении программирования.
  • Повышение интереса к специальности 09.02.07 Информационные системы и программирование.

ХОД МЕРОПРИЯТИЯ

1. ОРГАНИЗАЦИОННЫЙ МОМЕНТ (2 мин.)

Развлекая - поучай. (Гораций)

Если вы уже имели какой-то опыт программирования или никогда не программировали игр, то никогда не поздно начать этот весьма увлекательный процесс. Всё, что нам потребуется - это Excel (любой версии) и 15-20 минут времени для начала.

Тренироваться будем на известной в узких кругах программистов игре "Жизнь" (Life). Её придумал британский математикДжон Конвей: еще в 1970 году на основе работ легендарногоДжона фон Неймана: - прадедушки всех современных компьютеров. Если вы не сталкивались с ней раньше - не проблема, правила можно объяснить за полминуты.

2. Мотивация к учебной деятельности (3 мин.)

  1. Игра идет на большом (иногда даже бесконечном) поле в клеточку ("вселенной"). Как вы понимаете, Excel для такого подходит идеально :)
  2. В один момент времени каждая клетка может быть в двух состояниях -живой(обозначим её каким-нибудь значком или просто единичкой) или жемертвой(пустой). Начальное состояние всех клеток в игре называютпервым поколением.
  3. Если брать блок клеток 3х3 с текущей клеткой в середине, то вокруг неё оказывается 8 клеток-соседей. Дальнейшая судьба клетки зависит от того, сколько именно живых клеток (N) окажется в этой окружающей области. Вариантов несколько:
  • Если клетка была пустая (мертвая), но у нее есть ровно 3 живых соседа, то в ней зарождается жизнь.
  • Если клетка живая, но у неё меньше 2 соседей, то она умирает от одиночества.
  • Если клетка живая, но у неё больше 3 соседей, то она умирает от перенаселения.
  • Если клетка живая и у нее 2-3 соседа, то клетка продолжает жить.

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

Однако, не стоит недооценивать обманчивую простоту этой логики - количество комбинаций, сценариев игры и многообразие фигур в такой игровой вселенной поражает своим разнообразием и поистине бесконечно. В математике подобные модели называютклеточными автоматами. А самое интересное, что реализовать подобную модель можно в любой версии Excel буквально на 20 строчках кода.

3. Теоретическая часть (20 мин.)

Шаг 1. Готовим игровое пространство

Создадим в новой книге три листа:

  • game - это будет основной лист игры, где мы будем наблюдать за развитием нашей "колонии".
  • next - этот лист будет формировать следующее поколение, которое затем придет на смену текущему.
  • start - на этом листе мы будем задавать начальную конфигурацию, т.е. первое поколение в нашей игре.

На каждом листе (можно выделить их заранее, удерживая клавишуShift илиCtrl , чтобы не повторять трижды одни и те же действия), разметим игровое поле размером, допустим, 30 на 30 ячеек. Впоследствии размер поля можно будет подправить в соответствии с вашими аппетитами и мощью вашего ПК:

На листеstart разметим с помощью единичек первое поколение любым желаемым образом:

Шаг 2. Пишем макрос

Теперь пришла пора расчехлить наш VBA и написать макрос, который и будет делать всю работу, а именно:

  1. Копировать первое поколение с листаstart на листgame .
  2. Проходить по ячейкам игрового поля на листеgame и проверять окружающих соседей (блок 3х3) для каждой из них.
  3. В зависимости от результатов проверки помечать на листе следующего поколенияnext ту же ячейку как живую (1) или мертвую (пусто).
  4. Копировать получившееся новое поколение с листаnext вместо текущего на листы игрыgame .
  5. Повторять пункты 2-4 несколько раз, сменяя одно поколение другим и отображая на экране изменения в нашей "колонии".

Для начала откроем редактор Visual Basic на вкладкеРазработчик (Developer). Если такой вкладки не видно, то её нужно будет сначала отобразить черезФайл - Параметры - Настройка ленты (File - Options - Customize Ribbon), включив соответствующий флажок.

В открывшемся окне редактора создадим новый модуль с помощью команды менюInsert - Module , а затем скопируем и вставим туда код нашего макроса:

Теперь давайте разберем его построчно для понятности:

Поскольку в коде нам придется несколько раз ссылаться и много раз работать с диапазонами игрового пространства (B2:AE31) на каждом из трёх листов книги, то имеет смысл сразу оформить их как переменные. Это делается в блоке:

Set rGame = Worksheets("Game").Range("B2:AE31")
Set rStart = Worksheets("Start").Range("B2:AE31")
Set rNext = Worksheets("Next").Range("B2:AE31")

Заодно мы создаем ещё и переменнуюwNext , которая ссылается на весь лист next целиком - это нам тоже пригодится в будущем:

Set wNext = Worksheets("Next")

Затем, перед началом игры, мы должны перенести первое поколение с листаstart на листgame . Это выполняется командой прямого копирования с использованием уже созданных переменных:

rStart.Copy Destination:=rGame

Поскольку мы хотим прокрутить в нашей игре не одно, а несколько (например, 50 для начала) поколений, то дальнейшие действия заключены в цикл:

For i = 1 to 50
...
Next i

А внутри этого цикла мы, во-первых, сначала очищаем рабочее пространство на листеnext для формирования следующего поколения:

rNext.ClearContents

А, во-вторых, запускаем вложенный цикл прохода по всем ячейкам игровой вселенной на листеgame , чтобы проверить каждую из них - это реализовано циклом прохода по коллекции:

For Each cell in rGame.Cells
...
Next cell

Ссылка на очередную проверяемую ячейку будет храниться в переменной cell. Для этой ячейки нам нужно сначала построить окрестность 3х3 с ней в середине. Это выполняется с помощью конструкции:

cell.Offset(-1, -1).Resize(3, 3)

Здесь методOffset(-1,-1) виртуально сдвигает текущую проверяемую ячейку на одну строку вверх и на один столбец влево, а потом методResize(3,3) опять же виртуально растягивает эту одну ячейку до новых размеров 3 на 3:

Чтобы посчитать количество заполненных ячеек в полученной окрестности применяется функция рабочего листаСЧЁТЗ (COUNTA), которую в VBA можно вызвать с помощью объектаWorksheetFunction . Таким образом количество живых соседей в окружающей текущую ячейку области 3 на 3 мы получаем выражением (не забыв вычесть из полученного количества текущую ячейку):

n = WorksheetFunction.CountA(cell.Offset(-1, -1).Resize(3, 3)) - WorksheetFunction.CountA(cell)

Дальше нам нужно проверить полученное количество соседей и пометить на листе следующего поколения текущую ячейку как живую или мертвую, согласно правилам игры. Это выполняет блок из трёх проверок:

If cell = "" And n = 3 Then wNext.Cells(cell.Row, cell.Column) = 1
If cell = 1 And (n = 2 Or n = 3) Then wNext.Cells(cell.Row, cell.Column) = 1
If cell = 1 And (n< 2 Or n >3) Then wNext.Cells(cell.Row, cell.Column) = ""

Когда цикл прохода по ячейкам будет завершен, то сформированное следующее поколение с листа next нужно скопировать на место текущего на листе game - делаем это уже знакомой конструкцией:

rNext.Copy Destination:=rGame

Вот, собственно, и вся логика.

Осталось вернуться в Excel на листgame , запустить нашу игру через вкладкуРазработчик - Макросы (Developer - Macro) и насладиться процессом развития нашей колонии.

4. ПРАКТИЧЕСКАЯ ЧАСТЬ И ПОДВЕДЕНИЕ ИТОГОВ

Обучающиеся самостоятельно с использованием методической разработки и готового шаблона осуществляют разработку и запуск игры «Жизнь».