Delphi. Учимся на примерах - [23]

Шрифт
Интервал

. Для каждой из них присвойте свойству Caption значение Следующий вопрос>>>>>, свойству Color — значение clMaroon, а свойству Font.Color — значение clWhite. Присвойте им имена (свойство Name) p1, р2, p3, р4 и р5. Для того чтобы убрать выпуклость и привести панель к виду стильной кнопки, изменим значение свойства BevelInner на bvRaised, а свойства BevelOuter — на bvLowered. Для всех панелей, кроме p1, присвойте свойству Visible значение False (изначально будет видна только первая панель).

Поскольку в программе будет предусмотрена возможность динамической загрузки базы вопросов/ответов, нам понадобится диалоговое окно открытия файла. Для этого разместим на форме компонент OpenDialog категории Dialogs и присвоим ему имя Open1 (свойство Name). Кроме того, определите в свойстве Filter следующий фильтр: ini-файлы|*.ini|Все файлы|*.*.

Теперь разработаем меню программы. Для этого разместите на форме компонент MainMenu категории Standard и создайте меню в соответствии с рис. 13.1.

⇖ Разработка меню рассматривается в главе 6, "Программа просмотра рисунков".

Рис. 13.1. Меню для программы-теста

Полученная форма должна примерно соответствовать рис. 13.2.

Рис. 13.2. Форма программы-теста

Разработка программного кода

Для начала, объявим все глобальные переменные:

>var

> Form1: TForm1;

> i, a, n, balls, vopr: integer; {различные счетчики и переменные для подсчета баллов}

> dir, dir2, ss, zz, yes: string; {путь к файлу с вопросами, к программе и расшифрованной базе}

> win: TIniFile; //переменная для работы с ini-файлами

mass: array[1..100] of integer; {содержит номера уже заданных вопросы, чтобы они не повторялись}

> f1, f2: file of char; //переменные для работы с файлами

сор: char; //для работы с каждым символом отдельно

Добавим в раздел uses ссылку на модуль IniFiles, который потребуется для работы с классом TIniFile. Мы также разработаем четыре собственные процедуры. Объявим их как закрытые члены класса формы:

>type

>TForm1 = class(TForm)

> …

>private

> { Private declarations }

> procedure start; //начало теста

> procedure question_select; //выбор вопроса

> procedure vars(var variant: integer); {сортировка и определение правильного варианта ответа}

procedureverno(); {проверка: правильно ли ответил пользователь}

>public

> { Public declarations }

>end;

Теперь создадим сами процедуры в разделе implementation. Процедура Start:

>procedure TForm1.start();

>begin

> Randomize; //Включаем генератор случайных чисел

> for i:=1 to n do mass[i] := 0; //n – количеству вопросов

> {$I-} //отключаем контроль ошибок ввода/вывода.

> //делаем все элементы видимыми для пользователя

> Memo1.Visible:= True;

> RadioGroup1.Visible:= True;

> Label1.Visible:= True;

> an1.Visible:= True;

> an2.Visible:= True;

> an3.Visible:= True;

> an4.Visible:= True;

> p1.Visible:= True;

> p2.Visible:= False;

> p3.Visible:= False;

> p4.Visible:= False;

> p5.Visible:= False;

> balls:= 0;

> Label2.Visible:= False; //прячем результаты

> Label1.Caption:= 'Первый вопрос:';

> dir2:= 'C:\base.bsd'; //путь к расшифрованной базе

> //копируем зашифрованную базу на диск С:

> CopyFile(PChar(ss), PChar(dir2), True);

> //связываем переменную f1 с зашифрованным ini-файлом

> AssignFile(f1, ss);

> //связываем переменную f2 с файлом C:\base.bsd

> AssignFile(f2, dir2);

> Reset(f1); //открываем первый файл на чтение

> Rewrite(f2); //второй – на запись

> while not Eof(fl) do

> begin //пока не достигнут конец первого файла

>  Read(f1, cop); //считываем один символ из файла

>  сор:= Chr(Ord(cop) xor 101); //расшифровываем символ

>  Write(f2, сор); //записываем расшифрованный символ в файл

end;

> CloseFile(f1); //закрываем первый файл

> CloseFile(f2); //закрываем второй файл

> {$I+} //включаем контроль ошибок ввода/вывода

Win:= TIniFile.Create(dir2); //работаем с ini-файлом

> //считываем количество вопросов в базе

> ss:= Win.ReadString('num', 'num', ss);

> //преобразовываем строку в число и записываем значение в n

n:= StrToInt(ss);

> vopr:=Random(4) + 1;

>//случайное число от 1 до 4

vars(vopr); {передаем число процедуре vars, которая сортирует варианты ответов}

>end;

Эта процедура начинает игру. Сначала делаем все элементы видимыми и прячем метку, отображающую результат прохождения теста. Затем открываем файл, содержащий вопросы, и считываем из него по одному символу. Каждый байт расшифровывается особо и записывается в отдельный файл. Далее мы работаем с расшифрованным файлом как с обычным ini-файлом. Первое, что мы считываем, — это общее количество вопросов в базе.

Теперь очередь процедуры question_select:

>procedure TForm1.question_seleсt();

>label ran; //метка ran для быстрого перехода

>begin

> Randomize;

>ran:

> a:=Random(n); //выбираем случайный вопрос из базы

> //проверяем: не задавали ли мы этот вопрос ранее

> for i:=1 to n do

>  if mass[i] = a then goto ran;

> for i:=1 to n do

>  if mass[i] = 0 then begin

>   mass[i]:= а; {записываем номер вопроса, чтобы не задавать его больше }

>   Break;

end;

> //сбрасываем флажки со всех вариантов ответов

> an1.Checked:= False;

> an2.Checked:= False;

> an3.Checked:= False;

> an4.Checked:= False;

>end;

Эта процедура случайным образом выбирает вопрос. Затем выполняется проверка: не задавался ли этот вопрос ранее. Если мы нашли вопрос, который еще не был задан, то задаем его и помечаем как уже заданный, чтобы не задавать его больше в текущей сессии.


Рекомендуем почитать
Графика DirectX в Delphi

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


Вторая жизнь старых компьютеров

Сейчас во многих школах, институтах и других учебных заведениях можно встретить компьютеры старого парка, уже отслужившие свое как морально, так и физически. На таких компьютерах можно изучать разве что Dos, что далеко от реалий сегодняшнего дня. К тому же у большинства, как правило, жесткий диск уже в нерабочем состоянии. Но и выбросить жалко, а новых никто не дает. Различные спонсоры, меценаты, бывает, подарят компьютер (один) и радуются, как дети. Спасибо, конечно, большое, но проблемы, как вы понимаете, этот компьютер в общем не решает, даже наоборот, усугубляет, работать на старых уже как-то не хочется, теперь просто есть с чем сравнивать.


DirectX 8. Начинаем работу с DirectX Graphics

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


Симуляция частичной специализации

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


Обработка событий в С++

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


Питон — модули, пакеты, классы, экземпляры

Python - объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.