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.
Форма с правилами игры.
На основании этих правил можно сформулировать другие правила, и любые правила ввести в эту справочную форму.
19.2. Создание проекта
Создаём проект по обычной схеме: в 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 (см. рисунок).
Два последних элемента управления PictureBox со смайликами накладываем один на другого на месте головы нарисованного человечка. А программа будет показывать нам либо хмурый смайлик (при неправильной букве), либо веселый смайлик (при правильной букве).
Напомним, что, растягивая за маркеры элемент PictureBox, при помощи свойства SizeMode = StretchImage мы можем растягивать голову человечка на всю площадь этого элемента так, чтобы было посмешнее.
Переносим на форму элемент управления MenuStrip – выпадающее меню для команд и опций, сгруппированных по функциональности. Щёлкаем по этому элементу menuStrip1, расположенному ниже формы Form1 в режиме проектирования. На форме Form1 появляются окна с надписью Type Here (Печатайте здесь), в которые записываем команды на английском языке (приведённые далее в программе): Game, New Game, Exit; Help, How to, About. Теперь в панели Properties (для каждой команды этого элемента управления) в свойстве Text изменяем эти английские команды на русские, согласно рис. 19.17 – 19.18.
Рис. 19.17. Команды левого меню. Рис. 19.18. Команды правого меню.
Если в игре применяются звуковые файлы, то их целесообразно разместить в одной папке с именем, например, Sounds. Для добавления в проект этой папки, в панели Solution Explorer выполняем правый щелчок по имени проекта, в контекстном меню выбираем Add, New Folder, в поле появившегося значка папки записываем имя папки и нажимаем клавишу Enter. Добавляем в эту папку звуковые файлы по стандартной схеме: выполняем правый щелчок по имени этой папки, в контекстном меню выбираем Add, Existing Item, в панели Add Existing Item в окне “Files of type” выбираем “All Files”, в центральном окне находим (например, в папке с загруженными из Интернета файлами) и с нажатой клавишей Ctrl выделяем имена файлов и щёлкаем кнопку Add. В панели Solution Explorer мы увидим эти файлы (см. рисунок выше).
Для ввода в проект новой формы (для правил игры) в меню Project выбираем Add Windows Form, в панели Add New Item оставляем заданные по умолчанию параметры и щёлкаем кнопку Add. В ответ VS выводит новую форму Form2 и добавляет в панель Solution Explorer новый пункт Form2.vb. Аналогично, как первую, проектируем вторую форму (рис. 19.18), за маркеры увеличиваем форму до размеров Size (420; 420). Вводим на эту форму элемент управления в виде окна TextBox, для которого в панели Properties в свойстве Multiline выбираем значение True (для многострочного текста). Ниже размещаем кнопку Button со свойством Text = Выход.
Рис. 19.18.
Форма Form2.
19.3. Код и запуск программы
Открываем файл Form1.vb (например, по схеме: File, Open, File) и в классе Form1 записываем следующие переменные и методы.
Листинг 19.1. Переменные и методы.