Создание интерактивных кроссвордов в MS Power Point с использованием VBA
Данный ресурс поможет Вам научиться составлять и воплощать в презентациях интерактивные кроссворды (естественно предметная область не имеет значения), которые очень удобно и интересно проводить с помощью проектора.
Задавшись целью сделать такой кроссворд, где после ввода слова и нажатия кнопки «ПРОВЕРИТЬ» слово должно оставаться и как-то выделяться цветом, если оно верное, иначе стираться и снова можно вводить слово.
Казалось бы, все просто: под каждую букву слова отводится отдельный Textbox и по нажатию «ПРОВЕРИТЬ» описывается процедура обработки этого Textboxа – или стирать или красить. Однако в кроссворде много пересечений слов – соответственно еще больше различных комбинаций для проверки – в общем, кода обработки боксов будет много (это мы увидим дальше)
Для исполнения выбрана среда MS PPT, с ней умеют работать практически все учителя, кроме того, имеется встроенный редактор Visual Basic (VBA), который нам и будет нужен для обработки событий
Конечно, создать такой кроссворд легко учителю информатики, но по алгоритму, изложенному ниже, это несложно сделать любому учителю.
Конечно же, есть трудности:
Самое первое – это запастись терпением - для создания одного кроссворда на 15-20 слов у меня уходить 5-6 часов (а у вас по началу может и еще больше ) т.к. приходится писать очень много кода, хотя в основном применяется копирование кода и его подправка
Второе – алгоритм одного кроссворда нельзя использовать для второго: разные слова, пересечения и т.д (т.е второй кроссворд имеет совершенно другой код и на него опять надо 5-6-7... часов
Третье – все это потом разгадается за 15-20 минут
А большой плюс в том, что можно этому научить ребят, и они столько кроссвордов сделают и по любой предметной области ...
И еще плюс – кроссворд получается «живой» (а не статический, как на бумаге)
Итак, если не пропало желание и есть время, которого не жалко, то ниже я постараюсь по шагам на конкретном примере рассмотреть алгоритм создания такого кроссворда:
(Может у кого - то есть другой, менее трудоемкий способ)
ШАГ 1
Составляем кроссворд на бумаге, это не составляет труда: чертим на тетради в клетку слова. Для примера возьмем самый простой кроссворд из 3 слов (этого вполне достаточно для уяснения алгоритма )
Например, такой:
Нарисуем вторую точно такую же таблицу (кроссворд), где буквы заменим цифрами (это будут номера наших TextBox - ов
ШАГ 2
Сейчас открываем MS PPT и создаем там такую же таблицу ( с номерами)
Берем на панели ЭЛЕМЕНТЫ УПРАВЛЕНИЯ элемент Textbox (там он называется ПОЛЕ) и помещаем его на слайд – у нас появился Textbox № 1(дальше будем его звать «бокс»), помещаем, конечно же в то место таблицы, где № 1
( При необходимости, щелкнув правой кнопкой по боксу и выбрав СВОЙСТВА, можно изменить размер и цвет шрифта)
Дальше нам надо поместить на слайд еще 13 боксов – ведь в нашем кроссворде 14 букв
Удобнее всего ухватившись правой кнопкой за бокс № 1 перетащить его на место бокса № 2 и выбрать копировать – появится бокс № 2 - и так до бокса № 14
Итак, боксы под буквы созданы, и они находятся точно на своих местах согласно таблицы.
Сейчас таблицу можно убрать (выделить и вырезать), подобрать цвет фона слайда и оформление
В результате у нас получится примерно так:
[pic]
ШАГ 3
Сейчас создадим 3 кнопки
- проверить
- очистить
- выход
Их также берем с панели ЭЛЕМЕНТЫ УПРАВЛЕНИЯ и помещаем на слайд
Щелкнув правой по каждой кнопке и выбрав СВОЙСТВА, зададим нужный размер и цвет шрифта и фон кнопки
Изменим надписи на кнопках на нужные: Правой – Объект CommandButton – Edit
Получается так:
[pic]
ШАГ 4
Приступаем к написанию кода для кнопки ПРОВЕРИТЬ – это самая длительная часть работы по созданию кроссворда
Начнем со слова «герц»
Оно занимает боксы 2, 3, 4, 5 и пересекается со словом «архимед»
Делаем двойной щелчок по кнопке ПРОВЕРИТЬ и мы оказываемся в редакторе VBA, где видим процедуру обработки события нажатия на кнопку, куда надо вставить необходимый код
Private Sub CommandButton1_Click()
{ Сюда надо вставить код}
End Sub
Давайте сначала разберем алгоритм проверки и действий, затем запишем код:
Надо проверить значения боксов 2,3,4,5 и
- если слово внесено верно, то в боксе 2 должна быть буква «г», в 3 – «е», в 4 – «р», в 5 – «ц», тогда боксы покрасим
иначе (слово не угадано) может быть два случая:
если слово «архимед» до этого угадано, то надо очищать боксы 2,3,5, а бокс 4 не трогать – ведь там буква «р» от слова «архимед», а его стирать нельзя – оно ведь угадано
иначе (пересекающее слово «архимед» до этого не угадано), то надо очищать боксы 2,3,4,5
Пишем код для слова «герц»:
'2 по горизонтали «герц»
If (TextBox2.Text = "г") And (TextBox3.Text = "е") And (TextBox4.Text = "р") And (TextBox5.Text = "ц") Then
TextBox2.BackColor = RGB(0, 255, 255)
TextBox3.BackColor = RGB(0, 255, 255)
TextBox4.BackColor = RGB(0, 255, 255)
TextBox5.BackColor = RGB(0, 255, 255)
Else
If (TextBox1.Text = "а") Then
TextBox2.Text = ""
TextBox3.Text = ""
TextBox5.Text = ""
Else
TextBox2.Text = ""
TextBox3.Text = ""
TextBox4.Text = ""
TextBox5.Text = ""
End If
End If
Разъяснение кода:
[pic]
If (TextBox2.Text = "г") And (TextBox3.Text = "е") And (TextBox4.Text = "р") And (TextBox5.Text = "ц") Then
TextBox2.BackColor = RGB(0, 255, 255)
TextBox3.BackColor = RGB(0, 255, 255)
TextBox4.BackColor = RGB(0, 255, 255)
TextBox5.BackColor = RGB(0, 255, 255)
Это проверка всех боксов:
Е [pic] сли бокс2 содержит текст «г» И бокс3 – «е» И бокс4 – «р» И бокс5 – «ц» (т.е слово угадано), то делаем цвет фона всех боксов голубым (TextBox2.BackColor = RGB(0, 255, 255)) ...
Else
If (TextBox1.Text = "а") Then
TextBox2.Text = ""
TextBox3.Text = ""
TextBox5.Text = ""
Иначе, если слово «герц» не угадано и в боксе1 буква «а» (т.е слово «архимед» до этого угадано), то очищаем боксы 2,3,5, а бокс 4 не трогаем – в нем буква «р» от слова «архимед»
[pic]
Else
TextBox2.Text = ""
TextBox3.Text = ""
TextBox4.Text = ""
TextBox5.Text = ""
Иначе (слово «герц» не угадано и слово «архимед» тоже не угадано), то чистим все боксы 2,3,4,5.
[pic]
Здесь можно подумать, что это излишнее усложнение, но без рассмотрения всех этих вариантов не будут отрабатываться всевозможные возникающие ситуации и все будет стираться - испытал при разработке алгоритма
Следующее слово «тесла», которое содержит тоже одно пересечение с другим словом
Алгоритм примерно такой же, только букв (и боксов) не 4 а 5
Посмотрите код и все поймете:
'3 по горизонтали «тесла»
If (TextBox9.Text = "т") And (TextBox10.Text = "е") And (TextBox11.Text = "с") And (TextBox12.Text = "л") And (TextBox13.Text = "а") Then
TextBox9.BackColor = RGB(0, 255, 255)
TextBox10.BackColor = RGB(0, 255, 255)
TextBox11.BackColor = RGB(0, 255, 255)
TextBox12.BackColor = RGB(0, 255, 255)
TextBox13.BackColor = RGB(0, 255, 255)
Else
If (TextBox8.Text = "м") Then
TextBox9.Text = ""
TextBox11.Text = ""
TextBox12.Text = ""
TextBox13.Text = ""
Else
TextBox9.Text = ""
TextBox10.Text = ""
TextBox11.Text = ""
TextBox12.Text = ""
TextBox13.Text = ""
End If
End If
Конечно, снова набирать код нет смысла (тогда нам понадобится не 6,а 26 часов ), просто выделяем текст для слова «герц», копируем, затем вставляем ниже и подкорректируем по слову «тесла» и номерам ячеек
И, наконец слово «архимед»
Оно содержит два пересечения со словами герц и тесла
Кроссворд мы угадываем не по порядку - произвольно, поэтому могут быть такие случаи:
Слово «архимед» угадано – тогда его красим
Слово «архимед» не угадано – тогда, если слово герц и тесла до этого было угадано, то чистим все, кроме боксов 4 и 10 (там буквы от угаданных слов)
Слово «архимед» не угадано – тогда, если только слово тесла было до этого угадано, то чистим все, кроме бокса 10
Слово «архимед» не угадано – тогда, если только слово герц было до этого угадано, то чистим все, кроме бокса 4
Иначе ( ничего не угадано), то чистим все боксы 1,4,6,7,8,10,14
В этом случае код становится больше (больше вариантов)
'1 по вертикали - архимед
If (TextBox1.Text = "а") And (TextBox4.Text = "р") And (TextBox6.Text = "х") And (TextBox7.Text = "и") And (TextBox8.Text = "м") And (TextBox10.Text = "е") And (TextBox14.Text = "д") Then
TextBox1.BackColor = RGB(0, 255, 255)
TextBox4.BackColor = RGB(0, 255, 255)
TextBox6.BackColor = RGB(0, 255, 255)
TextBox7.BackColor = RGB(0, 255, 255)
TextBox8.BackColor = RGB(0, 255, 255)
TextBox10.BackColor = RGB(0, 255, 255)
TextBox14.BackColor = RGB(0, 255, 255)
Else
If (TextBox5.Text = "ц") And (TextBox11.Text = "с") Then
TextBox1.Text = ""
TextBox6.Text = ""
TextBox7.Text = ""
TextBox8.Text = ""
TextBox14.Text = ""
Else
If (TextBox5.Text = "ц") Then
TextBox1.Text = ""
TextBox6.Text = ""
TextBox7.Text = ""
TextBox8.Text = ""
TextBox10.Text = ""
TextBox14.Text = ""
Else
If (TextBox11.Text = "с") Then
TextBox1.Text = ""
TextBox4.Text = ""
TextBox6.Text = ""
TextBox7.Text = ""
TextBox8.Text = ""
TextBox14.Text = ""
Else
TextBox1.Text = ""
TextBox4.Text = ""
TextBox6.Text = ""
TextBox7.Text = ""
TextBox8.Text = ""
TextBox10.Text = ""
TextBox14.Text = ""
End If
End If
End If
End If
Разъяснение кода:
[pic]
If (TextBox1.Text = "а") And (TextBox4.Text = "р") And (TextBox6.Text = "х") And (TextBox7.Text = "и") And (TextBox8.Text = "м") And (TextBox10.Text = "е") And (TextBox14.Text = "д") Then
TextBox1.BackColor = RGB(0, 255, 255)
TextBox4.BackColor = RGB(0, 255, 255)
TextBox6.BackColor = RGB(0, 255, 255)
TextBox7.BackColor = RGB(0, 255, 255)
TextBox8.BackColor = RGB(0, 255, 255)
TextBox10.BackColor = RGB(0, 255, 255)
TextBox14.BackColor = RGB(0, 255, 255)
Е [pic] сли слово архимед угадано, то меняем цвет фона боксов
Else
If (TextBox5.Text = "ц") And (TextBox11.Text = "с") Then
TextBox1.Text = ""
TextBox6.Text = ""
TextBox7.Text = ""
TextBox8.Text = ""
TextBox14.Text = ""
И [pic] наче (слово архимед не угадано, но до этого угаданы слова герц и тесла) – то чистим боксы 1,6,7,8,14, а 4 и 10 не трогаем – там буквы от угаданных слов герц и тесла
Else
If (TextBox5.Text = "ц") Then
TextBox1.Text = ""
TextBox6.Text = ""
TextBox7.Text = ""
TextBox8.Text = ""
TextBox10.Text = ""
TextBox14.Text = ""
И [pic] наче (слово архимед не угадано, но до этого угадано слово герц ) – то чистим боксы 1,6,7,8,10,14, а 4 не трогаем – там буквы от угаданного слова герц
If (TextBox11.Text = "с") Then
TextBox1.Text = ""
TextBox4.Text = ""
TextBox6.Text = ""
TextBox7.Text = ""
TextBox8.Text = ""
TextBox14.Text = ""
Иначе (слово архимед не угадано, но до этого угадано слово тесла ) – то чистим боксы 1,4,6,7,8,,14, а 10 не трогаем – там буквы от угаданного слова тесла
[pic]
TextBox1.Text = ""
TextBox4.Text = ""
TextBox6.Text = ""
TextBox7.Text = ""
TextBox8.Text = ""
TextBox10.Text = ""
TextBox14.Text = ""
End If
End If
End If
End If
Иначе (слово архимед не угадано, слова герц и тесла тоже не угаданы) – чистим все боксы
[pic]
Заметьте:
Если слово пересекается с одним словом – то надо описывать 2 варианта кода (21=2)
Если с двумя – 4 варианта (22=4)
Если в тремя – 8 вариантов (23=8)
Если в четырьмя – 16 вариантов (24=16)
и так далее
В своих кроссвордах я стараюсь не делать пересечения более, чем с тремя словами – будет уйма кода (пусть и case – технологии) и замедление работы программы – оно и так уже присутствует
ШАГ 5
Если еще осталось желание, то следующий шаг – описание кода для кнопки ОЧИСТИТЬ
Он очень прост:
При нажатии на эту кнопку все боксы должны перекраситься в исходный цвет (белый RGB(255,255,255) и содержимое боксов очиститься (TextBox1.Text = "")
Делаем двойной щелчок по кнопке ОЧИСТИТЬ и пишем код:
Private Sub CommandButton2_Click()
TextBox1.BackColor = RGB(255, 255, 255)
TextBox1.Text = ""
TextBox2.BackColor = RGB(255, 255, 255)
TextBox2.Text = ""
TextBox3.BackColor = RGB(255, 255, 255)
TextBox3.Text = ""
TextBox4.BackColor = RGB(255, 255, 255)
TextBox4.Text = ""
TextBox5.BackColor = RGB(255, 255, 255)
TextBox5.Text = ""
TextBox6.BackColor = RGB(255, 255, 255)
TextBox6.Text = ""
TextBox7.BackColor = RGB(255, 255, 255)
TextBox7.Text = ""
TextBox8.BackColor = RGB(255, 255, 255)
TextBox8.Text = ""
TextBox9.BackColor = RGB(255, 255, 255)
TextBox9.Text = ""
TextBox10.BackColor = RGB(255, 255, 255)
TextBox10.Text = ""
TextBox11.BackColor = RGB(255, 255, 255)
TextBox11.Text = ""
TextBox12.BackColor = RGB(255, 255, 255)
TextBox12.Text = ""
TextBox13.BackColor = RGB(255, 255, 255)
TextBox13.Text = ""
TextBox14.BackColor = RGB(255, 255, 255)
TextBox14.Text = ""
End Sub
ШАГ 5
Наконец напишем код для кнопки ВЫХОД:
Private Sub CommandButton3_Click()
Application.Quit
End Sub
Эта команда закрывает приложение. Лучше, если сюда добавить код, который висит на кнопке ОЧИСТИТЬ, тогда, если мы забыли очистить и нажали ВЫХОД, то все равно очистится, и при следующем запуске кроссворд опять чистый
ШАГ 6
Вставляем в презентацию надпись, где описываем задания , номера слов, картинки для оформления, в результате получаем готовый кроссворд:
[pic] [pic]
ШАГ 7
Таким образом надо написать код для всех слов кроссворда, а если их 15-20, то боксов получается около сотни и кода тоже много – соответственно и времени надо много
И еще:
- очень важно! Кроссворд содержит команды (макросы), поэтому при его запуске кнопки могут не работать – система безопасности Вашего MS PPT блокирует запуск макросов (исполнение кода)
Что сделать: открыть MS PPT, зайти МЕНЮ – СЕРВИС – МАКРОС – БЕЗОПАСНОСТЬ и установить низкий уровень безопасности, затем закрыть PPT и запустить кроссворд – кнопки заработают
- чтобы при случайном щелчке мыши по слайду не происходила смена слайда, снимите галочку смены слайда по щелчку
- лучше сохраните кроссворд в виде демонстрации PPT (файл – сохранить как – тип файла - демонстрация PPT – (это для учащихся они ничего не смогут испортить в коде, у Вас конечно останется еще и обычный файл презентации, где можно все править)
ЗАКЛЮЧЕНИЕ
Сейчас можно запустить и проверить действие нашего «живого» кроссворда – все должно работать
К ресурсу приложена эта презентация с кроссвордом (+ демонстрация), откройте ее и посмотрите функционирование, а также коды кнопок (делаете двойной щелчок по кнопке - и видите в редакторе ее код)
Конечно, затраты времени велики, но другого алгоритма, который бы обрабатывал десятки ситуаций и сотню боксов, и в то же время был в несколько раз короче, скорее всего нет или он очень мудреный