Разработка программы  «Угадай число»

Постановка задачи

Разработать программу, запустив которую вы или  пользователь могли  бы играть с компьютером в «Угадай число». А именно, пользователь нажимает кнопку «Загадай!»,  компьютер генерирует и запоминает какое-то число, Пользователь вводит свое число, программа сравнивает оба числа и выдает реплику, например, «Ваше число меньше». Пользователь вводит большее число, программа говорит, например, «Ваше число больше». Пользователь вводит меньшее число и так до тех пор, пока не угадает. Спортивный интерес заключается в том, чтобы отгадать  число за минимальное количество (6-7) попыток (см. рисунок).

 

Основы программирования

Ÿ         В данной теме вы закрепите ваше представление об операторе условия If – then. Вспомните - формула оператора условия выглядит так:

            if  условие  then

            [выражение1]

            else

            [выражение2]

            End  if

Или, если всё умещается в одну строку:

if  условие  then [выражение1]  else [выражение2]

Ÿ         Выражение Randomize и Функция Rnd.

Часто, особенно в играх и обучалках, используют численные переменные со случайной величиной. Выражение Randomize запускает генератор случайных чисел, обычно его помещают в процедуре инициализации или в начале процедуры, в которой используются случайные числа. Для создания случайных чисел в определенном диапазоне применяют функцию Rnd.

Выражение  Число*Rnd возвращает случайные числа в диапазоне от 0 до значения Число. Эти случайные числа будут вещественными..

Выражение Int(Число*Rnd) возвращает целые случайные числа в диапазоне от 0 до значения Число-1

Выражение  1 + Int(First * Rnd) - возвращает целые случайные числа в диапазоне от 1 до значения Число. 

 

Ÿ         Вы также узнаете,  насколько важен порядок действий пользователя.

 

Рекомендуемый план разработки программы

      1.  Запустите Visual Basic и выберите стандартную форму.

  1. Расположите на форме в соответствии с рисунком  2 кнопки (Command),  поле ввода (TextBox) и 5 меток (Label).
  2. Сохраните свой проект (два файла) в отдельной папке, которую назовите, например, Ugaday.  Файлы назовите аналогично, например, первый файл - ugad.frm,  а  второй файл -   ugaday.vbp
  3. Случайные числа. Теперь напишите код для первой кнопки (Command1), чтобы по ее нажатию образовалось и сохранилось бы в памяти компьютера некое случайное целое число в пределах от 1 до 100.

-         щелкните дважды по кнопке – войдете в заготовку процедуры.  Наберите в ней код, выделенный жирным шрифтом,  и комментарии:

 

Private Sub Command1_Click()

Randomize

A = 1 + Int(100 * Rnd)      ‘Здесь 1 и 100 –диапазон случайных чисел

Label4.Caption = Str(A)   ‘Эту строку убрать после отладки программы!

End Sub

-         В разделе (General) объявите букву А как целочисленную переменную:

Dim  A   аs   Integer

            Примечание. Здесь А – число, Label4.Caption – строковое свойство. Поэтому А приходится преобразовывать в строку. Это вы сделали с помощью функции Str( ). Обратная операция (преобразования строкового выражения в число) выполняется функцией Val()  (пример см. в п. 7).

  1. Первое тестирование. Сохраните опять свою программу в новой редакции, запустите и протестируйте ее. По  нажатию первой кнопки в метке Label4  каждый раз появляется новое случайное число в пределах от 1 до 100.
  2. Интерфейс. Выделите форму и в ее заголовке напишите: «Угадай число, задуманное компьютером». В заголовке первой кнопки вместо Command1 напишите «Загадай!».  На второй кнопке вместо Command2 напишите «О К». На Label1,  Label2 и Laabel3 наберите текст как на рисунке.  Метки Label4  и   Label5, а также TextBox  очистите от стандартного текста.
  3. Оператор If - Then. Теперь напишите код, чтобы сохранить число, которое введет пользователь. Дважды щелкните по второй кнопке (О К) – войдете в заготовку процедуры. Наберите в ней выделенный ниже код  и комментарии:

   Private Sub Command2_Click()

Dim B As Integer         объявление локальной переменной

   B = Val (Text1.Text)  в переменной В  сохранить число, введенное в TextBox

‘Если А=В, то в метку4 поместить "Вы  УГАДАЛИ!"

   If A = B Then Label4.Caption = "Вы  УГАДАЛИ!" 

   If A > B Then Label4.Caption = "Ваше число МЕНЬШЕ."

   If A < B Then Label4.Caption = "Ваше число БОЛЬШЕ."

   End Sub

