Учебная программа INTTEST
Игра “Угадай число”: программа случайным образом выбирает целое число в диапазоне О... 1000 и запоминает его. Пользователь пытается угадать его и вводит свое число. Сравнив ввод с запомненным числом, программа сообщает - больше, меньше или равно введенное число запомненному. Ввод продолжается до угадывания, после чего программа предлагает сыграть еще раз. Поскольку пользователь вводит только числа, изменим форму fmExample: как и в предыдущей программе intmult вместо компонента edinput типа TEdit поместим на форму одноименный компонент типа TMaskEdit. Выберите опцию File | New | Application, щелкните по компоненту edinput и удалите его с помощью клавиши Delete, затем поместите на его место компонент MaskEdit (страница Additional),назовите его edInput (свойство Name) и в его свойство EditMask поместите строку 0999;1; В секцию private описания класса fmExampie поместите объявление целочисленного поля х: Private { Private declarations } X: Integer; Для обработчика события OnActivate формы fmExampie Напишите такой код: procedure TfmExample.FormActivate(Sender: TObject); Begin X:= Random (1001); // Загадываем случайное число edinput.SetFocus; // Передаем строке edinput фокус ввода Caption:= 'Угадай целое число в диапазоне О...1000'; IbOutput.Caption:== 'Введите число:'; End; Поместите в обработчик события onciick кнопки bbRun такой код: procedure TfmExample.bbRunClick(Sender: TObject); Var Y: Integer; Begin if edinput.Text = '' then Exit; // Если нет входного текста, прекращаем работу // Преобразуем ввод в число: Y:= StrToInt(Trim(edInput.Text)); edinput.Text := ''; // Очищаем ввод edinput.SetFocus; // Устанавливаем фокус ввода { Параметр Tag = 0 означает угадывание числа, иначе - ответ на вопрос, будет ли пользователь играть после угадывания } if Tag = 0 then if X < Y then // Угадывание числа mmOutput.Lines.Add('X < '+IntToStr(Y)) else if X > Y then mmOutput.Lines.Add('X > '+IntToStr (Y)) else // X = Y begin mmOutput.Lines.Add("X = +IntToStr(Y)); MessageBeep(MB_OK); // Звук для привлечения внимания IbOutput.Caption:='Вы угадали! Введите 1, если хотите повторить:'; Tag:= 1; // Следующий ввод - ответ на вопрос End; else // Анализ ответа if Y = 1 then Begin X:= Random(1001); // Новое число IbOutput.Caption:= 'Введите число:'; Tag := 0; // Следующий ввод - угадывание edinput.SetFocus End Else Close; End; Комментарий к программе При активизации окна программы обработчик FormActivate с помощью оператора Х:= Random(1001); помещает в поле X случайное целое число в диапазоне от 0 до 1001 -1 = 1000 (параметр обращения к генератору псевдослучайных чисел Random на единицу больше верхней границы диапазона). Каждый компонент Delphi имеет целочисленное свойство Tag, которым программист может распоряжаться по своему усмотрению. Программа использует это свойство формы fmExampie для разделения алгоритма обработки события OnClick кнопки bbRun на два варианта: пользователь угадывает число (тад = 0) или отвечает на предложение сыграть еще раз (тад = 1). В момент создания экземпляра класса TfmExmple - объекта fmExample - все его поля обнуляются, поэтому первоначально Tag = 0 и программа анализирует угадывание числа. При угадывании срабатывает составной оператор Begin mmOutput.Lines.Add('X = Ч-IntToStr(Y)); MessageBeep(MB OK); // Звук для привлечения внимания IbOutput.Caption:='Вы угадали! Введите 1, если хотите повторить:'; Tag:= 1; // Следующий ввод - ответ на вопрос End и Tag получает значение 1 (стандартная процедура MessageBeep заставляет звуковую систему ПК издать короткий звуковой сигнал). Теперь очередной щелчок по кнопке bbRun будет означать, что пользователь подготовил ответ на вопрос, и программа анализирует его. Если пользователь ввел число отличное от 1, произойдет обращение к методу close формы fmExample и программа прекратит работу. 5.4.3. Операторы повторений В языке Object Pascal имеются три различных оператора, с помощью которых можно запрограммировать повторяющиеся фрагменты программ. Счетный оператор цикла FOR имеет такую структуру: for <параметр цикла>:= <нач_знач> to <кон знач> do <оператор>; Здесь for, to, do - зарезервированные слова (для, до, выполнить); <параметр_цикла> - переменная типа Integer (точнее, любого по-, рядкового типа, см. гл. 7); <нач_знач> - начальное значение - выражение того же типа; <кон_знач> - конечное значение - выражение того же типа; <оператор> - произвольный оператор Object Pascal. При выполнении оператора for вначале вычисляется выражение <нач_знач> и осуществляется присваивание <параметр_цикла>:= <нач_знач>. После этого циклически повторяется:
|