Уроки веселого программирования
Н.В. Софронова, профессор Чувашского республиканского института образования
В существующих стандартах образовательного курса информатики значение уроков программирования все более уменьшается. Вместе с тем формирование алгоритмического стиля мышления, на что направлены упражнения по программированию, является одной из приоритетных задач базового курса информатики. Мы предлагаем упражнения, которые позволяют обучать программированию, находясь в приложениях Windows. Все упражнения легки в реализации, результат имеет игровой характер. Идея заданий заключается в интеграции технологии создания макросов с использованием элементов Visual Basic for Applications.
Задание 1. Создать анимационную картинку фейерверка
Выполнение. Задание удобно выполнять в Microsoft Word. Вспышки фейерверка — это автофигуры. Они окрашены в разные цвета. Создайте несколько вспышек, перейдите в режим записи макроса и подвиньте все фигуры в разные стороны (желательно по диагонали). У вас получится следующий макрос (имена автофигур и параметры могут быть другие):
ActiveDocument.Shapes(«AutoShape 5»).Select
Selection.ShapeRange.IncrementLeft -36#
Selection.ShapeRange.IncrementTop 9#
ActiveDocument.Shapes(«AutoShape 8»).Select
Selection.ShapeRange.IncrementLeft 54#
Selection.ShapeRange.IncrementTop -27#
ActiveDocument.Shapes(«AutoShape 11»).Select
Selection.ShapeRange.IncrementLeft 45#
Selection.ShapeRange.IncrementTop 45#
ActiveDocument.Shapes(«AutoShape 9»).Select
Selection.ShapeRange.IncrementLeft 18#
Selection.ShapeRange.IncrementTop -36#
ActiveDocument.Shapes(«AutoShape 7»).Select
Selection.ShapeRange.IncrementTop -36#
ActiveDocument.Shapes(«AutoShape 10»).Select
Selection.ShapeRange.IncrementLeft 63#
Selection.ShapeRange.IncrementTop 18#
ActiveDocument.Shapes(«AutoShape 6»).Select
Selection.ShapeRange.IncrementLeft 18#
Selection.ShapeRange.IncrementTop 27#
Поставьте элемент управления Visual Basic кнопку и после перехода в режим сценариев вставьте (через буфер) макрос перемещения вспышек. Чтобы вспышки перемещались случайным образом, можно задать два случайных числа и поменять параметры макроса на эти случайные числа. У вас получится линейная программа, которая перемещает вспышки при каждом нажатии на клавишу:
Private Sub CommandButton1_Click()
Randomize
n = Int(Cos(Rnd * 100) * 10)
k = Int(Cos(Rnd * 100) * 10)
ActiveDocument.Shapes(«AutoShape 5»).Select
Selection.ShapeRange.IncrementLeft -n
Selection.ShapeRange.IncrementTop k
ActiveDocument.Shapes(«AutoShape 8»).Select
Selection.ShapeRange.IncrementLeft n
Selection.ShapeRange.IncrementTop -k
ActiveDocument.Shapes(«AutoShape 11»).Select
Selection.ShapeRange.IncrementLeft n
Selection.ShapeRange.IncrementTop k
ActiveDocument.Shapes(«AutoShape 9»).Select
Selection.ShapeRange.IncrementLeft n
Selection.ShapeRange.IncrementTop -k
ActiveDocument.Shapes(«AutoShape 7»).Select
Selection.ShapeRange.IncrementLeft k
Selection.ShapeRange.IncrementTop -n
ActiveDocument.Shapes(«AutoShape10»).Select
Selection.ShapeRange.IncrementLeft n
Selection.ShapeRange.IncrementTop k
ActiveDocument.Shapes(«AutoShape 6»).Select
Selection.ShapeRange.IncrementLeft n
Selection.ShapeRange.IncrementTop k
End Sub
Задание 2. Придумайте и создайте фрагмент мультфильма.
Выполнение. В этом задании требуется на каком-либо рисунке создать анимацию, имеющую сходство с реальностью. Например, взлетает ракета, растет цветок, бежит кошка, на елке вспыхивают гирлянды и пр. Приведем пример проезжающей мимо дома машины. Чтобы анимацию можно было повторить несколько раз (поиграть), установим кнопки «Поехали» и «Обратно». Как и в первом примере, перемещение создается в виде макроса, затем коды макроса вставляют в процедуру нажатия кнопок.
Private Sub CommandButton2_Click()
ActiveDocument.Shapes(«Group 22»).Select
Selection.ShapeRange.IncrementLeft 218
End Sub
Private Sub CommandButton3_Click()
ActiveDocument.Shapes(«Group 22»).Select
Selection.ShapeRange.IncrementLeft -218
End Sub
Задание 3. Собрать картинку.
Выполнение. Выполнение задания надо начать с загрузки в Paint интересной картинки. Можно картинку нарисовать самим. В Word надо вставлять (через буфер) фрагмент вырезанной картинки.
Фрагменты из буфера обычно вставляются в формате текста, сделайте их графическими (формат — рисунок — положение — вокруг рамки), чтобы их можно было перемещать. Создайте макрос, который соберет картинку из фрагментов. Еще один макрос пусть разбирает картинку. Первый макрос вставьте в процедуру кнопки «Собрать», а второй — «Разобрать». (Если координаты изменяются на противоположные не совсем точно, их надо подправить вручную.)
Private Sub CommandButton4_Click()
ActiveDocument.Shapes(«Picture 41»).Select
Selection.ShapeRange.IncrementLeft -72#
ActiveDocument.Shapes(«Picture 42»).Select
Selection.ShapeRange.IncrementLeft -333#
Selection.ShapeRange.IncrementTop 90#
End Sub
Private Sub CommandButton5_Click()
ActiveDocument.Shapes(«Picture 41»).Select
Selection.ShapeRange.IncrementLeft 72#
ActiveDocument.Shapes(«Picture 42»).Select
Selection.ShapeRange.IncrementLeft 333#
Selection.ShapeRange.IncrementTop -90#
End Sub
Задание 4. Создайте анимационную картинку с вращающимися частями.
Выполнение. Вращаться могут часы, мячики, колеса велосипеда и пр. Создадим картинку, на которой будет изображена мельница с вращающимися лопастями. Мельницу можно найти как готовый рисунок, можно условно нарисовать самим. Лопасти мельницы создадим из элементов автофигуры (в разделе «Блок-схема»), раскрасим их и объединим в одну фигуру (для этого надо выделить все части, удерживая Shift, затем выбрать «действия — группировать»).
Создадим макрос, который поворачивает лопасти мельницы на небольшой угол. В процедуру кнопки «Крутить» вставим (через буфер) макрос вращения. Чтобы лопасти мельницы крутились долго и весело, добавим цикл:
Private Sub CommandButton6_Click()
ActiveDocument.Shapes («Group 79»).Select
For i = 1 To 100
Selection.ShapeRange.IncrementRotation 20
Next i
End Sub
Задание 5. Создайте модель «Аквариум».
Выполнение. Модель — это значит упрощенное отражение реального мира. Степень упрощения зависит от уровня программистских навыков: чем они выше, тем меньше степень упрощения. Простейший вариант: рыбки плывут в одном направлении. Но так они долго плыть не могут, поскольку пространство аквариума ограничено, повернем их в противоположную сторону, и пусть они плывут дальше (обычно рыбки в аквариуме так и плавают). Чтобы картинка смотрелась веселее, поместим не одну, а четырех рыбок. Рыбки и фон из водорослей нарисованы в редакторе Paint (для простоты мы одну и ту же рыбку раскрасили по-разному и повернули слева направо).
Предварительно было создано два макроса: перемещения рыбок по горизонтали и второй макрос — поворот рыбки (панель рисования — действия — повернуть/отразить — отразить слева направо). При нажатии на кнопку «Движение» рыбки плывут сначала навстречу друг другу с разной скоростью (первый цикл), затем дружно поворачиваются и плывут в противоположную сторону (второй цикл). Доплыв до границы аквариума, они вновь меняют направление движения на противоположный.
Рыбки двигаются навстречу друг другу:
Private Sub CommandButton7_Click()
For i = 1 To 70
ActiveDocument.Shapes(«Picture 90»).Select
Selection.ShapeRange.IncrementLeft 7
ActiveDocument.Shapes(«Picture 91»).Select
Selection.ShapeRange.IncrementLeft -5
ActiveDocument.Shapes(«Picture 88»).Select
Selection.ShapeRange.IncrementLeft -7
ActiveDocument.Shapes(«Picture 89»).Select
Selection.ShapeRange.IncrementLeft 5
Next i
Поворот рыбок:
ActiveDocument.Shapes(«Picture 90»).Select
Selection.ShapeRange.Flip msoFlipHorizontal
ActiveDocument.Shapes(«Picture 91»).Select
Selection.ShapeRange.Flip msoFlipHorizontal
ActiveDocument.Shapes(«Picture 88»).Select
Selection.ShapeRange.Flip msoFlipHorizontal
ActiveDocument.Shapes(«Picture 89»).Select
Selection.ShapeRange.Flip msoFlipHorizontal
For i = 1 To 70
Рыбки поплыли в другую сторону:
ActiveDocument.Shapes(«Picture 90»).Select
Selection.ShapeRange.IncrementLeft -7
ActiveDocument.Shapes(«Picture 91»).Select
Selection.ShapeRange.IncrementLeft 5
ActiveDocument.Shapes(«Picture 88»).Select
Selection.ShapeRange.IncrementLeft 7
ActiveDocument.Shapes(«Picture 89»).Select
Selection.ShapeRange.IncrementLeft -5
Next i
Поворот рыбок:
ActiveDocument.Shapes(«Picture 90»).Select
Selection.ShapeRange.Flip msoFlipHorizontal
ActiveDocument.Shapes(«Picture 91»).Select
Selection.ShapeRange.Flip msoFlipHorizontal
ActiveDocument.Shapes(«Picture 88»).Select
Selection.ShapeRange.Flip msoFlipHorizontal
ActiveDocument.Shapes(«Picture 89»).Select
Selection.ShapeRange.Flip msoFlipHorizontal
End Sub
Конечно, эту программу можно сделать короче и изящнее. Нет предела совершенству (к сожалению, VBA очень плохо работает с графикой в цикле).
Задание 6. Создание кроссворда.
Выполнение. Это задание лучше выполнять в Excel. В этом упражнении нет ни макросов, ни графики. Однако, на наш взгляд, это задание тоже можно отнести к веселому программированию, поскольку в нем необходимо придумать кроссворд, которым затем можно обмениваться с приятелями.
Выполнение начинается с придумывания кроссворда. Вообще говоря, не обязательно ограничивать детей областью информатики, пусть проявят свою эрудицию. После того, как кроссворд создан на бумаге, его нужно нарисовать в Excel, установить кнопку «Проверка» и написать программку, которая проверяет содержимое ячеек. Чтобы программка была короче, можно проверять правильность решения кроссворда не по буквам, а по ключевому слову (в нашем случае, по вертикали должно получиться слово «модем»).
Private Sub CommandButton1_Click()
If Range(«G2») = «м» And Range(«G3») = «о» And Range(«G4») = «д» And Range(«G5») = «е» And Range(«G6») = «м» Then MsgBox («Все верно! Молодец!») Else MsgBox («Ты сделал ошибку»)
End Sub
Эта программа отличается от приведенных выше тем, что содержит оператор условного перехода, процедуру вывода сообщений MsgBox() и логическую операцию and. Краткость и простота структуры программы делают упражнение довольно легким в исполнении, а возможность творческой реализации — привлекательным для детей.
Приведенные примеры хороши именно тем, что в них легкость исполнения сочетается с творческим подходом.