Язык программирования Delphi

Дипломная работа - Компьютеры, программирование

Другие дипломы по предмету Компьютеры, программирование




е и те, которые игрок не успел найти.

.4 Процедура обработки события OnMouseDown на поверхности игрового поля

// нажатие кнопки мыши на игровом поле

procedure TForm1.Form1MouseDown(Sender: TObject;: TMouseButton;: TShiftState; X, Y: Integer);, col : integer;status = 2 // игра завершенаexit;status = 0 then // первый щелчок

status := 1;

// преобразуем координаты мыши в индексы

// клетки поля:= Trunc(y/H) + 1;

col := Trunc(x/W) + 1;Button = mbLeft thenPole[row,col] = 9 then

begin // открыта клетка, в которой есть мина

200thenbegin">Pole[row,col] := Pole[row,col] + 100;:= 2; // игра закончена(Form1.Canvas, status);elsePole[row,col] 200 then begin

// уберем флаг и закроем клетку:= nFlag - 1;

Pole[row,col] := Pole[row,col]-200;

// уберем флаг:= (col-D* W + 1; у := (row-1)* H + 1;

Canvas.Brush.Color := clLtGray;.Rectangle(x-1,y-1,x+W,y+H);

end else// поставить в клетку флаг

nFlag := nFlag + 1; if Pole[row,col] = 9nMin := nMin + 1;[row,col]:=Pole[row,col]+200;

// поставили флаг(nMin = NM) and (nFlag = NM) then begin:= 2;

// игра закончена(Form1.Canvas, status);Kletka(Form1.Canvas, row, col, status);

end;;

3.5 Справочная информация

При выборе из меню ? команды Справка появляется справочная информация - правила игры (рис. 6)

Рис. 6. Окно справочной информации.

Примечание

Перед непосредственным созданием процедуры, обеспечивающей вывод справочной информации, в главную форму необходимо добавить компонент HhOpen.

.6 Процедура, обеспечивающая вывод справочной информации

// выбор из меню ? команды Справка

procedure TForm1.N3Click(Sender: TObject);: string; // файл справки: string; // раздел справки

pwHelpFile : PWideChar;

// файл справки (указатель на строку WideChar): PWideChar;

// раздел (указатель на строку WideChar)

begin:= saper.chm;:= saper_02.htm;

// выделить память длястрок GetMem(pwHelpFile, Length(HelpFile) * 2);(pwHelpTopic, Length(HelpTopic)*2);

// преобразовать ANSI-строку в WideString-строку:= StringToWideChar(HelpFile,, MAX_PATH*2);:= StringToWideChar(HelpTopic,,32);

// вывести справочную информацию.Hhopen1.OpenHelp(pwHelpFile,);

end;

.7 Информация О программе

При выборе из меню ? команды О программе на экране должно появиться одноименное окно (рис. 7).

Рис. 7. Окно О программе.

Чтобы программа во время своей работы могла вывести на экран окно, отличное от главного (стартового), нужно создать это окно. Делается это выбором из меню File команды New form. В результате выполнения команды New form в проект добавляется новая форма и соответствующим ей модуль.

Вид формы AboutForm после добавления необходимых компонентов приведен на рис. 8, значения ее свойств - в табл. 2.

программный обеспечение delphi

Рис. 8. Форма О программе.

Таблица 2. Значения свойств формы О программе

СвойствоЗначениеNameAboutFormCaption0 программеBorderStyleBsSingleBorderlcons . biSystemMenuFalseBorderlcons .biMininizeFalseBorderlcons . biMaximizeFalse

Вывод окна О программе выполняет процедура обработки события click, которое происходит в результате выбора из меню ? команды О программе.

Непосредственно вывод окна выполняет метод showModal, который выводит окно как модальный диалог.

.8 Процедура обработки события click, выполняющая вывод окна О программе

// выбор из меню ? команды О программе

procedure TForm1.N4Click(Sender: TObject);.Top :=(Forml.Top + Forml.Height/2 - AboutForm.Height/2);.Left :=(Form1.Left +Form1 .Width/2

AboutForm. Width/2 }; AboutForm. ShowModal;;

Примечание

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

Если не предпринимать никаких усилий, то окно О программе появится в той точке экрана, в которой находилась форма во время ее разработки вместе с тем, можно "привязать" это окно к главному окну программы так, чтобы оно появлялось в центре главного окна. Привязка осуществляется на основании информации о текущем положении главного окна программы и размере окна О программе. Окно О программе должно быть удалено с экрана в результате щелчка на кнопке Ok. Процедура обработки этого события приведена ниже.

procedure TAboutForm.ButtonlClick (Sender: TObject) ;:= mrOk;;

4.Листинг программы

//модуль главной формы

unit saper_1;, Messages, SysUtils, Classes,, Controls, Forms, Dialogs,, StdCtrls, OleCtrls, HHOPENLib_TLB;= class(TForm): TMainMenu;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: THhopen;Form1Create(Sender: TObject);Form1Paint(Sender: TObject);Form1MouseDown(Sender: TObject; Button: TMouseButton;: TShiftState; X, Y: Integer);N1Click(Sender: TObject);N4Click(Sender: TObject);N3Click(Sender: TObject);

{ Private declarations }

{ Public declarations };: TForm1;saper_2;

{$R *.DFM}

const= 10; // кол-во клеток по вертикали= 10; // кол-во клеток по горизонтали= 10; // кол-во мин= 40; // ширина клетки поля

H = 40; // высота клетки поля: array[0..MR+1, 0.. MC+1] of integer; // минное поле

// значение элемента массива:

// 0..8 - количество мин в соседних клетках

// 9 - в клетке мина

// 100..109 - клетка открыта

// 200..209 - в клетку поставлен флаг: integer; // кол-во найденных мин: integer; // кол-во поставленных флагов: integer; // 0 - начало игры; 1- игра; 2 -результат

Procedure NewGame(); forward;

// генерирует новое полеShowPole(Canvas : TCanvas; status : integer); forward;// Показывает полеKletka(Canvas : TCanvas; row, col, status : integer); forward; // выводит содержимое клетки

Procedure Open( row, col : integer); forward;// открывает текущую и все соседние клетки, в которых нет мин

Procedure Mina(Canvas : TCanvas; x, y : integer); forward; // Рисует минуFlag( Canvas : TCanvas; x, y : integer); forward;// Рисует флаг

// выводит на экран содержимое клеткиKletka(Canvas : TCanvas; row, col, status : integer);

var,y : integer; // координаты области вывода

begin:= (col-1)* W + 1;:= (row-1)* H + 1;status = 0 then.Brush.Color := clLtGray;.Rectangle(x-1,y-1,x+W,y+H);;;Pole[row,col] < 100 then.Brush.Color := clLtGray; // не открытые - серые.Rectangle(x-1,y-1,x+W,y+H);

// если игра завершена (status = 2), то показать мины

if (status = 2