КАТЕГОРИИ:
АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
Текст программыПриводится полный листинг программы. Пример листинга: unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons, Menus, ExtCtrls; type TForm1 = class(TForm) Image1: TImage; MainMenu1: TMainMenu; N1: TMenuItem; N2: TMenuItem; N3: TMenuItem; BitBtn1: TBitBtn; BitBtn2: TBitBtn; Panel1: TPanel; Label1: TLabel; Edit1: TEdit; Label2: TLabel; Label3: TLabel; BitBtn3: TBitBtn; Label4: TLabel; BitBtn4: TBitBtn; BitBtn5: TBitBtn; BitBtn6: TBitBtn; BitBtn7: TBitBtn; BitBtn8: TBitBtn; Panel2: TPanel; Memo1: TMemo; ListBox1: TListBox; Button1: TButton; N4: TMenuItem; N5: TMenuItem; Label5: TLabel; procedure BitBtn1Click(Sender: TObject); procedure Edit1KeyPress(Sender: TObject; var Key: Char); procedure BitBtn3Click(Sender: TObject); procedure BitBtn7Click(Sender: TObject); procedure ListBox1Click(Sender: TObject); procedure Button1Click(Sender: TObject); procedure N4Click(Sender: TObject); procedure N3Click(Sender: TObject); procedure N5Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; //Перечисляемый тип для определения направления движения Type Trend = (nord, ost, zued, west); // Структура элемента списка Uk = ^Room; Room = Record Num: Integer; Door: Array [Trend] Of Uk; Next: Uk; End; // Структура компонента файла помощи THelp = Record v: String[100]; otv: Array [1..4] Of String[100]; End; TNameFile = String[20]; Var Spi, pp, Iroom: Uk; r: Trend; ff: File Of THelp; // Spi – указатель на начало списка; pp, Iroom –рабочие указатели; // r – для определения направления движения; // ff – файловая переменная для обращения к файлу помощи. implementation Uses Unit2, Unit3; {$R *.DFM} Function Nroom(Spi: Uk; n: Integer): Uk; // В списке помещений находим указатель на n - oe Var q: Uk; Begin q:= Spi; While (q<>nil) and (q^.num<>n) Do q:= q^.next; Nroom:= q; End;
procedure TForm1.BitBtn1Click(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^.Num:= i; For r:= nord To west Do p^.Door [r]:= nil; p^.next:= Spi; Spi:= p; End; //Еще раз считываем из файла, но уже с дверьми Reset (f); While not Eof(f) Do Begin Read(f, i); p:= Nroom(Spi, i); For r:= nord To west Do Begin Read(f, nr); If nr = 0 Then p^.Door[r]:= nil Else p^.Door[r]:= Nroom(Spi, nr); End; End; // Подготовка формы для ввода номера начала помещения label1.Caption:= ‘Введите № комнаты, с которой хотите начать движение’; Edit1.Visible:= True; label1.Visible:= True; Button1.Visible:= True; end; procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); // Защита от недопустимых символов (вводятся только цифры) begin If not (key in [‘1’..’9']) Then Key:= #27; end;
procedure TForm1.BitBtn3Click(Sender: TObject); // Перемещение. BitBtn3 – север; BitBtn4 – запад; //BitBtn5 – восток; BitBtn6 – юг. Var aa: String[8]; c: Integer; pp: Uk; //aa – имя кнопки; c – номер кнопки; //pp – указатель текущего помещения. begin pp:= Iroom; aa:= (sender as TBitBtn).Name; c:= StrToInt(Copy(aa,7,1)); Case c of 3: r:= nord; 5: r:= ost; 6: r:= zued; 4: r:= west; End; Iroom:= Iroom^.Door[r]; If Iroom = nil Then Begin ShowMessage(‘Это невозможно!’);Iroom:= pp; End Else Label3.Caption:= IntToStr(Iroom^.Num); Label4.Caption:= IntToStr(Iroom^.Num); If Iroom^.Num = 999 Then Begin ShowMessage(‘Свобода!!!’); Panel1.hide; label1.Hide; Button1.Hide; Exit End; end; procedure TForm1.BitBtn7Click(Sender: TObject); // Вывод содержимого справки в компоненты панели Panel2 Var i: Integer; a: THelp; Begin Panel1.Visible:= False; Panel2.Visible:= True; Label5.Caption:= IntToStr(Iroom^.Num); // Устанавливаем указатель текущего компонента файла Reset(ff); Seek(ff, Iroom^.Num - 1); Read(ff, a); Memo1.Lines.Add(a.v); For i:= 1 To 4 Do ListBox1.items[i]:= a.otv[i]; end; procedure TForm1.ListBox1Click(Sender: TObject); //Определение направления путем выбора верного ответа в списке Var r1: Trend; begin pp:= Iroom; Panel2.Visible:= False; Panel1.Visible:= True; for r1:= nord To west Do If ListBox1.ItemIndex = ord(r1) + 1 Then r:= r1; Iroom:= Iroom^.Door[r]; If Iroom = nil Then Begin ShowMessage(‘Это невозможно!’);Iroom:= pp; End Else Label3.Caption:= IntToStr(Iroom^.Num); Label4.Caption:= IntToStr(Iroom^.Num); If Iroom^.Num = 999 Then Begin Writeln(‘Свобода!!!’); Panel1.hide; label1.Hide; Button1.Hide; Exit End; end; procedure TForm1.Button1Click(Sender: TObject); // Ввод номера начала помещения Var nr: Integer; FileName: TNameFile; // nr – номер помещения для начала движения // File Name – имя файла помощи begin If Edit1.Text = ‘’ Then Exit; nr:= StrToInt(Edit1.Text); Iroom:= Nroom(Spi, nr); If Iroom = nil Then Begin ShowMessage(‘Такого помещения нет!’); Edit1.Text:= ‘’; Label1.Caption:= ‘’; Exit; End; panel1.Visible:= True; Label3.Caption:= IntToStr(Iroom^.Num); Label4.Caption:= IntToStr(Iroom^.Num); FileName:= InputBox(‘Имя файла помощи’, ‘Введите имя файла помощи’,’’); AssignFile(ff, FileName); Edit1.Hide; Label1.Hide; Button1.Hide; end; procedure TForm1.N4Click(Sender: TObject); // Переход к форме №2, осуществляющей запись плана помещений на диск. Begin Form1.Hide; Form2.Show; End; procedure TForm1.N3Click(Sender: TObject); //Закрыть приложение begin Form1.Close; Form2.Close; Form2.Close; Application.Terminate; end; procedure TForm1.N5Click(Sender: TObject); //Переход к форме №3, осуществляющей запись на диск файла помощи. begin Form1.Hide; Form3.Show; end; end. Далее приводятся листинги остальных модулей.
|