Опишем методику проектирования и программирования типичной и широко распространённой игры по угадыванию слова по буквам. Известно много вариантов этой игры как в ручном, так и в компьютерном варианте.
В ручном варианте смысл игры хорошо понятен из хорошо известной телепередачи “Поле чудес” 1-го канала российского телевидения. Телеведущий (в роли Игрока 1) рассказывает, по какой тематике он загадал слово. На доске показана строка, состоящая и такого количества квадратов, сколько букв содержит это слово. И участники телепередачи (в роли Игрока 2) по очереди отгадывают отдельные буквы загаданного слова. Если участник угадал букву, то в одном или нескольких квадратах слова появляется эта буква. Если участник угадал все буквы слова, игра заканчивается, и победитель получает приз. Начинается новый сеанс игры по угадыванию нового слова.
В компьютерном варианте эту игру мы будем разрабатывать, следуя проекту Hang Man автора Ibrahim от 1.3.2005 с сайта www.planet-source-code.com, но с нашими усовершенствованиями для современной версии Visual Studio.
Игрок, угадывающий слово, будет воздействовать на кнопки типа Button с названиями букв из алфавита. После каждого щелчка игроком кнопки (мышью или клавишей Enter) искусственный интеллект анализирует событие, какую букву выбрал игрок, и выдаёт или мелодию для неправильного ответа, или мелодию для правильного ответа. Кроме того, при неправильном ответе искусственный интеллект будет выводить на форму смайлик (в виде известного графического файла) с недовольным изображением лица, а при правильном ответе – с довольным и улыбающимся изображением лица.
Правила игры.
1. После запуска появляется форма с интерфейсом игры (рис. 19.1). По умолчанию, в окне TextBox мигает курсор, приглашающий Игрока 1 записать слово.
Сначала Игрок 1 при помощи клавиатуры записывает английскими буквами, причём только строчными буквами (без нажатия клавиши Shift) загаданное им слово в окно TextBox, например, слово exception (исключение). Даже первую букву имени собственного, например, имени человека, следует записывать строчной буквой.
Это слово искусственный интеллект скрывает от Игрока 2, записывая его звёздочками (как пароль), рис. 19.2. Далее Игрок 1 объясняет Игроку 2, как переводится на русский язык (или только тематику) загаданное им английское слово, и щёлкает кнопку Старт.
Кнопка Старт становится недоступной (рис. 19.3).
2. Игрок 2 пытается отгадать отдельные буквы загаданного слова и щёлкает первую кнопку с выбранной им буквой (из всех кнопок со всеми буквами английского алфавита).
Например, Игрок 2 щёлкнул кнопку с буквой O. Такая буква есть в загаданном слове. Искусственный интеллект делает кнопку с буквой О недоступной и размещает эту букву на верхней строке для букв загаданного слова (рис. 19.4). Звучит мелодия для правильного ответа.
Рис. 19.1. Перед игрой.
Рис. 19.2. Игрок 1 записал слово.
Рис. 19.3. Игрок 1 щёлкнул кнопку Старт.
Рис. 19.4. Игрок 2 выбрал букву О.
3. Далее, например, Игрок 2 щёлкнул кнопку с буквой А. Такой буквы нет в загаданном слове. Искусственный интеллект делает кнопку с буквой А недоступной и размещает эту букву в таблице для 10 допустимых неправильных букв красного цвета (рис. 19.5). Звучит мелодия для неправильного ответа.
Рис. 19.5. Игрок выбрал букву А и не угадал.
4. Далее, например, Игрок 2 щёлкнул кнопку с буквой E. Такой буквы в загаданном слове две. Искусственный интеллект делает кнопку с буквой E недоступной и размещает эту букву в двух квадратах на верхней строке для букв загаданного слова (рис. 19.6). Звучит мелодия для правильного ответа.
5. Аналогично игрок щёлкает кнопки с оставшимися доступными буквами алфавита, пытаясь угадать слово. На рис. 19.7 видно, что игрок уже угадал много букв загаданного слова, но выбрал уже все 10 букв из 10 допустимых неправильных букв. Предположим, что после этого он щёлкнул кнопку с буквой F, которой нет в слове.
Но после 11-й ошибки игрок считается проигравшим.
6. Появляется панель типа MessageBox с сообщением “Вы не угадали слово.” (рис. 19.8).
Закрываем эту панель, воздействуя на выделенную кнопку OK мышью или клавишей Enter.
7. Чтобы Игрок 2 проверил, правильно ли записал слово Игрок 1 (не допустил ли Игрок 1 ошибки в слове, что явилось причиной поражения Игрока 2), Игрок 2 щёлкает кнопку Проверка.
8. Появляется панель типа MessageBox с ответом Exception (рис. 19.9).
Такое слово в английском языке по компьютерной тематике имеется и переводится как исключение (или ошибка).
Следовательно, в этой игре проиграл Игрок 2, из 10 попыток не угадавший слово.
9. Для начала новой игры следует в Меню выбрать команду “Новая игра” (рис. 19.10).
Рис. 19.6. Игрок выбрал букву E и угадал.
Рис. 19.7. Игрок на последней 10-й попытке не угадал букву.
Рис. 19.8. Панель с сообщением “Вы не угадали слово.”. Рис. 19.9. Загаданное слово.
Рис. 19.10. В Меню выбираем команду “Новая игра”.
10. Теперь участники игры могут поменяться ролями. Аналогично, сначала Игрок 1 при помощи клавиатуры записывает английскими буквами, причём только строчными буквами (без нажатия клавиши Shift) загаданное им слово в окно TextBox, например, слово thanks (благодарность).
Это слово искусственный интеллект скрывает от Игрока 2, записывая его звёздочками (как пароль), рис. 19.11. Далее Игрок 1 объясняет Игроку 2, как переводится на русский язык (или только тематику) загаданное им английское слово, и щёлкает кнопку Старт. Кнопка Старт становится недоступной. Игрок 2 пытается отгадать отдельные буквы загаданного слова и щёлкает кнопки с выбранными им буквами (из всех кнопок со всеми буквами английского алфавита). Искусственный интеллект делает кнопки с выбранными буквами недоступными и размещает эти буквы либо в верхней строке для правильного ответа, либо в таблице для 10 допустимых неправильных букв красного цвета. Звучит мелодия либо для правильного ответа, либо для неправильного ответа.
Рис. 19.11. Из 10 попыток игрок угадал слово.
11. Предположим, что из 10 попыток игрок угадал слово.
Изображение типа смайлика улыбается, звучит музыка для правильного ответа, значит победил Игрок 2.
12. Для начала новой игры следует в Меню выбрать команду “Новая игра”.
13. Для закрытия игры следует в Меню выбрать команду Выход.
14. Появляется панель типа MessageBox с благодарностью “Спасибо за игру” (рис. 19.12).
Закрываем эту панель, воздействуя на выделенную кнопку OK мышью или клавишей Enter.
15. Появляется панель типа MessageBox с вопросом “Вы желаете выйти из игры” (рис. 19.13).
Рис. 19.12. Панель MessageBox с благодарностью. Рис. 19.13. Панель MessageBox с вопросом.
В зависимости от выбранного нами ответа Yes или No мы выходим или продолжаем игру.
16. Если выбираем No, появляется уже показанный выше интерфейс игры.
Теперь первый ход (загадывает слово) делает, например, тот игрок, который в предыдущей игре начинал вторым. Если в игре участвует несколько человек, то можно условиться, что победитель в предыдущей игре начинает первым.
17. Если выбираем Yes, игра закрывается. Для закрытия игры можно также в любой момент выбрать на форме значок Close.
18. Если игроку требуется вспомнить правила игры, то в меню Помощь он выбирает команду “Правила игры”, после чего появляется соответствующая форма (рис. 19.14).
Рис. 19.14.
Форма с правилами игры.
На основании этих правил можно сформулировать другие правила, и любые правила ввести в эту справочную форму.
Создаём проект по обычной схеме: в VS в панели New Project в окне Project types выбираем тип проекта Visual Basic, Windows, в окне Templates выделяем шаблон Windows Forms Application, в окне Name записываем любое имя проекта, например, HangMan и щёлкаем OK. Создаётся проект, появляется форма Form1 на экране в режиме проектирования (рис. 19.15). Оставляем по умолчанию или проектируем форму, как подробно описано в параграфе “Методика проектирования формы”. Например, в панели Properties в свойстве Font выбираем шрифт Times New Roman, 14, Bold.
C панели инструментов Toolbox переносим на форму (слева направо и сверху вниз) следующие элементы управления.
Надпись Label с любым именем Name (т.к. это имя не будет использоваться в программе) и текстом “1. Запишите слово:”.
Окно текста TextBox, для которого в панели Properties: записываем имя Name = Word_in, ограничиваем количество букв двадцатью MaxLenght = 20, скрываем буквы слова за звёздочками (как пароль) PasswordChar = *.
Надпись Label с любым именем Name (т.к. это имя не будет использоваться в программе) и текстом “2. Щёлкните:”.
Кнопка Button, для которой в панели Properties записываем имя Name = Done и текст Text = Старт.
Надпись LinkLabel, для которой в панели Properties записываем имя Name = check_answer (проверка ответа) и текст Text = Проверка.
Двадцать надписей Label, для которых в панели Properties записываем имена Name = Chr1, Chr2, Chr3, …, Chr20 (эти имена будут использоваться в программе) и текст Text во всех надписях – в виде символа подчёркивания “_”.
Рис. 19.15. Форма Form1 в режиме проектирования.
Двадцать надписей Label, для которых в панели Properties записываем имена Name = dash1, dash2, dash3, …, dash20 (эти имена будут использоваться в программе) и текст Text во всех надписях – в виде символа подчёркивания “_”.
Надпись Label с любым именем Name (т.к. это имя не будет использоваться в программе) и текстом “Таблица для 10 допустимых неправильных букв:”.
Ниже последней надписи проектируем таблицу из двух горизонтальных и трёх вертикальных линий из элементов управления типа PictureBox, для которых в панели Properties в свойстве BackColor выбираем чёрный цвет, например, ControlText.
В двенадцати ячейках этой таблицы размещаем двенадцать надписей Label, для которых в панели Properties записываем имена Name = f_chr1, f_chr2, f_chr3, …, f_chr12 (эти имена будут использоваться в программе) и без текста Text во всех первых 11 надписях. Чтобы выделить 11 ошибочных букв в этих 11 ячейках, в свойстве ForeColor этих 11 надписей задаём красный цвет Red. Только в последней надписи с именем Name = f_chr12 в свойстве Text записываем какой-либо символ, например, символ подчёркивания “_”, а в свойстве BackColor выбираем чёрный цвет, например, ControlText (тем самым, выделяя чёрный прямоугольник этой ячейки, как показано на рисунке).
Надпись Label с любым именем Name (т.к. это имя не будет использоваться в программе) и текстом “3. Угадывайте буквы слова:”.
Двадцать шесть (по числу букв в английском алфавите) кнопок Button, для которых в панели Properties записываем имена для букв английского алфавита, Name = A, B, C, D, Er, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z (эти имена будут использоваться в программе) и текст Text, соответствующий этим буквам (как показано на рисунке). Напомним, что язык Visual Basic нечувствителен к регистру букв, и строчную букву “e”, и прописную букву “E” этот язык воспринимает одинаково. Поэтому, чтобы не было конфликта имени “e”, как объекта класса System.EventArgs в параметре метода-обработчика щелчка кнопки, и имени кнопки Name = E, выше мы записали имя кнопки Name = Er.
На форме справа размещаем графический элемент управления PictureBox, для которого в панели Properties записываем имя Name = effects. За маркеры увеличиваем размеры элемента до Size = 125; 314. На этом элементе размещаем рисунок человечка (пока без головы) по стандартной схеме: в панели Properties (для этого элемента) в свойстве Image (рис. 19.16) щёлкаем кнопку с тремя точками, в появившейся панели Select Resource выбираем переключатель Local resource, щёлкаем кнопку Import, в появившейся панели Open находим (например, в папке с загруженными из Интернета файлами) и выделяем графический файл 2.jpg и щёлкаем кнопку Open (или дважды щёлкаем по имени этого файла). Отображение этого файла мы увидим на элементе PictureBox (см. рисунок).
Рис. 19.16. Панели SE и Properties.
Теперь на предыдущем элементе управления PictureBox на месте, где должна находиться голова человечка, размещаем следующий элемент управления PictureBox, для которого в панели Properties записываем или устанавливаем следующие свойства: Name = pic_sad, BackColor = ControlLightLight, SizeMode = StretchImage, Visible = False. За маркеры устанавливаем размеры элемента Size = 58; 46. На этом элементе размещаем рисунок хмурой головы человечка (типа смайлика) по стандартной схеме: в панели Properties (для этого элемента) в свойстве Image щёлкаем кнопку с тремя точками, в появившейся панели Select Resource выбираем переключатель Local resource, щёлкаем кнопку Import, в появившейся панели Open находим (например, в папке с загруженными из Интернета файлами) и выделяем графический файл sad_face.jpg и щёлкаем кнопку Open (или дважды щёлкаем по имени этого файла). Отображение этого файла мы увидим на элементе PictureBox.
На том же элементе управления PictureBox на месте, где должна находиться голова человечка, размещаем следующий элемент управления PictureBox, для которого в панели Properties записываем или устанавливаем следующие свойства: Name = pic_happy, BackColor = ControlLightLight, SizeMode = StretchImage, Visible = False. За маркеры устанавливаем размеры элемента Size = 58; 46. На этом элементе размещаем рисунок веселой головы человечка (типа смайлика) по стандартной схеме: в панели Properties (для этого элемента) в свойстве Image щёлкаем кнопку с тремя точками, в появившейся панели Select Resource выбираем переключатель Local resource, щёлкаем кнопку Import, в появившейся панели Open находим (например, в папке с загруженными из Интернета файлами) и выделяем графический файл happy_face.jpg и щёлкаем кнопку Open (или дважды щёлкаем по имени этого файла). Отображение этого файла мы увидим на элементе PictureBox (см. рисунок).
О проекте
О подписке