Создание Windows приложений на языке Visual Basic
Обработка символьных и текстовых данных





Содержание:
  • Проект "Угадай слово". Интерфейс программы.
  • Объявление переменных строкового типа.
  • Циклы с условием.
  • Условные операторы

  • Проект "Угадай слово". Интерфейс программы.
    Для знакомства со строковым типом данных, создадим игру, в которой нужно угадать слово по его краткому описанию. Пользователь вводит отдельные буквы, из которых составляется угадываемое слово.
    Создадим новый проект и присвоим ему имя 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 - завершение обработки события по условию (см. выше).
    Запустим программу на исполнение и убедимся, что она нормально работает.







       ©Гуков Константин Михайлович 2006 - 2012     Почта: [email protected]