Содержание:
- Проект "Угадай слово". Интерфейс программы.
-
Объявление переменных строкового типа.
-
Циклы с условием.
-
Условные операторы
Проект "Угадай слово". Интерфейс программы.
|
Для знакомства со строковым типом данных, создадим игру, в которой нужно угадать слово по его краткому описанию. Пользователь вводит отдельные буквы, из которых составляется угадываемое слово.
Создадим новый проект и присвоим ему имя Lesson3.
Присвоим свойству Text формы значение "Угадай слово". В свойстве Font откроем окно настроек шрифта и зададим размер шрифта, например 14 пунктов (более крупный). Такой шрифт по умолчанию будет у всех визуальных объектов, которые мы будем использовать на форме. Следует обратить внимание, что бы набор символов был Кириллический.
Свойство FormBorderStyle, следует установить в FixedSingle. В этом случае, во время исполнения программы, размер окна изменить нельзя.
Расставим на форме визуальные компоненты, так, как показано на рисунке:
Двойным щелчком мыши на форме создадим событие:
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Label1.Text = ""
Label2.Text = ""
Label3.Text = "****"
End Sub
Добавим строки, выделенные синим цветом.
В этих строках мы создаём начальные значения для текста меток. На форме изменим текст на кнопках, так как показано на рисунке:
Алгоритм работы программы будет следующим: из списка, случайным образом будет выбираться строка (при нажатии на кнопку Новое слово), которая содержит само слово и его описание. Описание слова будет отображаться на Label1.
Пользователь будет вводить букву в TextBox1 и нажимать кнопку Ввод. Если буква есть в слове, то она будет отображаться на Label3 в нужной позиции, а если буквы нет в слове, то она будет отображаться на Label2.
Для того чтобы создать список слов и описаний, нужно на форму добавить ListBox1 (список выбора).
Для того, чтобы ListBox1 был невидим во время работы программы, его свойство Visible нужно установить в False. В списке ListBox1 создадим строки по такой схеме (можно скопировать и вставить строки из приведённых ниже):
пила Столярный инструмент; тёща
лист То, что можно скрутить в трубочку
тело То, что имеет внутренности
луна Спутник Земли
сено Корм для животных
Вася Мужское и кошачье имя
клоп Кусачий гад
змея Пресмыкающийся гад
харя Лицо дебила
соль Натрий - хлор
роль Игра артиста
моль Обжора с крыльями
дело То, что менты шьют
виза Разрешение на въезд
трон Табурет для короля
пирс Стойло для кораблей
пыль Летит в глаза
мера : веса, длины, давления
село Крупная деревня
ListBox1 заполняется строками при нажатии маленькой кнопки напротив свойства Items. Должно получиться так, как показано на рисунке:
|
Объявление переменных строкового типа
|
Двойным щелчком мыши, создадим событие на нажатие кнопки "Новое слово".
Добавим в текст кода объявление глобальных переменных (выделен синим):
Public Class Form1
Dim Str1, Str2 As String
Dim myChar As Char
Глобальные переменные, это такие переменные, доступ к которым можно осуществлять из любого места программы.
Добавим текст события, (выделен синим):
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim n As New Random
Dim r As Integer
r = n.Next(0, 17)
Str1 = ListBox1.Items(r)
Label1.Text = Str1
Label2.Text = ""
Label3.Text = "****"
End Sub
End Class
Рассмотрим, что означают добавленные строки:
Dim n As New Random - объявляем локальную переменную n типа "случайное число". Оператор New создаёт новый экземпляр этой переменной;
Dim r As Integer - объявляем локальную переменную r для хранения случайного числа. Локальные переменные действуют только в пределах той процедуры (события) в которых они объявлены;
r = n.Next(1, 17) - присваиваем переменной r случайное число из диапазона от 0 до 17. Столько строк содержится в нашем списке, если число строк другое, то нужно соответственно изменить и диапазон. Строки в списке ListBox1 нумеруются от 0 до числа строк - 1;
Str1 = ListBox1.Items(r) - присваиваем переменной Str1 случайную строку из списка; Label1.Text = Str1 - выводим случайную строку на метку Label1.
Label2.Text = "" и Label3.Text = "****" - создаём начальные установки.
Теперь, если запустить программу и нажимать на кнопку "Новое слово", надпись на Label1 , будет меняться случайным образом.
Мы видим, что текст с описанием слова содержит и само слово, которое нужно угадывать. Поэтому нам следует избавиться от него. Сделаем это, используя цикл с условием.
|
Циклы с условием
|
Заменим строку Label1.Text = Str1 на несколько строк кода, в которых создадим новую строку Str2.
Str2 = "" rem Обнуляем строку Str2
For r = 5 To Len(Str1) - 1
myChar = Str1(r)
Str2 = Str2 + myChar
Next
Label1.Text = Str2
Рассмотрим, что означают эти строки:
For r = 5 To Len(Str1) - 1 - Начало цикла. Здесь мы создаём цикл который начнётся с 5 (r = 5) и будет повторяться до значения равному числовому значению длинны строки (Len(Str1)) минус единица, то есть переменная r будет принимать значения 5, 6, 7 : и так далее.
myChar = Str1(r) - Присваиваем символьной переменной myChar, поочерёдно, символы взятые из из строки Str1. Переменная r как раз и есть номер позиции символа в строке. Символы в строке располагаются по номерам (индексам) начиная с 0. Поэтому последний символ в строке для её обработки равен длине строки минус 1.
Str2 = Str2 + myChar - создаём новую строку Str2, последовательно увеличивая её на значение myChar.
Next - завершение объявленного цикла.
Label1.Text = Str2 - Присваиваем метке Label1 значение Str2, созданной нами строки.
Запустим программу на исполнение и убедимся, что всё работает нормально.
Далее, нам нужно сохранить в глобальной переменной то слово, которое нужно угадать. Вставим после строки Label1.Text = Str2 ещё несколько строк, которые так же, в цикле, будут выделять угадываемое слово:
Str2 = "" rem Обнуляем строку Str2
For r = 0 To 3 rem Объявляем цикл повторяющийся 4-е раза (длина слова)
myChar = Str1(r)
Str2 = Str2 + myChar
Next
Str2 = UCase(Str2) rem Переводим полученное слово к верхнему регистру
Label2.Text = Str2 rem Для проверки, временно, выводим слово на Label2
Запустим программу и убедимся, что всё работает исправно. Теперь угадываемое слово находится в глобальной переменной Str2.
Вернём метке Label2 нулевой текст - Label2.Text = "".
|
Условные операторы
|
Создадим событие на нажатие кнопки "Ввод". Вставим в код программы строки выделенные синим:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim c1, c2 As Char
Dim sl As String
Dim n As Integer
If Label1.Text = "" Then
MsgBox("Нажмите кнопку Новое слово")
Else
sl = TextBox1.Text
If sl = "" Then sl = "*"
sl = UCase(sl)
c1 = sl(0)
sl = ""
Label2.Text = Label2.Text + " " + c1
For n = 0 To 3
c2 = Str2(n)
If c2 = c1 Then sl = sl + c1 Else sl = sl + Label3.Text(n)
Next
Label3.Text = sl
TextBox1.Text = ""
TextBox1.Focus()
End If
End Sub
End Class
Рассмотрим подробно, что означают добавленные строки:
Dim c1, c2 As Char
Dim sl As String
Dim n As Integer - Объявляем локальные переменные необходимые для работы события (о назначении переменных будет сказано по мере их применения).
If Label1.Text = "" Then MsgBox("Нажмите кнопку Новое слово") - Здесь, мы условным оператором If (Если) проверяем наличие текста на метке Label1 (Описание угадываемого слова). Если текста нет - Label1.Text = "", (условие принимает значение "Истина"), то (Then) следует вывести окошко с сообщением - MsgBox("Нажмите кнопку Новое слово"). Эту проверку мы осуществляем в начале работы программы, так как пользователь может забыть создать слово.
Else - Иначе. Если предыдущее условие приняло значение false (фальш), то есть на метке 2 есть текст, то выполняется блок рабочих команд до появления оператора End If.
sl = TextBox1.Text - Присваиваем переменной sl значение из строки ввода угадываемой буквы TextBox1.Text.
If sl = "" Then sl = "*" - Делаем проверку. Если If строка sl пустая (пользователь забыл ввести бкву и нажал кнопку "Ввод") то присваиваем строке sl любой символ, например *.
sl = Ucase(sl) - Переведём строку в верхний регистр, так как угадываемое слово у нас так же было переведено в верхний регистр.
c1 = sl(0) - Так как для сравнения нам нужен введённый символ, то получим символ (с1) из строки (sl). Счёт позиций символов в строках начинается с 0.
sl = "" - Очищаем строку sl, так как она нам понадобится для других целей.
Label2.Text = Label2.Text + " " + c1 - Выводим на метку 2 введённый пользователем символ.
Далее, в цикле, сравниваем введённый пользователем символ с символами угадываемого слова:
For n = 0 To 3
c2 = Str2(n)
If c2 = c1 Then sl = sl + c1 Else sl = sl + Label3.Text(n)
Next
Так как изменять значение отдельных символов в строке нельзя, то мы создаём новую строку sl, текст которой будет помещаться на метку Label3 - угаданные символы в слове Label3.Text = sl.
TextBox1.Text = "" TextBox1.Focus() - очищаем строку ввода символа и устанавливаем в неё курсор для повторного ввода.
End If - завершение обработки события по условию (см. выше).
Запустим программу на исполнение и убедимся, что она нормально работает.
|
|