Язык программирования 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