Обратите внимание на  операторы условия.  Они здесь выражены без окончания End if, т.к. каждый из них написан в одной строке.

Сохраните ваш проект опять  и протестируйте его. Ваша программа стала проявлять логику,  интеллект!  Пора научить компьютер считать число попыток угадывания.

  1. Счетчик. Будем считать за одну попытку каждое нажатие пользователя по кнопке ОК. Счетчики обычно пишут так: переменная = переменная + 1.

Добавьте в конец процедуры Command2 следующие строки:

P = P + 1      ‘Счетчик числа попыток (или числа заходов в процедуру)

 If A = B Then

 Label5.Caption = "Вы угадали число за " + Str(P) + "  попыток(ки)."

 End if

Обратите внимание в коде на  оператор условия IfThenEnd if. Так как в целом оператор выражен в несколько строк, в виде блока, то в конце блока пишут End if.

Чтобы счетчик считал правильно, надо переменную Р объявить в разделе General (так же, как и переменную А), а также придать ей значение, равное 0. Лучше всего обнулить P  в процедуре Command1_Click(), добавив в нее строку

            Р = 0

  1. Удалите или заблокируйте в программе ту строку, в которой вы выводили значение задуманного компьютером числа (Label4.Caption = Str(A) ). Сохраните опять свой проект и убедитесь,  что ваша программа работает удовлетворительно. Чтобы программа работала на хорошо и отлично, выполните все пункты следующего раздела.

 

Развитие программы

1.      Порядок  действий пользователя. Проблема заключается в том, что пользователь, как известно, – не программист. Он может (и имеет моральное право) не обратить внимания на кнопку «Загадай!»,  а сразу ввести свое число и нажать OK. А вы не имели это ввиду. Это может вызвать какой-либо сбой в работе, так как отгадываемое число не выбрано.  Попробуйте сделать так, чтобы для пользователя была бы в начале доступна только кнопка «Загадай!». Вот подсказка, вставьте в процедуру для второй кнопки следующие значения свойств:

 Command2.Enabled = False      Enabled - доступный

 Text1.Enabled = False

Нажатие на кнопку «Загадай» должно сделать доступным поле ввода, а саму эту кнопку - недоступной до полного отгадывания задуманного числа:

Command1.Enabled = False    
Command2.Enabled = True    

Text1.Enabled = True

После отгадывания задуманного числа надо опять все привести в исходное состояние, то есть обеспечить доступ к кнопке «Загадай» и сделать недоступным поле ввода (а лучше еще и кнопку OK):

Command1.Enabled = True
Command2.Enabled = False    

Text1.Enabled = False

 

  1. Предупреждение. Другая проблема заключается в том, что пользователь, еще не введя  число, может нечаянно нажать кнопку OK, - и ваша программа засчитает это за попытку - нечестно. Сделайте так, чтобы в подобном случае ваша программа, как ей и положено по правилам хорошего тона, выдавала бы предупреждение или подсказку. Например:

                                    if Text1.Text = “ ”  then    Если строка пустая, то

 MsgBox(“Введите,  пожалуйста, число.”) ‘подсказать,

Exit Sub   прервать ход программы и выйти в исходное положение

End if

Найдите правильное место этого кода и вставьте его.

 

  1. Удаление старых значений.  Дополните программу так, чтобы по нажатию (при повторном нажатии) кнопки «Загадай!» поле Text1 очищалось бы от ранее введенного значения.

Подсказка. Введите пустую строку (Text1.text = ” ”)  в соответствующую процедуру.

Сделайте аналогичную операцию для меток  Label4  и  Label5 на момент угадывания  задуманного числа.

Важно сделать вставки в правильные места соответствующих процедур.

 

  1. Курсор и фокус. Надо, чтобы по нажатию кнопки «Загадай!», поле ввода TextBox стало бы активным, иначе говоря, чтобы оно было сфокусировано, чтобы в нем мигал курсор, приглашая ввести число.

 Подсказка. Введите в процедуру кнопки выражение Text1.SetFocus.

 

  1. Информация о ходе игры. Сделайте так, чтобы программа информировала пользователя о числе попыток не только в конце игры, но и по ходу игры.

Подсказка: можно дополнить текст в Label3  таким образом:

If A > B Then Label4.Caption = "Ваше число МЕНЬШЕ. Число попыток - " + Str(P)

If A < B Then Label4.Caption = "Ваше число БОЛЬШЕ. Число попыток - " + Str(P)

 

Hosted by uCoz