Компонент Form1.
Написание программы
Проектная часть
Для разработки приложения игры "Лабиринт" используется среда визуального программирования "Delphi. Проект программы содержит три окна:
1. Form1 — перемещение по лабиринту.
2. Form2 — запись на диск плана помещений здания.
3. Form3 — запись на диск файла подсказки.
Окно Form1. Перемещение по лабиринту. (Рис. 8).
Свойства:
Caption — Игра "Лабиринт";
Border — bsSingle;
BiSystemMenu — false;
BiMinimaze — false;
BiHelp —- False;
События: нет.
1— компонент TMainMenu.
Свойства:
Items
Игрa(N1)
Настройка (N2)
Выход (N3)
Ввод плана помещения (N4)
Ввод файла помощи (N5)
Контейнер Panel 1. (Рис. 9)
События:
Для N1 — событие BitBtn1 Click (приводится ниже).
N3Click — закончить работу с приложением.
N4Ciick - перейти к работе со второй формой.
N5Ciick — перейти к работе с третьей формой.
2— компонент TLabel1.
Свойства:
Font — сиреневый, размер 12.
3— компонент TEdit1.
Свойства:Text - очистить.
События: Edit1.KeyPress — защита от ввода недопустимых символов.
4— компонент TBitBtn1
Свойства: Caption - Game; Glyph - Picture.Bmp.
События: BitBtn1.Click — ввод плана помещений из файла и организация структуры “Связанный список". Выводит сообщение в метку Label 1 и делает видимыми: Button1, Label1, Edit1.
5— компонент TBitBtn2.
Свойства: Kind — bkClose
6— компонент Трапеl.
Свойства: Align — alClient; Caption — очистить; Visible — False.
7— компонент TPanel2.
Свойства: Align — alClient; Caption — очистить; Visible — False.
Компонент Image1 (на схеме не пронумерован).
Свойства: Picture — Arches.Bmp; Stretch — True;
Компонент Button 1 (закрыт компонентом BitBtn1):
Свойства: Caption — Продолжить.
События: Button1Click —ввод номера помещения, ввод имени файла помощи, показывает Panel2, прячет Edit1, Label1, Button1.
Рис. 9. Компонент Panel 1
Перечисляются компоненты, расположенные в контейнере Раnеl1 их свойства и события.
Далее приводятся графические изображения других панелей и окон, перечисляются компоненты и их свойства.
Обработчик BitBtn1 Click.
Для построения детальной схемы алгоритма необходимо определить структуру элемента списка и ввести обозначения.
Предлагается следующая структура элемента списка помещений:
Room = Record Num : Integer;
Door: Array [Trend] Of Uk;
Next:Uk;
End;
Поле Num хранит номер помещения; массив Door предназначен для хранения ссылок на смежные комнаты; поле Next содержит ссылку на следующий элемент списка. Trend — это перечисляемый тип данных, имеющий следующие значения: nord, ost, zued, west. Эти значения соответствуют направлениям дверей, которые могут быть расположены в каждом помещении. Указатель на начало списка помещений обозначим идентификатором Spi. Spi - глобальная переменная, которая описана в головной части программы.
Схема алгоритма построения связанного списка приведена на рис. 10.
Схема алгоритма построения многосвязанного списка приведена на рис. 11.
Программа.
procedureTForm1. BitBtniClick (Sender: TObject);
// Построение связанного списка помещений
Var FileName : TNameFile; f: TextFile;
p : Uk; i, nr: Integer;
begin
FileName := InputBox('План помещений', 'Введите имя файла ',");
AssignFile(f, FileName);
Reset(f);
//Считываем только номера помещений и составляем связанный список
Spi := nil;
While not Eof(f) Do
Begin
New(p);
Readln(f, i);
p.NurrK:=i;
For r := nord To west Do p:=Door [r]- nil; p.next:= Spi;
fpi := PI
End;
//Еще раз считываем из файла, но уже с дверьми
Reset (f);
While not Eof(f) Do
Begin
Read(f, i);
p := Nroom(Spi, i);
For r := nord To west Do Hegin Read(f, nr);
If nr = 0 Then
p.Door[rJ := nil
Else p.Door[r] := Nroom(Spi, nr);
End;
End;
// Подготовка формы для ввода номера начала помещения
Label1.Caption := 'Введите № комнаты, с которой хотите начать движение';
Edit1.Visible := True;
Label1.Visible := True;
Button1.Visible := True;
end;
функция Nroom — поиск ссылки на помещение с заданным номером. В начинающемся в Spi списке помещений по номеру помещения N отыскивается нужное. Значение функции указывает на это помещение. Схема алгоритма приведена на рис. 12.
Программа
Function Nroom(Spi : Uk; n : Integer): Uk;
// В списке помещений находим указатель на п - ое
Var q:Uk;
Begin
q := Spi;
While (q<>nil) and (q.numOn) Do
q := q\next;
Nroom := q;
End;
Рис. 12. Схема алгоритма функции Nroom
Аналогично уточняются все алгоритмы и разрабатываются обработчики событий.